Сборка Android из исходников - эмулятор и AVD

Я создал исходный код Android для эмулятора. Я читал в документации по исходному тексту Android, что путь к «эмулятору» добавляется автоматически во время удачная сборка. Однако у меня есть два вопроса по этому поводу:

  1. Если я открою новую оболочку или закрою существующую оболочку, «эмулятор» больше не будет найден. Разве мне не нужно строить каждый раз, когда я хочу запустить эмулятор?

  2. Если эмулятору требуется AVD, как мне создать его и управлять им, если на моем компьютере нет Android SDK?

Спасибо, Джек

РЕШЕНИЕ к части 2.

Мне нужно было создать переменную среды с именем ANDROID_PRODUCT_OUT. Из следующей команды:

emulator -help-build-images

Я читаю...

Эмулятор определяет, что вы работаете из системы сборки Android, просматривая переменную ANDROID_PRODUCT_OUT в вашей среде.

Если он определен, он должен указывать на каталог для конкретного продукта, содержащий сгенерированные образы системы.

Затем я выполнил поиск «system.ing» в моем «выходном» каталоге. поскольку я создаю эмулятор, изображение было в:

out/target/product/generic

Я добавил в свой файл .bashrc следующую строку:

export ANDROID_PRODUCT_OUT=/home/jack.wootton/code/out/target/product/generic

Затем я смог запустить эмулятор из:

/home/jack.wootton/code/out/host/linux-x86/bin

РЕШЕНИЕ к части 1.

Я не знаю о виртуальных устройствах Android, поэтому этот вопрос все еще остается в силе, однако мне не нужно было предоставлять один для запуска эмулятора после успешной сборки и установки переменной среды ANDROID_PRODUCT_OUT.

Обновление решений

Очевидно, такие переменные, как ANDROID_PRODUCT_OUT, должны автоматически создаваться во время сборки и с использованием сценария envSetup.sh. Я предполагаю, что что-то пошло не так с настройкой моей среды, чтобы этого не произошло.


person Jack    schedule 29.07.2011    source источник
comment
Привет, Джек, я могу запустить один эмулятор, не упоминая -avd, но не смог одновременно запустить несколько эмуляторов, столкнувшись с ошибкой ОШИБКА: запуск нескольких эмуляторов с одним и тем же AVD является экспериментальной функцией. Я не уверен, как создавать AVD, чтобы одновременно запускать несколько эмуляторов. (stackoverflow.com / questions / 61347106 /)   -  person Toral    schedule 23.04.2020


Ответы (5)


Вы поделились этим:

Очевидно, такие переменные, как ANDROID_PRODUCT_OUT, должны автоматически создаваться во время сборки и с использованием сценария envSetup.sh. Я предполагаю, что что-то пошло не так с настройкой моей среды, чтобы этого не произошло.

Я ТАКЖЕ ПЫТАЛСЯ заставить это работать и УЗНАЛ, что:

  1. lunch full-eng устанавливает все соответствующие env
  2. чтобы проверить это, просто запустите:
    env | grep ANDROID
    , и вы увидите все соответствующие настройки переменных env.
    Они локальны только для текущей оболочки!
  3. emulator затем делает то, что должно.

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

person JoelParke    schedule 26.05.2012
comment
+1, это решило мою проблему так же, как OP. Единственное, что я добавлю, так это то, что возвращаясь к оболочке, я бы запустил . build/envsetup.sh, затем lunch full-eng, так как envsetup дает дополнительные переменные и команды, наиболее важно команду lunch! - person MDMoore313; 16.09.2013

Просто сделайте следующее:

source build/envsetup.sh or . build/envsetup.sh
setpaths

Это трюк. Убедитесь, что вы запускаете его из исходного каталога.

person Wolverine    schedule 08.08.2012
comment
Это был самый короткий трюк. Спасибо за публикацию. - person Junaid; 22.01.2013

Чтобы проверить свои встроенные исходники для эмулятора, я создал следующий скрипт в корневой папке проекта. Я запускаю его из другой командной строки, и он не требует постоянного запуска с командами . build/envsetup.sh и lunch full-eng. Вы можете отредактировать этот скрипт под свои нужды, а если вам нужно запустить другое устройство - просто смените папку.

out/host/linux-x86/bin/emulator -sysdir out/target/product/generic/ -system out/target/product/generic/system.img -ramdisk out/target/product/generic/ramdisk.img -data out/target/product/generic/userdata.img -kernel prebuilt/android-arm/kernel/kernel-qemu -sdcard sdcard.img -skindir sdk/emulator/skins -skin WVGA800 -scale 0.7 -memory 512 -partition-size 1024
person Yury    schedule 04.03.2012

Вы можете добавить их в свой .bashrc файл.

export ANDROID_PRODUCT_OUT=$ANDROID_SRC/out/target/product/generic
export ANDROID_BIN=$ANDROID_SRC/out/host/linux-x86/bin
PATH=$ANDROID_BIN:$PATH
person OneZero    schedule 04.07.2012

По сути, программа "эмулятор" - это просто оболочка для реального эмулятора-qemu, такого как emulator-arm или emulator-x86. Вызванный вами "эмулятор" соберет введенные вами аргументы и найдет подходящий emulator-qemu для выполнения.

Проблема, с которой вы столкнулись, заключается в том, что вы явно не описали, какой образ / avd вы хотите запустить. Вы можете использовать аргумент «@avd YOUR-AVD_NAME» или переменную среды «ANDROID_PRODUCT_OUT», чтобы установить каталог, в котором находится ваш avd. Кстати, avd dir содержит несколько файлов, описывающих, как выглядит это устройство.

". build / envsetup.sh" - это сценарий, который устанавливает переменные среды для процесса сборки Android. Так что легко понять, почему "ANDROID_PRODUCT_OUT" будет установлен в это время. Его значение по умолчанию должно быть «ПУТЬ / К / ANDROID / out / target / product / generic».

PS: Если вы хотите узнать больше, вы можете обратиться к исходному файлу: «ПУТЬ / К / ANDROID / external / qemu / android / main-emulator.c». Вы можете найти основной эмулятор там.

person naizheng TAN    schedule 26.12.2013