Ce tutoriel vous permet d'essayer le développement du système d'exploitation Android pour la première fois.
Configurer le développement Android
Avant de télécharger et de compiler la branche de manifeste android-latest-release de
la source Android, assurez-vous que votre matériel répond aux
exigences nécessaires et que
les logiciels requis sont correctement installés. Vous devez également connaître les termes suivants :
- Git
- Git est un système de contrôle des versions distribué, sans frais et Open Source. Android utilise Git pour les opérations locales telles que la création de branches, les commits, les diffs et les modifications. Pour obtenir de l'aide sur Git, consultez la documentation Git.
- Dépôt
- Repo est un wrapper Python autour de Git qui simplifie l'exécution d'opérations complexes sur plusieurs dépôts Git. Repo ne remplace pas Git pour toutes les opérations de contrôle des versions, mais il facilite l'exécution des opérations Git complexes. Repo utilise des fichiers manifestes pour agréger les projets Git dans le superprojet Android.
- Fichier manifeste
- Un fichier manifeste est un fichier XML qui spécifie l'emplacement des différents projets Git dans la source Android au sein d'une arborescence source AOSP.
Configuration matérielle requise
Votre poste de travail de développement doit répondre aux exigences matérielles suivantes ou les dépasser :
Système x86 64 bits.
Au moins 400 Go d'espace disque libre pour extraire et compiler le code (250 Go pour l'extraction + 150 Go pour la compilation).
Au moins 64 Go de RAM. Google utilise des machines à 72 cœurs avec 64 Go de RAM pour compiler Android. Avec cette configuration matérielle, la compilation complète d'Android prend environ 40 minutes, et la compilation incrémentielle d'Android ne prend que quelques minutes. En revanche, la compilation complète prend environ six heures avec une machine à six cœurs et 64 Go de RAM.
Configuration système requise
Votre poste de travail de développement doit exécuter n'importe quelle distribution Linux 64 bits avec la bibliothèque GNU C (glibc) 2.17 ou version ultérieure.
Installer les packages requis
Pour installer les packages requis pour Ubuntu 18.04 ou version ultérieure, exécutez la commande suivante :
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfigInstaller les logiciels requis
Avant de pouvoir utiliser AOSP, vous devez installer OpenJDK, Make, Python 3 et Repo. La dernière branche de version d'Android est fournie avec des versions précompilées d'OpenJDK, de Make et de Python 3. Aucune étape d'installation supplémentaire n'est donc requise. La section suivante explique comment installer Repo.
Installer Repo
Pour installer Repo :
Téléchargez les informations actuelles sur le package :
sudo apt-get updateExécutez la commande suivante pour installer le lanceur Repo :
sudo apt-get install repoLe lanceur Repo fournit un script Python qui initialise une extraction et télécharge l'outil Repo complet.
Si l'opération réussit, passez à l'étape 4.
(Facultatif) Installez manuellement Repo à l'aide de la série de commandes suivante :
export REPO=$(mktemp /tmp/repo.XXXXXXXXX) curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo gpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65 curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repoLes trois premières commandes configurent un fichier temporaire, téléchargent Repo dans le fichier et vérifient que la clé fournie correspond à la clé requise. Si ces commandes aboutissent, la commande finale installe le lanceur Repo.
Vérifiez la version du lanceur Repo :
repo versionLe résultat doit indiquer une version 2.4 ou ultérieure, par exemple :
repo launcher version 2.45
Télécharger la source Android
La source Android se trouve dans une collection de dépôts Git hébergés par Google. Chaque dépôt Git inclut l'intégralité de l'historique de la source Android, y compris les modifications apportées à la source et le moment où elles ont été effectuées. Pour télécharger la source Android :
Accédez à votre répertoire d'accueil :
cd ~Créez un sous-répertoire de travail local :
mkdir aospAccédez au répertoire :
cd aospInitialisez la dernière branche de version du code source du dépôt AOSP (
android-latest-release) :repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifestSaisissez ou acceptez vos identifiants Git (nom, adresse e-mail).
Synchronisez le code source :
repo sync -c -j8Si vous rencontrez des problèmes lors du téléchargement, consultez Résoudre les problèmes de synchronisation.
Compiler le code
Pour compiler le code :
Dans votre répertoire de travail, exécutez le script
envsetup.shpour configurer votre environnement de compilation :source build/envsetup.shSpécifiez un type d'appareil cible à compiler avec la commande
lunch. Une cible est une permutation d'appareil, telle qu'un modèle ou un facteur de forme spécifique. Spécifiez cette cible :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 ============================================Compilez la cible :
m
La première compilation prendra plusieurs heures. Les compilations suivantes prendront beaucoup moins de temps. Le résultat de votre compilation s'affiche dans $OUT_DIR.
Lancer Cuttlefish
Cuttlefish est l'émulateur Android utilisé pour tester vos builds.
Exécutez les commandes suivantes pour télécharger, compiler et installer les packages Debian hôtes :
sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curlgit clone https://github.com/google/android-cuttlefishcd android-cuttlefishfor dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd donesudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -fsudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -fsudo usermod -aG kvm,cvdnetwork,render $USERsudo rebootLe redémarrage déclenche l'installation de modules de noyau supplémentaires et applique les règles
udev.Lancez Cuttlefish :
launch_cvd --daemonConnectez-vous à l'appareil Cuttlefish en accédant à
https://localhost:8443dans votre navigateur Web. Votre appareil virtuel Android s'affiche.
Effectuer une modification
Mettez à jour le code source en suivant cette liste de modifications changelist.
À partir de la racine de votre extraction (répertoire
aosp/), accédez au projet Gitframeworks/native:cd frameworks/nativeDémarrez un projet temporaire avec cette commande :
repo start PROJECT_NAME.Utilisez votre éditeur pour modifier
SurfaceFlinger.cppà l'emplacement suivant :aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cppLocalisez la ligne suivante :
void SurfaceFlinger::updateColorMatrixLocked() {Ajoutez cette ligne au début de
updateColorMatrixLocked():mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f}, vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f});Compilez le code :
mMettez à jour la compilation sur l'appareil :
adb rootadb remount -Radb rootadb syncadb rebootVérifiez que vous voyez un changement de couleur sur l'appareil sélectionné, semblable à celui illustré à la figure 1.
Figure 1. Apparence de l'écran après un changement de couleur réussi
Corriger un test
Cette partie de l'atelier de programmation utilise un exemple de test qui se trouve dans l'arborescence source et qui échoue.
Pour exécuter, déboguer et corriger le test, procédez comme suit :
Exécutez la commande suivante :
atest DevCodelabTestLe test échoue.
Examinez la trace de la pile du test qui échoue :
STACKTRACE: java.lang.AssertionError at org.junit.Assert.fail(Assert.java:87) at org.junit.Assert.assertTrue(Assert.java:42) at org.junit.Assert.assertTrue(Assert.java:53) at android.test.example.devcodelab.DevCodelabTest.testHelloWorld(DevCodelabTest.java:29)La dernière ligne de la trace de la pile affiche le test qui échoue (
testHelloWorld). Ce test se trouve dans un fichier nomméDevCodelabTest.java.Pour déterminer l'emplacement du test à corriger, ajoutez
WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/à la dernière ligne de la trace de la pile jusqu'au nom du fichier de test inclus. Ainsi,android.test.example.devcodelab.DevCodelabTestdevientWORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java.Modifiez
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javaet remplacezAssert.assertTrue(false)parAssert.assertTrue(true).Exécutez à nouveau le test pour vérifier que vous avez résolu le problème :
atest DevCodelabTest
Importer votre code pour examen
Repo simplifie l'utilisation de Git en regroupant des commandes telles que git clone pour fonctionner sur plusieurs dépôts Git (ou projets) à la fois.
Pour la revue de code de vos projets dans Git, utilisez le système de revue de code Web Gerrit.
En supposant que vous avez apporté vos modifications au projet
frameworks/native, exécutez ces commandes pour importer vos modifications :cd frameworks/nativerepo start PROJECT_NAME.git add .git commitPour votre message de commit, saisissez les éléments suivants :
Android PROJECT_NAME. change Test: manual atestImportez votre modification :
repo uploadSi l'opération réussit, un message semblable à celui-ci s'affiche :
Upload project frameworks/native/ to remote branch android17-release: branch PROJECT_NAME. ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android PROJECT_NAME. change to https://android-review.googlesource.com/ (y/N)? y remote: Processing changes: refs: 1, new: 1, done remote: remote: SUCCESS remote: remote: https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432 android PROJECT_NAME. change [NEW] remote: To https://android-review.googlesource.com/platform/frameworks/native * [new branch] PROJECT_NAME. -> refs/for/android17-release
Afficher votre modification dans Gerrit
Pour afficher votre modification dans Gerrit, accédez au lien de sortie dans le terminal. Le lien est semblable à ce qui suit :
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Annuler votre modification
Normalement, après les tests, l'examen et l'approbation, vous envoyez votre modification dans Gerrit et la fusionnez dans le dépôt. Au lieu de cela, pour les besoins de cet atelier de programmation, annulez votre travail :
Dans Gerrit, cliquez sur Abandonner.
Abandonnez la branche temporaire associée dans le répertoire du projet
frameworks/native(ou ses sous-répertoires) :repo abandon PROJECT_NAME.Annulez les modifications que vous avez apportées au fichier de test. Étant donné que vous n'avez pas exécuté
repo start,git commitetrepo uploadsur la modification du test, vous pouvez réinitialiser le fichier lui-même. En supposant que vous vous trouviez dans leaosp/platform_testing directory, utilisez la commande suivante pour réinitialiser le fichier :git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javagit checkout .
L'atelier de programmation pour le développement de la plate-forme Android est maintenant terminé.
Obtenir de l'aide
Si vous rencontrez des erreurs au cours de cet atelier de programmation, signalez-les à l'aide du lien Issue Tracker en bas de n'importe quelle page. Envoyez vos questions au groupe android-building.
Saisissez ps -A | grep crosvm pour voir si crosvm est déjà en cours d'exécution. Si crossvm est
en cours d'exécution, saisissez stop_cvd || true ou kill crosvm processus avec le PID du processus.