Compiler Android

Suivez les instructions de cette page pour compiler Android.

Configurer votre environnement de compilation

Depuis votre répertoire de travail, exécutez le script envsetup.sh pour configurer votre environnement de compilation :

source build/envsetup.sh

Ce script importe plusieurs commandes qui vous permettent d'utiliser 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 développez. 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-userdebug

Vous devriez voir un résumé de votre environnement cible et 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 est au format suivant :

lunch product_name-release_config-build_variant

Cette chaîne comprend les composants suivants :

  • product_name correspond au nom du produit que vous souhaitez créer, par exemple aosp_cf_x86_64_only_phone ou aosp_husky. Votre product_name spécifique peut suivre votre propre format pour votre appareil, mais le format utilisé par Google pour ses appareils comporte les composants suivants :

    • aosp fait référence à la plate-forme Android Open Source.
    • (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), par exemple x86_64_only_phone ou husky, 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_config est défini sur une configuration de version, telle que la configuration de version de développement appelée aosp_current. Une configuration de version identifie certaines fonctionnalités et certains codes qui sont associés à des indicateurs 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 feature flags.

  • 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 offre un accès limité à la sécurité et convient à la production.
    userdebug Cette 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 version userdebug, suivez les Consignes pour userdebug.
    eng Cette variante de compilation a un temps de compilation plus rapide et convient mieux au développement quotidien si les performances et la puissance ne vous intéressent pas.

Si vous exécutez lunch sans aucun 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 qui représentent du matériel Google spécifique sur la page Noms de code des appareils.

Afficher la cible actuelle

Pour afficher les paramètres de déjeuner actuels, 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 de moins d'une heure à plusieurs heures. Les générations suivantes prennent beaucoup moins de temps.

m

Le résultat de votre compilation s'affiche dans $OUT_DIR. Si vous créez différentes cibles, chaque build de cible s'affiche dans $OUT_DIR.

La commande m s'exécute à 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 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 modules dans votre ligne de commande m. De plus, la commande m fournit des pseudo-cibles, appelées goals. 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 probables et les solutions :

  • Vous n'avez pas installé le JDK approprié, comme indiqué dans les sections JDK de Configurer le développement AOSP (2.3 à 8.0) .
  • Un autre JDK installé précédemment 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.