Как получить серийный номер эмулятора в файле сценария? [Дубликат]

Другим способом настройки nvcc для использования конкретной версии gcc (например, gcc-4.4) является редактирование nvcc.profile и изменение PATH для включения путь к gcc, который вы хотите использовать первым.

Например (gcc-4.4.6 установлен в / opt):

PATH += /opt/gcc-4.4.6/lib/gcc/x86_64-unknown-linux-gnu/4.4.6:/opt/gcc-4.4.6/bin:$(TOP)/open64/bin:$(TOP)/share/cuda/nvvm:$(_HERE_):

Местоположение nvcc.profile меняется, но он должен находиться в том же каталоге, что и исполняемый файл nvcc .

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

7
задан papalagi 7 February 2010 в 16:51
поделиться

3 ответа

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

$ emulator -ports X,Y @avd_X

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

$ adb -s emulator-X shell cmd

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

$ adb -s emulator-X emu kill
18
ответ дан Vlad 19 August 2018 в 18:11
поделиться
  • 1
    Благодарю вас, dtmilano. Ваше решение работает очень хорошо. – papalagi 8 February 2010 в 04:53
  • 2
    @dtmilano - обратите внимание, что у ОП есть вопрос об этом – Marc Gravell♦ 19 April 2010 в 12:44
  • 3
    Еще большой ответ спустя 3 года. Небольшое упрощение (по крайней мере, для эмулятора 22.0.5.0): использование -port, а не -ports позволяет указать только номер порта single ; например $ emulator -port 5556 @avd_X; обратите внимание, что номер порта должен быть четным числом между 5554 и 5584 в этом случае (любопытно, что использование -ports не налагает ограничение этого диапазона). – mklement0 7 September 2013 в 20:01
  • 4
    @ mklement0, если вам нравится этот ответ, вам понравится мой ответ. – Cameron Lowell Palmer 4 February 2017 в 11:32
  • 5
    Ну, в другом случае, вы никогда не узнаете. Вы знаете только, какой AVD использовался для запуска эмулятора. Если работает 10 эмуляторов, вы никогда не узнаете, какой из них вы искали, не запуская его с каким-то уникальным идентификатором – Cameron Lowell Palmer 4 February 2017 в 21:26

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

1
ответ дан CommonsWare 19 August 2018 в 18:11
поделиться
  • 1
    Спасибо за ваш ответ. Я должен запускать все эмуляторы с опцией -no-window. Таким образом, нет оконной строки заголовка окна. – papalagi 7 February 2010 в 04:04
  • 2
    Пожалуйста, объясните, как вы разрабатываете приложения для Android таким образом, что вам нужно запустить несколько эмуляторов, каждый с опцией -no-window. – CommonsWare 7 February 2010 в 14:31
  • 3
    Я пытаюсь автоматически запускать тестовые примеры многих проектов одновременно на одном сервере. Чтобы не мешать результатам тестов, я думаю, что лучше создать AVD для каждого проекта. Поэтому я должен распознать каждый эмулятор, чтобы установить правильные APK и отправить правильные команды, используя сценарии оболочки. Если нет лучшего способа получить серийный номер эмулятора, я буду различать вывод «устройств adb», до и после запуска эмулятора для определения серийного номера. – papalagi 7 February 2010 в 16:46
  • 4
    Во-первых, это действительно крутая настройка. Но, да, я подозреваю, что какой-либо отличий или что-то может быть лучшим выбором для получения идентификатора эмулятора. Я не использовал -no-window - я предполагаю, что он не сбрасывает идентификатор эмулятора в stdout или что-то как часть выполнения команды. – CommonsWare 7 February 2010 в 22:34

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

Опция Telnet - Уродливый путь

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

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

adb devices

, затем telnet для номера порта каждого устройства

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
ответ дан Community 19 August 2018 в 18:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: