Запуск эмулятора после создания Android из источника

Я могу вытащить последний исходный код Android в 32-битную виртуальную машину Ubuntu (хост: Windows 7 64-бит). Конструкция завершается без ошибок.

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

Итак, я пошел в папку out/host/linux-x86/bin, и я узнал, что есть пара файлов для emulator*:

  • emulator
  • emulator-arm
  • emulator_renderer
  • emulator-ui
  • emulator-x86

Когда я набрал emulator и emulator-x86 здесь, он также не работает. Вот ошибка, которую я получаю:

xxxx/out/host/linux-x86/bin$ ./emulator-x86
emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found.

If you are an Android SDK user, please use '@<name>' or '-avd <name>'
to start a given virtual device (see -help-avd for details).

Otherwise, follow the instructions in -help-disk-images to start the emulator

Поэтому, когда я запускаю ./emulator-x86 -help-disk-images, я вижу следующее:

If you are building from the Android build system, you should
have ANDROID_PRODUCT_OUT defined in your environment, and the
emulator shall be able to pick-up the right image files automatically.
See -help-build-images for more details.

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

Я посмотрел файлы img, я увидел пару в месте out/target/product/generic:

  • ramdisk.img
  • system.img
  • userdata.img

Может ли кто-нибудь пролить свет на это и помочь мне в том, что я должен делать дальше? Я новичок в Android, и я сделал некоторые исследования по этому вопросу, но я не мог найти подобных проблем.

Ответ 1

Я не знаю, для какого продукта вы выполняете сборку, но для запуска эмулятора вы можете использовать следующую команду:

out/host/linux-x86/bin/emulator -sysdir out/target/product/generic/-система 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- размер 1024

Просто скопируйте его в файл .sh в корень исходной папки Android и запустите этот файл. Или вы можете просто запустить его, но сначала вы должны chdir в корневой каталог исходных файлов Android.

И не забудьте создать образ sdcard в корневой папке с помощью команды mksdcard.

Ответ 2

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

Окружающая среда

Прежде всего, убедитесь, что вы установили среду с изменениями ~/.bashrc которые рекомендует Android, в том числе:

export USE_CCACHE=1
ccache -M 10G

Следуйте инструкциям для загрузки источника Android, если вы еще этого не сделали.

Затем настройте некоторые функции для среды:

$ . build/envsetup.sh

Теперь вы должны выполнить одну из этих функций, чтобы правильно установить пути (как указывал Pingzhong Li, это не упоминается в инструкциях по сборке Android!):

$ set_stuff_for_environment

Первая сборка

Начните строить! Например:

$ lunch full-eng
$ make -j4

(Здесь 4 потока идеально подходят для моей машины. Измените, как сочтете нужным.)

Когда сборка завершается, просто запустите эмулятор:

$ emulator

Последующие сборки

Я обнаружил, что для восстановления system.img необходимо удалить следующие файлы/каталоги:

out/target/product/generic/obj/PACKAGING/
out/target/product/generic/system.img

Затем просто повторите:

$ make -j4
$ emulator

Ответ 3

Просто для справки у меня возникла подобная проблема, и, попробовав разные вещи, я нашел решение для запуска lunch (после запуска envsetup.sh) и выбора цели в этом случае aosp_arm-eng. Вы должны делать это каждый раз, когда вы запускаете новую оболочку, потому что она устанавливает определенные переменные среды, которым эмулятор должен запускать avd.Provided, что вы создали цель.

Ответ 4

#!/usr/bin/env bash

ANDROID_BUILD_OUT=/path/to/android/build/output/
ANDROID_SDK_LINUX=/path/to/android/sdk
ANDROID_BUILD=${ANDROID_BUILD_OUT}/android/target/product/generic

${ANDROID_SDK_LINUX}/tools/emulator \
    -sysdir ${ANDROID_BUILD} \
    -system ${ANDROID_BUILD}/system.img \
    -ramdisk ${ANDROID_BUILD}/ramdisk.img \
    -data ${ANDROID_BUILD}/userdata.img \
    -kernel ${ANDROID_SDK_LINUX}/system-images/android-18/armeabi-v7a/kernel-qemu \
    -skindir ${ANDROID_SDK_LINUX}/platforms/android-18/skins \
    -skin WVGA800 \
    -scale 0.7 \
    -memory 512 \
    -partition-size 1024

Ответ 5

На mac вы можете добавить следующие строки в файл ~/.bash_profile. Измените образ диска и папки src соответственно.

# start emulator
function startEmulator { hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android;
                         cd /Volumes/android/AndroidSrc;
                         source build/envsetup.sh;
                         lunch aosp_arm-eng;
                         /Volumes/android/AndroidSrc/out/host/darwin-x86/bin/emulator;  }

После этого создайте новый терминал и введите:

startEmulator

Ваш эмулятор можно запустить. Это работает на Mac.

Ответ 6

Как запустить эмулятор пошагового руководства. Запуск эмулятора в загружаемом исходном коде AOSP для Android приведен ниже: -

  • Шаг 1

Если вы закончили свою сборку и сгенерировали изображение системы правильно в текущем запущенном терминале (Ubuntu), тогда он будет расторгнут вперед. Просто введите команду ниже в своем терминале: Эмулятор

Шаг 2 Если вы создали изображение системы ранее, и вы запустили новый терминал (Ubuntu), выполните следующую команду один за другим:  1. source build/envsetup.sh  2. обед 1 здесь 1 мой тип ланча, вы можете заменить его своим (7, 8 и т.д.) И последним  3. эмулятор

Это будет нормально обедать ваш эмулятор.  Спасибо, ребята, Happy Coding!!!!

Ответ 7

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

Ответ 8

Если у вас есть "android sdk" на вашем компьютере, тогда ваш "эмулятор" можно взять там вместо /out/.... dir. Когда вы хотите работать с вашим собственным эмулятором, вы можете переименовать каталог "android sdk". Тогда ваш "эмулятор" будет поднят.

Надеюсь, это поможет вам!

Отношения Sammoh

Ответ 9

export MY_PWD=/work/ABC/Google_Android
export ANDROID_BUILD_TOP=/work/ABC/Google_Android
export PATH=$PATH:$MY_PWD/prebuilts/gcc/linux
export ANDROID_PRODUCT_OUT=$MY_PWD/out/target/product/generic

Вышеуказанное - это моя настройка env. ANDROID_BUILD_TOP решил

"emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found"

на моей машине