Ejecutando el emulador después de construir Android desde la fuente

Soy capaz de desplegar el último código fuente de Android en una máquina virtual Ubuntu de 32 bits (Host: Windows 7 de 64 bits). La comstackción se completa sin ningún error.

Luego traté de seguir estas instrucciones , donde menciona que debería ejecutar el emulador en la raíz de mi código fuente. Sin embargo, cuando lo intenté, aparece un error que indica que este comando no se encuentra.

Así que fui a la carpeta out/host/linux-x86/bin y descubrí que hay dos archivos para emulator* :

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

Cuando escribí el emulator y emulator-x86 aquí, tampoco funciona. Aquí está el error que estoy recibiendo:

 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 '@' or '-avd ' to start a given virtual device (see -help-avd for details). Otherwise, follow the instructions in -help-disk-images to start the emulator 

Entonces, cuando ejecuto ./emulator-x86 -help-disk-images , veo lo siguiente:

 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. 

Lo construí yo mismo, así que creo que ANDROID_PRODUCT_OUT está configurado en las variables de mi entorno, pero no lo veo. Así que creo que debería ejecutar algún otro script de shell para obtener ese conjunto.

Miré los archivos img , vi un par en la ubicación out/target/product/generic :

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

¿Alguien podría arrojar algo de luz sobre esto y ayudarme en lo que debo hacer a continuación? Soy nuevo en Android y realicé algunas investigaciones sobre esto, pero no pude encontrar ningún problema similar.

No sé para qué producto hace su comstackción, pero para ejecutar el emulador puede usar el siguiente comando:

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

Simplemente cópielo en el archivo .sh en la raíz de su carpeta fuente de Android y ejecútelo. O simplemente puede ejecutarlo, pero primero debería ejecutar la raíz de su carpeta de origen de Android.

Y no se olvide de crear una imagen de tarjeta SD en la carpeta raíz con el comando mksdcard .

Después de mucho desconcertarme y encontrarme con muchos de los mismos problemas, encontré la manera de hacer que todo funcione desde un nuevo entorno.

Ambiente

En primer lugar, asegúrese de configurar su entorno con los cambios en ~/.bashrc que recomienda Android , incluidos:

 export USE_CCACHE=1 ccache -M 10G 

Siga los pasos para descargar la fuente de Android , si aún no lo ha hecho.

Luego configure algunas funciones para el entorno:

 $ . build/envsetup.sh 

Ahora deberías ejecutar una de esas funciones para que las rutas se establezcan correctamente (como señaló Pingzhong Li, ¡esto no se menciona en las instrucciones de comstackción de Android!):

 $ set_stuff_for_environment 

Primera comstackción

¡Comienza a construir! Por ejemplo:

 $ lunch full-eng $ make -j4 

(Aquí, 4 hilos son ideales para mi máquina. Cambie como mejor le parezca).

Cuando la construcción finalice, simplemente inicie el emulador:

 $ emulator 

Desarrollos subsecuentes

Descubrí que para obtener el system.img para reconstruir, debe eliminar los siguientes archivos / directorios:

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

Entonces simplemente repite:

 $ make -j4 $ emulator 

Solo como referencia tuve este problema similar y después de probar diferentes cosas encontré la solución para ejecutar el lunch (después de ejecutar envsetup.sh) y elegir el objective en este caso aosp_arm-eng . Tienes que hacer esto cada vez que comienzas un nuevo shell porque configura ciertas variables de entorno que el emulador necesita para ejecutar el avd. Siempre que hayas construido el objective.

 #!/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 

En un Mac, puede agregar las siguientes líneas en su archivo ~ / .bash_profile. Cambie la imagen de su disco y las carpetas src en consecuencia.

 # 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; } 

Después de eso, crea una nueva terminal y escribe:

 startEmulator 

Tu emulador puede ser iniciado. Esto funciona en mac.

Cómo ejecutar Emulator guía paso a paso. Ejecutar el emulador en el código fuente AOSP de Android descargado es el siguiente:

  • Paso 1

Si ha terminado correctamente su comstackción y ha generado la imagen del sistema en la Terminal en ejecución (Ubuntu), entonces está avanzando. Simplemente escriba debajo del comando en su terminal: – emulador

Paso 2 Si ha generado una imagen del sistema anteriormente y ha iniciado una nueva terminal (Ubuntu), ejecute el siguiente comando, uno por uno: – 1. source build / envsetup.sh 2. lunch 1 aquí 1 es mi tipo de almuerzo, puede reemplácelo con el suyo como (7, 8, etc.) y en el último 3. emulador

Eso es todo, almorzará tu emulador correctamente. ¡Gracias, chicos, feliz encoding!

Simplemente escriba emulador en su caparazón y se ejecutará el emulador de la última versión, ya que su ruta se establece en la variable RUTA de su caparazón.

Si tiene el “SDK de Android” en su máquina, entonces su “emulador” podría ser recogido desde allí en lugar de / fuera / …. dir. Cuando desee trabajar con su “propio” emulador, puede cambiar el nombre del directorio “android sdk”. Entonces tu “emulador” será recogido.

¡Espero que esto te ayude!

Saludos, Sammoh

 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 

Lo anterior es mi entorno env. ANDROID_BUILD_TOP resolvió el

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

en mi máquina