Подтвердить что ты не робот

Android: как использовать "adb shell wm" для имитации других устройств

Итак, я купил Nexus 10 для разработки и был очень взволнован перспективой возможности имитации других устройств с использованием команды "adb shell wm" с ее подкомандами размера, плотности и overscan.

Однако у меня было несколько проблем, связанных с этой работой. Я бы хотел, чтобы кто-нибудь еще столкнулся/преодолел их. Ради этой дискуссии, скажем, я пытаюсь имитировать типичный телефон, запуская следующее:

adb shell wm size 800x480
adb shell wm density 240
adb shell wm overscan reset

Во-первых, настройка размера помешает строке меню. В портретном режиме только некоторые из кнопок будут присутствовать и в неправильном масштабе, а в ландшафтном режиме панель меню полностью отсутствует. Фактически даже после того, как вы reset все, оно все еще отсутствует, пока вы не перезапустите устройство. Любое обходное решение для этого?

Во-вторых, что делает команда overscan? Я нигде не могу найти документацию.

В-третьих, есть ли способ заставить устройство визуализировать экран с использованием 1 пикселя нового размера до 1 пикселя физического экрана? То есть, если я установил размер 800x480, я бы хотел, чтобы новый экран занимал ровно столько места. Вместо этого, кажется, что экран 800x480 растянут так, что самая длинная сторона просто подходит для физического дисплея. Я подозреваю, что чрезмерное сканирование может быть ответом, но когда я попытался установить его на 0,0800,480, он постоянно повесил мою систему, и мне пришлось reset вернуть изображение factory.

Наконец, есть ли способ заставить планшет имитировать телефон с точки зрения того, что происходит с панелью меню во время изменения ориентации? На планшете строка меню переходит в новую нижнюю часть экрана, но на телефоне она остается там, где она есть.

Мне нравится это устройство до сих пор, но если бы я мог просто заставить работать этот симулятор устройства, мне бы это понравилось! Спасибо заранее за любые указатели.

4b9b3361

Ответ 1

Хорошо, я думаю, что я понял, что это полезно. Я попытаюсь ответить на каждый из вопросов, которые я задал в своем первоначальном посте. Затем я расскажу о нескольких других вещах, которые я узнал о том, как эффективно использовать это.

  • Есть ли способ избежать беспорядка панели меню на главном экране?

Не то, что я обнаружил, и изменение настроек, похоже, имеет кумулятивный эффект, который, как правило, замаскирует домашний экран до тех пор, пока вы не перезапустите устройство. Однако вы можете хотя бы разблокировать устройство, что достаточно, чтобы быть полезным. Ключ должен сначала запустить ваше приложение, а затем настроить размер и плотность, когда он уже запущен. Просто нажмите кнопку питания, чтобы выключить экран, отрегулировать размер и плотность по своему усмотрению, затем снова включить экран, разблокировать, и приложение будет работать должным образом при новом размере и плотности.

  • Что делает команда overscan?

Я нашел только наклонные ссылки на это, но лучшее, что я могу определить, это для телевизоров или других дисплеев, где не все из экрана гарантированно будут использоваться/видимы. Я не думаю, что это действительно относится к обычным телефонам или планшетам.

  • Есть ли способ сделать устройство рендерингом экрана с использованием 1 пикселя нового размера на 1 пиксель физического экрана?

Не то, что я обнаружил. Но это, наверное, не имеет значения. Я считаю, что основным моментом использования команд wm shell adm является проверка компоновки, а не просмотр пиксельной графики. (И поверьте мне, то, что вы получаете, - это самое удачное из идеального пикселя.)

  • Есть ли способ заставить планшет имитировать телефон с точки зрения того, что происходит со строкой меню во время изменения ориентации?

Возможно, я делаю это неправильно, но для меня панель меню ведет себя странно и непредсказуемо. Иногда он массивный, иногда он просто отсутствует. Не рассчитывайте на возможность использовать его. Да, это отстой. Кто-то, пожалуйста, звоните, если есть решение этого.

  • Итак, как я могу эффективно использовать "adb shell wm"?

Я не уверен, почему, но мне потребовалось немного времени, чтобы понять это. Вероятно, потому, что, когда я впервые начал это, мой разум не привык к идеям Android о вещах. Но это на самом деле довольно просто.

Сначала установите нужный размер в пикселях. Для этого обсуждения предположим, что мы будем использовать 1024x600.

Затем установите DPI. Но что вы должны установить?

Это сложная часть (ну, часть, которую я не получил вначале). Когда вы устанавливаете DPI, вы устанавливаете другую половину уравнения, которое будет определять размеры в DP виртуального пространства приложения, которое приложение будет использовать для рендеринга. (Дух, я знаю, но я сначала подумал, что указанный ДОИ будет использоваться в основном для выбора ресурсов, что и в самом деле.)

Посмотрим на последствия использования различных плотностей с размером экрана 1024x600.

Во-первых, имейте в виду, что

dp = px * (160 / dpi)

Это означает, что если мы укажем наш dpi на 160, приложение будет считать, что доступное пространство 1024dp x 600dp. Если вместо этого мы используем 240, которые меняются на скудный 683dp x 400 dp, и, наоборот, если мы используем 120, мы получим впечатляющий 1365 dp x 800 dp. Установите его на 80, и теперь вы качаете 2048dp x 1200dp.

Контринтуитивная часть понимает, что определение низкой плотности приводит к тому, что изображение выглядит так, как вы можете видеть на мониторе с ультра-высоким разрешением - все очень мало. Но это потому, что приложение теперь обрабатывает одно и то же физическое пространство, как если бы он был очень большим размером в dp.

Итак, возвращаясь к примеру плотности 80, у нас есть виртуальная область размером 2048dp x 1200dp, но она сжимается на любом физическом экране, который вы фактически используете. Поскольку 160dp должно быть около 1 дюйма, это будет почти потусторонний планшет с шириной 12,8 дюйма. Но все это сведено к фактическому размеру вашего планшета, делая ваш текст размером 30dp в большом размере очень слабым.

Возможно, я всего лишь самый медленный ребенок в комнате, но мне потребовалось некоторое время, чтобы действительно понять это. Надеюсь, это поможет кому-то другому.

Ответ 2

Я думаю, что overscan устанавливает пространство экрана ( "margin" ), которое не используется. Попробуйте что-то вроде adb shell wm overscan 200,200,200,200, запустите приложение, и вы увидите разницу. В Доме разница не так понятна.

Если это действительно полезно в сочетании с размером и плотностью, я не знаю. Я сделал несколько тестов, но не принес никакого полезного результата. Это немного сложно (?), Чтобы увидеть, какие значения использовать...