Suivez les instructions de cette page pour compiler Android.
Configurer votre environnement de compilation
Dans votre répertoire de travail, sourcez le script envsetup.sh
pour configurer votre environnement de compilation:
source build/envsetup.sh
Ce script importe plusieurs commandes qui vous permettent de travailler avec le code source Android, y compris les commandes utilisées sur cette page. Pour afficher la source du script, consultez platform/build/envsetup.sh
.
Pour afficher l'aide intégrée, saisissez hmm
.
Choisir une cible
Avant de compiler Android, vous devez identifier une cible à compiler. Une cible reflète la plate-forme cible pour laquelle vous créez. Pour identifier la cible à compiler, utilisez la commande lunch
suivie d'une chaîne représentant la cible. Exemple :
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
Un résumé de votre environnement cible et de votre environnement de compilation devrait s'afficher:
============================================
PLATFORM_VERSION_CODENAME=VanillaIceCream
PLATFORM_VERSION=VanillaIceCream
PRODUCT_INCLUDE_TAGS=com.android.mainline
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=generic
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=AOSP.MAIN
OUT_DIR=out
============================================
La chaîne représentant la cible a le format suivant:
lunch product_name-release_config-build_variant
Les composants de cette chaîne sont les suivants:
product_name
est le nom du produit que vous souhaitez créer, par exempleaosp_cf_x86_64_phone
ouaosp_husky
. Votreproduct_name
spécifique peut suivre votre propre format pour votre appareil, mais le format que Google utilise pour ses appareils comporte les composants suivants:aosp
fait référence à la plate-forme Open Source Android.- (Facultatif)
cf
est inclus lorsque la cible est destinée à être exécutée dans l'émulateur Cuttlefish. - Architecture et matériel (nom de code), tels que
x86_64_phone
ouhusky
, qui est le nom de code du Pixel 8 Pro. Pour obtenir la liste des noms de code des appareils Google, consultez la section Noms de code des appareils.
release_config
est défini sur une configuration de version, telle que la configuration de version de développement appeléetrunk_staging
. Une configuration de version identifie certaines fonctionnalités et le code qui se trouve derrière les indicateurs de lancement de fonctionnalités, et qui sont activés ou désactivés pour un build. Pour en savoir plus sur les configurations de version, consultez la section Définir les valeurs de lancement des indicateurs de fonctionnalité.La partie
build_variant
de la chaîne peut correspondre à l'une des trois valeurs du tableau suivant:build_variant
Description user
Cette variante de compilation fournit un accès limité à la sécurité et est adaptée à la production. userdebug
Cette variante de compilation aide les développeurs d'appareils à comprendre les performances et la puissance des versions en cours de développement. Lorsque vous développez avec un build userdebug
, suivez les consignes pour userdebug.eng
Cette variante de compilation est plus rapide et convient mieux au développement quotidien si vous ne vous souciez pas des performances et de la puissance.
Si vous exécutez lunch
sans argument, une liste de cibles courantes est fournie.
Vous pouvez également créer vos propres chaînes cibles en assemblant les éléments de la chaîne cible à l'aide des informations de cette page et des noms de code représentant du matériel Google spécifique sur la page Noms de code des appareils.
Afficher la cible actuelle
Pour afficher les paramètres actuels du déjeuner, exécutez la commande suivante:
$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"
Compiler le code
Exécutez la commande suivante pour créer votre cible. Selon les spécifications de votre station de travail, la première compilation peut prendre moins d'une heure ou plusieurs heures. Les builds suivants prennent beaucoup moins de temps.
m
Le résultat de votre build s'affiche dans $OUT_DIR
. Si vous créez différentes cibles, chaque build de cible apparaît dans $OUT_DIR
.
La commande m
se compile à partir du haut de l'arborescence. Vous pouvez donc exécuter m
à partir de sous-répertoires. Si vous avez défini la variable d'environnement TOP
, la commande m
l'utilise. Si TOP
n'est pas défini, la commande m
recherche l'arborescence à partir du répertoire actuel, en essayant de trouver le sommet de l'arborescence.
La commande m
peut gérer des tâches parallèles avec un argument -jN
. Si vous ne fournissez pas d'argument -j
, le système de compilation sélectionne automatiquement un nombre de tâches parallèles qu'il considère comme optimal pour votre système.
Vous pouvez compiler des modules spécifiques au lieu de l'image complète de l'appareil en listant les noms de module dans votre ligne de commande m
. En outre, la commande m
fournit des pseudo-cibles, appelées objectifs. Par exemple, m nothing
ne compile rien, mais analyse et valide la structure de compilation. Pour obtenir la liste des objectifs valides, saisissez m help
.
Résoudre les erreurs de compilation (8.0 ou version antérieure)
Si vous créez AOSP 8 ou une version antérieure, m
peut s'arrêter lorsqu'il rencontre un problème avec votre version de Java. Par exemple, le message suivant peut s'afficher:
************************************************************
You are attempting to build with the incorrect version
of java.
Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.
Please follow the machine setup instructions at
https://source.android.com/source/initializing.html
************************************************************
Voici les causes et solutions les plus probables:
- Vous n'avez pas installé le JDK approprié, comme indiqué dans les sections sur le JDK de la section Configuration pour le développement AOSP (2.3 à 8.0) .
- Un autre JDK précédemment installé apparaît dans votre chemin d'accès. Ajoutez le JDK approprié au début de votre chemin d'accès ou supprimez le JDK problématique.