Как получить серийный номер или идентификатор эмулятора Android после его запуска? - PullRequest
10 голосов
/ 06 февраля 2010

Если я запускаю несколько эмуляторов с опцией -no-window на одном компьютере. Команда «adb devices» показывает:

List of devices attached
emulator-5554  device
emulator-5556  device
emulator-5558  device
...

Однако, согласно этому выводу, я не могу сказать разницу между каждым устройством эмулятора вообще. Мне нужно знать, какой эмулятор работает на каком AVD, затем я могу установить APK или отправить команды в эмулятор.

Как распознать каждое устройство эмулятора или получить серийный номер эмулятора после его запуска?

Ответы [ 3 ]

24 голосов
/ 08 февраля 2010

Всегда запускайте один и тот же AVD на тех же портах, не позволяйте эмулятору решать. Используйте

$ emulator -ports X,Y @avd_X

тогда серийный номер будет emulator-X , а ваш avd_X всегда будет на портах X, Y , поэтому вы можете запускать команды этот серийный номер, как например

$ adb -s emulator-X shell cmd

Чтобы убить эмулятор, запустите

$ adb -s emulator-X emu kill
2 голосов
/ 04 февраля 2017

Есть 2 способа, с помощью которых я могу выполнить обратный поиск серийного номера до имени AVD

Опция Telnet - Гадкий путь

Как указано в этом ответе SO ... вы можете отменить поиск имени AVD для каждого серийного номера, используя Telnet. Это слабовато, потому что все, что вы делаете, это находите экземпляр запущенного эмулятора с определенным именем AVD. Он не однозначно идентифицирует эмулятор, с которым вы хотите работать. Он также страдает от необходимости использовать telnet и анализировать номер порта для каждого эмулятора.

Сначала получите текущие серийные номера

adb devices

затем подключитесь к номеру порта каждого устройства

telnet localhost 5554

и введите команду

avd name

, который будет возвращать AVD-имя этого эмулятора.

Опция UUID - правильный путь

Первоначально я видел это в проекте под названием DCMTK . Сгенерируйте UUID uuidgen и установите свойство на эмуляторе при запуске! В моем примере запускается эмулятор для выполнения некоторых проверок времени компиляции для библиотек, которым для запуска информации о типе требуется выполнить код на целевом объекте.

emulator -avd nexus19-arm -no-window -no-boot-anim -noaudio -prop emu.uuid=7a6f8701-43c2-4e16-988a-8b4992c0bf8d >/dev/null </dev/null 2>&1 &

Затем, когда вы хотите найти конкретный экземпляр эмулятора, вы просто прокручиваете все запущенные эмуляторы и ищите этот UUID.

adb -s emulator-5556 shell getprop emu.uuid

в цикле:

for SERIAL_NUMBER in `adb devices| grep emulator| cut -f1`; do 
    UUID=`adb -s ${SERIAL_NUMBER} shell getprop emu.uuid | tr -d '\r\n'`
    echo ${SERIAL_NUMBER} ${UUID}
done

Отслеживание всего жизненного цикла эмулятора

  1. Запустить эмулятор со свойством UUID
  2. Затем запустите цикл, который проверяет, что каждое устройство подключено к сети и / или имеет соответствующий UUID
  3. После того, как вы получите матч-вызов, adb -s ${SERIAL_NUMBER} wait-for-device, чтобы вы знали, когда можно поговорить с эмулятором
  4. Если вы хотите, чтобы система была полностью онлайн, проверьте свойство sys.boot_completed
  5. Когда вы закончите, просто убейте эмулятор с помощью adb -s ${SERIAL_NUMBER} emu kill
1 голос
/ 06 февраля 2010

Эта же строка (например, emulator-5554) отображается в строке заголовка окна эмулятора.

...