Отправка консольных команд эмулятора

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

Для выполнения следующих команд необходимо, чтобы у вас уже был запущен эмулятор. Дополнительную информацию о запуске эмулятора см. в разделах «Запуск приложений в эмуляторе Android» и «Запуск эмулятора из командной строки» .

Запуск и остановка консольной сессии

Для доступа к консоли и ввода команд из окна терминала используйте telnet для подключения к консольному порту и укажите свой токен аутентификации. Каждый раз, когда на консоли отображается OK , она готова принимать команды. Обычной командной строки нет.

Для подключения к консоли запущенного виртуального устройства:

  1. Откройте окно терминала и введите следующую команду:
  2. telnet localhost console-port

    В заголовке окна эмулятора отображается номер консольного порта при запуске в отдельном окне, но не при запуске в окне инструментов. Например, заголовок окна для эмулятора, использующего консольный порт 5554, может быть Pixel8_API_34:5554 . Кроме того, команда adb devices выводит список запущенных виртуальных устройств и номера их консольных портов. Для получения дополнительной информации см. раздел «Запрос устройств» .

    Примечание: Эмулятор принимает соединения на портах 5554–5585 и принимает соединения только с localhost .

  3. После того, как в консоли отобразится OK , введите команду auth auth_token .
  4. Прежде чем вы сможете вводить консольные команды , эмулятору потребуется аутентификация. auth_token должен совпадать с содержимым файла .emulator_console_auth_token в вашем домашнем каталоге.

    Если этот файл не существует, команда telnet localhost console-port создаст его, и он будет содержать случайно сгенерированный токен аутентификации. Чтобы отключить аутентификацию, удалите токен из файла .emulator_console_auth_token или создайте пустой файл, если он не существует.

  5. После подключения к консоли введите консольные команды .
  6. Введите help , help command или help-verbose , чтобы увидеть список консольных команд и узнать о конкретных командах.

  7. Для выхода из консольной сессии введите quit или exit .

Вот пример сессии:

$ telnet localhost 5554
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Android Console: Authentication required
Android Console: type 'auth <auth_token>' to authenticate
Android Console: you can find your <auth_token> in
'/Users/me/.emulator_console_auth_token'
OK
auth 123456789ABCdefZ
Android Console: type 'help' for a list of commands
OK
help-verbose
Android console command help:
    help|h|?         Prints a list of commands
    help-verbose     Prints a list of commands with descriptions
    ping             Checks if the emulator is alive
    automation       Manages emulator automation
    event            Simulates hardware events
    geo              Geo-location commands
    gsm              GSM related commands
    cdma             CDMA related commands
    crash            Crashes the emulator instance
    crash-on-exit    Simulates crash on exit for the emulator instance
    kill             Terminates the emulator instance
    restart          Restarts the emulator instance
    network          Manages network settings  (ethernet and cellular only)
    power            Power related commands
    quit|exit        Quits control session
    redir            Manages port redirections
    sms              SMS related commands
    avd              Controls virtual device execution
    qemu             QEMU-specific commands
    sensor           Manages emulator sensors
    physics          Manages physical model
    finger           Manages emulator finger print
    debug            Controls the emulator debug output tags
    rotate           Rotates the screen clockwise by 90 degrees
    screenrecord     Records the emulator's display
    fold             Folds the device
    unfold           Unfolds the device
    multidisplay     Configures the multi-display
    nodraw           turn on/off NoDraw mode. (experimental)
    resize-display   resize the display resolution to the preset size
    virtualscene-image  customize virtualscene image for virtulscene camera
    proxy            manage network proxy server settings
    phonenumber      set phone number for the device


try 'help <command>' for command-specific help
OK
exit
Connection closed by foreign host.

Справочник команд эмулятора

В таблице ниже описаны команды консоли эмулятора с указанием их параметров и значений:

Таблица 1. Команды консоли эмулятора

Общие команды Описание
avd {stop|start|status|name} Осуществляет запросы, управление и контроль виртуального устройства следующим образом:
  • stop : Останавливает выполнение программы на устройстве.
  • start : Запускает выполнение программы на устройстве.
  • status : Запрашивает состояние виртуального устройства, которое может быть running или stopped .
  • name : Запрашивает имя виртуального устройства.
avd snapshot {list|save name |load name |delete name } Сохраняет и восстанавливает состояние устройства в виде снимков следующим образом:
  • list : Отображает список всех сохраненных снимков.
  • save name : Сохраняет снимок под name .
  • load name : Загружает указанный снимок.
  • delete name : Удаляет указанный снимок.

В следующем примере сохраняется снимок с именем firstactivitysnapshot :

avd snapshot save firstactivitysnapshot
fold Если устройство складное и в данный момент разложено, оно складывается для отображения меньшего размера экрана.
unfold Если устройство складное и в данный момент сложено, оно раскладывается для отображения увеличенного экрана.
kill Завершает работу виртуального устройства.
ping Проверяет, запущено ли виртуальное устройство.
rotate Поворачивает AVD против часовой стрелки с шагом в 45 градусов.
Вызвать сбой эмулятора Описание
crash Эмулятор аварийно завершает работу во время выполнения приложения.
crash-on-exit При закрытии приложения эмулятор аварийно завершает работу.
Отладочные теги Описание
debug tags ...

Включает или отключает отладочные сообщения из определенных частей эмулятора. Параметр tags должен быть значением из списка отладочных тегов, который отображается при выполнении emulator -help-debug-tags . Для получения дополнительной информации о параметре -help-debug-tags см. таблицу часто используемых параметров .

В следующем примере активируется radio :

debug radio
Перенаправление портов Описание
redir list Отображает текущее перенаправление портов.
redir add protocol : host-port : guest-port Добавляет новое перенаправление портов следующим образом:
  • protocol : Должен быть либо tcp , либо udp .
  • host-port : Номер порта, который необходимо открыть на хосте.
  • guest-port : Номер порта, на который эмулятор будет перенаправлять данные.
redir del protocol : host-port Удаляет перенаправление порта.
  • protocol : Должен быть либо tcp , либо udp .
  • host-port : Номер порта, который необходимо открыть на хосте.
Географическое местоположение Описание

Устанавливает географическое местоположение, передаваемое приложениям, работающим внутри эмулятора, путем отправки GPS-сигнала в эмулятор.

Как только виртуальное устройство будет запущено, вы можете выполнить одну из следующих команд geo . Эмулятор устанавливает введенное вами местоположение, создавая фиктивный поставщик местоположения. Этот поставщик отвечает на запросы местоположения, установленные приложениями, и передает местоположение в LocationManager . Любое приложение может запросить у LocationManager текущее местоположение GPS для эмулируемого устройства, вызвав LocationManager.getLastKnownLocation("gps") .

geo fix longitude latitude [altitude] [satellites] [velocity] Отправляет простой GPS-сигнал в эмулятор. Укажите longitude и latitude в десятичных градусах. Используйте число от 1 до 12, чтобы указать количество satellites используемых для определения местоположения, а также укажите altitude в метрах и velocity в узлах.
geo nmea sentence Отправляет на эмулируемое устройство сообщение NMEA 0183, как если бы оно было отправлено с эмулируемого GPS-модема. Начинайте sentence с '$GP'. В настоящее время поддерживаются только сообщения '$GPGGA' и '$GPRCM'. Следующий пример — сообщение GPGGA (Global Positioning System Fix Data), которое получает данные о времени, местоположении и координатах для GPS-приемника:
geo nmea $GPGGA ,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx
Фальшивые аппаратные события Описание
event types Список всех типов фиктивных событий. Для событий, имеющих коды, количество кодов указано в скобках справа.

event types
event <type> can be an integer or one of the following aliases:
    EV_SYN
    EV_KEY    (405 code aliases)
    EV_REL    (2 code aliases)
    EV_ABS    (27 code aliases)
    EV_MSC
    EV_SW     (4 code aliases)
    EV_LED
    EV_SND
    EV_REP
    EV_FF
    EV_PWR
    EV_FF_STATUS
    EV_MAX
OK
        

event send types [types ...] Отправляет один или несколько фиктивных типов событий.
event codes type Выводит список кодов событий для указанного типа фиктивных событий.
event send type [: code ]:[ value ] [...] Отправляет одно или несколько фиктивных событий с необязательными кодами и значениями кодов.

Чтобы точно определить, какое событие нужно отправить, можно использовать команду adb , нажимая вручную кнопки на эмуляторе.

Вот события, которые генерируются при нажатии кнопки питания:

adb shell getevent -lt

/dev/input/event12: EV_KEY       KEY_POWER            DOWN
/dev/input/event12: EV_SYN       SYN_REPORT           00000000
/dev/input/event12: EV_KEY       KEY_POWER            UP
/dev/input/event12: EV_SYN       SYN_REPORT           00000000
      
Например, чтобы имитировать длительное нажатие кнопки питания, отправьте два события EV_KEY : keydown и keyup:
event send EV_KEY:KEY_POWER:0
OK
event send EV_KEY:KEY_POWER:1
OK
      

event text message Отправляет строку символов, имитирующих нажатия клавиш. Сообщение должно быть строкой в ​​кодировке UTF-8. Символы Unicode преобразуются в обратном порядке в соответствии с текущей клавиатурой устройства, а неподдерживаемые символы отбрасываются без уведомления.
Управление состоянием питания Описание
power display Отображает состояние батареи и зарядного устройства.
power ac {on|off} Устанавливает состояние зарядки от сети переменного тока: on или off .
power status {unknown|charging|discharging|not-charging|full} Изменяет состояние батареи в соответствии с указанными параметрами.
power present {true|false} Устанавливает состояние наличия батареи.
power health {unknown|good|overheat|dead|overvoltage|failure} Устанавливает состояние здоровья батареи.
power capacity percent Устанавливает оставшийся уровень емкости батареи в процентах от 0 до 100.
Состояние сетевого подключения
(Только Ethernet и сотовая связь)
Описание
network status Проверяет состояние сети, а также текущие характеристики задержки и скорости.
network delay latency

Изменяет задержку эмулируемой сети.

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

Формат измерения сетевой latency может быть одним из следующих (числа указаны в миллисекундах):

Формат задержки сети:

  • gprs : протокол GPRS, использующий диапазон задержки от 150 до 550 Мбит/с.
  • edge : EDGE/EGPRS, использующий диапазон задержки от 80 до 400.
  • umts : UMTS/3G, использующий диапазон задержки от 35 до 200.
  • none : Нет задержки.
  • num : Имитирует указанную задержку в миллисекундах.
  • min : max : Имитирует указанный диапазон задержки.

Чтобы задать задержку при запуске эмулятора, используйте параметр эмулятора -netdelay с поддерживаемым значением latency , указанным в приведенном выше списке форматов сетевой задержки . Вот несколько примеров:

emulator -netdelay gprs
emulator -netdelay 40,100

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

network delay gprs
network delay 40 100
network speed speed Эмулятор позволяет имитировать различные скорости передачи данных по сети.

Вы можете установить скорость или диапазон передачи данных при запуске эмулятора, или же изменить скорость с помощью консоли во время работы приложения в эмуляторе.

speed сети указывается в одном из следующих форматов (числа — килобиты/сек):

Формат скорости сети:

  • gsm : GSM/CSD, скорость передачи данных 14,4 В на загрузку и 14,4 В на выгрузку.
  • hscsd : HSCSD, использующий скорость 14,4 Мбит/с на загрузку и 43,2 Мбит/с на выгрузку.
  • gprs : протокол GPRS, обеспечивающий скорость 40 Мбит/с на загрузку и 80 Мбит/с на выгрузку.
  • edge : EDGE/EGPRS, скорость передачи данных составляет 118,4 Мбит/с на загрузку и 236,8 Мбит/с на выгрузку.
  • umts : UMTS/3G, использующий скорость 128,0 Мбит/с на загрузку и 1920 Мбит/с на выгрузку.
  • hsdpa : HSDPA, использующий скорость 348,0 Мбит/с на загрузку и 14 400,0 Мбит/с на выгрузку.
  • lte : LTE, использующий скорость 58 000 Мбит/с на загрузку и 173 000 Мбит/с на выгрузку.
  • evdo : EVDO, использующий скорость 75 000 Мбит/с на загрузку и 280 000 Мбит/с на выгрузку.
  • full : неограниченная скорость, но зависит от скорости вашего интернет-соединения.
  • num : Задает точную скорость в килобитах в секунду, используемую как для загрузки, так и для скачивания.
  • up : down : Устанавливает точную скорость загрузки и выгрузки в килобитах/сек отдельно.

Чтобы задать скорость сети при запуске эмулятора, используйте параметр эмулятора -netspeed с поддерживаемым значением speed , как в приведенном выше списке форматов скорости сети . Вот несколько примеров:

emulator -netspeed gsm @Pixel_API_26
emulator -netspeed 14.4,80 @Pixel_API_26

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

network speed 14.4 80
network capture {start|stop} file Отправляет пакеты в файл. Ниже приведен список параметров и их значений:
  • start file : Начинает отправку пакетов в указанный файл.
  • stop file : Останавливает отправку пакетов в указанный файл.
Эмуляция телефонии Описание
Эмулятор Android включает в себя собственные эмулируемые модемы GSM и CDMA, позволяющие имитировать телефонные функции в эмуляторе. Например, с GSM можно имитировать входящие телефонные звонки, а также устанавливать и завершать соединения для передачи данных. С CDMA вы указываете источник подписки и предпочтительный список роуминга. Система Android обрабатывает имитированные звонки точно так же, как и реальные. Эмулятор не поддерживает аудиосвязь во время звонков.
gsm {call|accept|cancel|busy} phonenumber Параметры gsm следующие:
  • call : Имитирует входящий телефонный звонок с phonenumber .
  • accept : Принимает входящий вызов с phonenumber и изменяет состояние вызова на active . Вы можете изменить состояние вызова на active только в том случае, если его текущее состояние — waiting или held .
  • cancel : Завершает входящий телефонный звонок с этого номера или исходящий телефонный звонок на phonenumber .
  • busy : Закрывает исходящий вызов на phonenumber и изменяет состояние вызова на busy . Вы можете изменить состояние вызова на busy только тогда, когда его текущее состояние - " waiting .
gsm {data|voice} state Команда data state изменяет состояние соединения GPRS, а команда data voice state изменяет состояние соединения GPRS для передачи данных, следующим образом:
  • unregistered : Нет доступной сети.
  • home : В локальной сети, без роуминга.
  • roaming : В роуминговой сети.
  • searching : Поиск в сетях.
  • denied : только экстренные вызовы.
  • off : То же самое, что и unregistered .
  • on : То же, что и home .
gsm hold Изменяет состояние вызова на hold . Вы можете изменить состояние вызова на hold только тогда, когда его текущее состояние — active или waiting .
gsm list Отображает список всех входящих и исходящих вызовов и их статус.
gsm status Сообщает о текущем состоянии голосовой связи/передачи данных GSM. Значения соответствуют значениям, указанным для команд voice и data .
gsm signal {rssi|ber} Изменяет сообщаемый уровень сигнала (RSSI) и частоту битовых ошибок (BER) в течение следующих 15 секунд обновления. Ниже приведен список параметров и их значений:
  • Диапазон значений rssi составляет от 0 до 31, а для неизвестного значения — 99.
  • Диапазон значений ber составляет от 0 до 7, а для неизвестного значения — 99.
gsm signal-profile num Задает профиль уровня сигнала. num — число от 0 до 4.
cdma ssource source Устанавливает текущий источник подписки CDMA, где source — это список разрешенных абонентов на основе сети, содержащий абонентов оператора CDMA и их значения, следующим образом:
  • nv: Считывает данные подписки из энергонезависимой оперативной памяти.
  • ruim: Считывает данные о подписке из съемного модуля идентификации пользователя (RUIM).
cdma prl_version version Выводит текущую версию списка предпочтительных роуминговых номеров (PRL). Номер версии относится к базе данных PRL, содержащей информацию, используемую в процессе выбора и приобретения системы.
Управление датчиками в эмуляторе Описание
Эти команды указывают, какие датчики доступны в AVD. Помимо использования команды sensor , вы можете просмотреть и настроить параметры эмулятора на экране «Виртуальные датчики» на вкладках «Акселерометр» и «Дополнительные датчики» .
sensor status Выводит список всех датчиков и их состояние. Ниже приведен пример вывода команды sensor status :
sensor get sensor-name Получает настройки для sensor-name . В следующем примере получается значение для акселерометра:
sensor get acceleration
acceleration = 2.23517e-07:9.77631:0.812348

Значения acceleration разделенные двоеточиями (:), относятся к координатам x, y и z виртуальных датчиков.

sensor set sensor-name value-x : value-y : value-z Задает значения для sensor-name . В следующем примере датчик ускорения задается значениями x, y и z, разделенными двоеточиями.
sensor set acceleration 2.23517e-07:9.77631:0.812348
эмуляция SMS Описание
sms send sender-phone-number textmessage Генерирует эмулированное входящее SMS-сообщение. Ниже приведен список параметров и их значений:
  • sender-phone-number : Содержит произвольную числовую строку.
  • textmessage : SMS-сообщение.

В следующем примере сообщение "hi there" отправляется на номер телефона 4085555555:

sms send 4085555555 hi there

Консоль пересылает SMS-сообщение в Android-фреймворк, который передает его приложению на эмуляторе, обрабатывающему SMS, например, приложению «Сообщения». Если вы передадите 10 цифр, приложение отформатирует их как номер телефона. Более длинные или короткие числовые строки будут отображаться в том виде, в котором вы их отправили.

имитация отпечатков пальцев Описание
finger touch fingerprint-id Имитирует касание датчика пальцем.
finger remove Имитирует удаление пальца.

Инструкции по использованию этих команд см. в следующем разделе, посвященном моделированию и проверке отпечатков пальцев .

Моделирование и проверка отпечатков пальцев

Рисунок 1. Экран аутентификации по отпечатку пальца.

Используйте команду finger для имитации и проверки аутентификации по отпечатку пальца в вашем приложении. Вам потребуется SDK Tools 24.3 или выше и Android 6.0 (уровень API 23) или выше.

Для имитации и проверки аутентификации по отпечатку пальца выполните следующие действия:

  1. Если у вас еще нет отпечатка пальца, зарегистрируйте новый отпечаток в эмуляторе, выбрав «Настройки» > «Безопасность» > «Отпечаток пальца» и следуя инструкциям по регистрации.
  2. Настройте приложение для аутентификации по отпечатку пальца . После выполнения этой настройки на вашем устройстве отобразится экран аутентификации по отпечатку пальца.
  3. Пока ваше приложение отображает экран аутентификации по отпечатку пальца, перейдите в консоль и введите команду finger touch и созданный вами идентификатор отпечатка пальца. Это имитирует касание пальца.
  4. Затем введите команду finger remove , чтобы имитировать удаление пальца.

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