Suivez les instructions de cette page pour compiler Android.
Configurer votre environnement de compilation
Dans votre répertoire de travail, exécutez le script envsetup.sh pour configurer votre environnement de compilation :
source build/envsetup.shCe script importe plusieurs commandes qui vous permettent d'utiliser le code source Android, y compris celles 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.
Sélectionnez une cible.
Avant de compiler Android, vous devez identifier une cible à compiler. Une cible reflète la plate-forme cible pour laquelle vous compilez. Pour identifier votre cible à compiler, utilisez la commande lunch suivie d'une chaîne représentant la cible. Exemple :
lunch aosp_cf_x86_64_only_phone-aosp_current-userdebugVous devriez voir un résumé de votre cible et de votre environnement de compilation :
============================================
PLATFORM_VERSION_CODENAME=Baklava
PLATFORM_VERSION=Baklava
TARGET_PRODUCT=aosp_cf_x86_64_only_phone
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=silvermont
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=BP1A.250305.020
OUT_DIR=out
============================================
La chaîne représentant la cible présente le format suivant :
lunch product_name-release_config-build_variantLes composants de cette chaîne sont les suivants :
product_namecorrespond au nom du produit que vous souhaitez compiler, tel queaosp_cf_x86_64_only_phoneouaosp_husky. Votreproduct_namespécifique peut suivre votre propre format pour votre appareil, mais le format utilisé par Google pour ses appareils comporte les composants suivants :aospfait référence au Projet Android Open Source.- Si la cible est destinée à être exécutée dans l'émulateur Cuttlefish,
cfest inclus. - Nom de code de l'architecture et du matériel, tel que
x86_64_only_phoneouhusky, qui est le nom de code du Pixel 8 Pro. Pour obtenir la liste des noms de code des appareils Google, consultez Noms de code des appareils.
release_configest défini sur une configuration de version, telle que la configuration de version de développement appeléeaosp_current. Une configuration de version identifie certaines fonctionnalités et certains codes qui se trouvent derrière des options de lancement de fonctionnalités et qui sont activés ou désactivés pour une compilation. Pour en savoir plus sur les configurations de version, consultez Définir des valeurs de lancement pour les flags de fonctionnalité.La partie
build_variantde la chaîne peut prendre l'une des trois valeurs du tableau suivant :build_variantDescription userCette variante de compilation offre un accès limité à la sécurité et convient à la production. userdebugCette variante de compilation aide les développeurs d'appareils à comprendre les performances et la puissance des versions en développement. Lorsque vous développez avec une userdebugcompilation, suivez les consignes relatives à userdebug.engCette variante de compilation est plus rapide et convient mieux aux environnements de développement quotidiens (où les performances et la puissance sont moins importantes).
Si vous exécutez lunch sans aucun argument, lunch fournit une liste de cibles courantes. Pour créer des chaînes cibles personnalisées, combinez des éléments de chaîne cible avec des noms de code de matériel. Pour obtenir la liste des noms de code, consultez Noms de code des appareils.
Afficher la cible actuelle
Pour afficher les paramètres de lancement actuels, exécutez la commande suivante :
$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"
Compiler le code
Exécutez la commande suivante pour compiler votre cible. Selon les spécifications de votre station de travail, la première compilation peut prendre moins d'une heure ou jusqu'à quelques heures. Les compilations suivantes prennent beaucoup moins de temps.
mLa sortie de votre compilation s'affiche dans $OUT_DIR. Si vous compilez différentes cibles, chaque compilation de cible s'affiche dans $OUT_DIR.
La commande m compile à partir du haut de l'arborescence. Vous pouvez donc exécuter m à partir de sous-répertoires. Si la variable d'environnement TOP est définie, 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 haut de l'arborescence.
La commande m peut gérer les 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 juge 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 modules 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 génération
Cette section contient des instructions pour gérer les erreurs de génération.
Erreurs de système de fichiers en lecture seule (Android 17 et versions ultérieures)
Lors de la compilation, l'arborescence source AOSP est en lecture seule. Si la compilation que vous exécutez tente de modifier l'arborescence source lors de la configuration du produit ou de toute autre partie de la compilation, la compilation peut échouer et signaler des erreurs de système de fichiers en lecture seule. Vous pouvez utiliser ces options pour modifier temporairement l'arborescence source en lecture/écriture :
Pour modifier l'ensemble de l'arborescence source en lecture/écriture lors de la compilation, ajoutez
BUILD_BROKEN_SRC_DIR_IS_WRITABLE=trueà l'environnement de compilation.Pour modifier une partie de l'arborescence en lecture/écriture lors de la compilation, utilisez
BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ...". Les chemins d'accès doivent correspondre à ceux des répertoires dans lesquels les écritures doivent être autorisées, par rapport au haut de l'espace de travail.
Mauvaise version de Java (Android 8.0 et versions antérieures)
Si vous compilez Android 8.0 (niveau d'API 26) ou une version antérieure, m peut s'arrêter lorsqu'il rencontre un problème avec votre version de Java. Par exemple, vous pouvez recevoir le message suivant :
************************************************************
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 probables :
- Le JDK approprié n'est pas installé. Pour en savoir plus, consultez Configurer 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.