web-dev-qa-db-fra.com

Lancer l'émulateur après avoir construit Android à partir des sources

Je suis en mesure d'extraire le dernier code source Android sur une machine virtuelle Ubuntu 32 bits (hôte: Windows 7 64 bits). La construction se termine sans aucune erreur.

Ensuite, j'ai essayé de suivre ces instructions , où il est mentionné que je devrais exécuter l'émulateur à la racine de mon code source. Cependant, lorsque j'ai essayé, une erreur s'est produite indiquant que cette commande était introuvable.

Je suis donc allé dans le dossier out/Host/linux-x86/bin et j'ai découvert qu'il existe quelques fichiers pour emulator*:

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

Lorsque j'ai tapé les variables emulator et emulator-x86 ici, cela ne fonctionne pas non plus. Voici l'erreur que je reçois:

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

Donc, quand je lance ./emulator-x86 -help-disk-images, je vois ce qui suit:

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.

J'ai construit cela moi-même, alors je penserais que Android_PRODUCT_OUT est défini dans mes variables d'environnement, mais je ne le vois pas. Je pense donc que je devrais exécuter un autre script Shell pour obtenir cet ensemble.

J'ai regardé les fichiers img, j'ai vu un couple à l'emplacement out/target/product/generic:

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

Quelqu'un pourrait-il apporter des éclaircissements à ce sujet et m'aider à ce que je devrais faire ensuite? Je suis nouveau sur Android et j'ai fait quelques recherches à ce sujet, mais je ne pouvais trouver aucun problème similaire.

22
windfly2006

Je ne sais pas pour quel produit vous construisez, mais pour lancer l'émulateur, vous pouvez utiliser la commande suivante:

out/Host/linux-x86/bin/emulator -sysdir out/target/product/generic/-system out/target/product/generic/system.img -ramdisk out/cible/product/generic/ramdisk.img -data out /target/product/generic/userdata.img -kernel préconfiguré/Android-arm/kernel/kernel-qemu -sdcard sdcard.img -skindir sdk/émulateur/skins -skin WVGA800-scale 0.7 -Memory 512 niveaux

Il suffit de le copier dans un fichier .sh à la racine de votre dossier source Android et d’exécuter ce fichier. Ou vous pouvez simplement l'exécuter, mais vous devez d'abord accéder à la racine de votre dossier source Android.

Et n'oubliez pas de créer une image sdcard dans le dossier racine avec la commande mksdcard.

23
Yury

Après avoir rencontré énormément de problèmes et rencontré beaucoup des mêmes problèmes, j'ai trouvé un moyen de faire en sorte que tout fonctionne à partir d'un nouvel environnement.

Environnement

Tout d’abord, assurez-vous de définir votre environnement avec les modifications apportées à ~/.bashrcrecommandé par Android , notamment:

export USE_CCACHE=1
ccache -M 10G

Suivez les étapes pour télécharger le code source Android , si vous ne l’avez pas déjà fait.

Configurez ensuite quelques fonctions pour l'environnement:

$ . build/envsetup.sh

Vous devez maintenant exécuter une de ces fonctions pour que les chemins soient correctement définis (comme l'a souligné Pingzhong Li, cela n'est pas mentionné dans les instructions de construction d'Android!):

$ set_stuff_for_environment

Première construction

Commencez à construire! Par exemple:

$ lunch full-eng
$ make -j4

(Ici, 4 threads sont idéaux pour ma machine. Changez comme bon vous semble.)

Lorsque la construction est terminée, lancez simplement l'émulateur:

$ emulator

Constructions ultérieures

J'ai constaté que pour reconstruire le system.img, vous devez supprimer les fichiers/répertoires suivants:

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

Puis répétez simplement:

$ make -j4
$ emulator
25
Paul Lammertsma

Juste pour référence, j'ai eu ce problème similaire et après avoir essayé différentes choses, j'ai trouvé la solution en cours d'exécution lunch (après avoir exécuté envsetup.sh) et en choisissant la cible dans ce cas aosp_arm-eng. Vous devez le faire chaque fois que vous démarrez un nouveau shell car il définit certaines variables d'environnement dont l'émulateur a besoin pour exécuter le fichier avd.Lorsque vous avez créé la cible.

4
redbandit

Comment exécuter Emulator guide étape par étape. Utiliser l'émulateur dans le code source Android AOSP téléchargé est le suivant: - 

  • Étape 1

Si vous avez terminé votre construction et généré correctement l’image système dans Terminal en cours d’exécution (Ubuntu), elle est ensuite transférée. Il suffit de taper ci-dessous la commande dans votre terminal: -emulator

Étape 2 Si vous avez déjà généré une image système et que vous avez démarré un nouveau terminal (Ubuntu), exécutez la commande suivante une par une: 1.source build/envsetup.sh 2.lunch 1ici 1 est mon type de déjeuner, vous pouvez le remplacer par le vôtre comme (7, 8 etc.) et dans le dernier. 3.émulateur

Ça y est il va déjeuner votre émulateur correctement . Merci les gars, bon codage !!!!

2
SAURABH_12
#!/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
2
JP Ventura

Sur un Mac, vous pouvez ajouter les lignes suivantes dans votre fichier ~/.bash_profile. Modifiez votre image disque et vos dossiers src en conséquence.

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

Après cela, créez un nouveau terminal et tapez:

startEmulator

Votre émulateur peut être démarré. Cela fonctionne sur mac.

2
user2985730

Il suffit de taper emulator sur votre Shell pour lancer l’émulateur de la dernière version car son chemin est défini sur la variable PATH de votre Shell.

1
Sai Kiran

Si vous avez le "sdk Android" sur votre machine, votre "émulateur" peut être sélectionné à partir de là au lieu de/out/.... dir ..__ pouvez renommer le répertoire "Android sdk". Ensuite, votre "émulateur" sera ramassé.

J'espère que cela vous aide!

Cordialement Sammoh

0
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

Ce qui précède correspond à mon paramètre d’env . Android_BUILD_TOP a résolu le

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

sur ma machine

0
harris

J'ai joué de cette façon

J'ai modifié le fichier ./build/envsetup.sh, je n'ai modifié que le set_stuff_for_environment

function set_stuff_for_environment()
{
    setpaths
    set_sequence_number

    export Android_BUILD_TOP=$(gettop)
    # With this environment variable new GCC can apply colors to warnings/errors
    export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
    export ASAN_OPTIONS=detect_leaks=0

    export Android_PRODUCT_OUT=/var/www/Android/out/target/product/generic_x86_64
    echo $Android_PRODUCT_OUT
}

À la racine du projet, j'ai créé un fichier nommé start.sh.

#!/usr/bin/env bash

Android_BUILD_OUT=/var/www/Android/out
Android_SDK_LINUX=/opt/Android-studio/sdk
Android_BUILD=${Android_BUILD_OUT}/target/product/generic_x86_64

Sudo chmod -R 777 /dev/kvm

source build/envsetup.sh

set_stuff_for_environment

./prebuilts/Android-emulator/linux-x86_64/emulator \
    -debug-init -logcat '*:v' -verbose \
    -sysdir ${Android_BUILD} \
    -system ${Android_BUILD}/system.img \
    -ramdisk ${Android_BUILD}/ramdisk.img \
    -skindir ${Android_SDK_LINUX}/platforms/Android-28/skins \
    -skin WVGA800 \
    -partition-size 2000
    -scale 0.7 \
    -memory 2G \
    -data ${Android_BUILD}/userdata.img \
0
Jonatas Rodrigues