Atelier de programmation pour les développeurs Android

Vous pouvez aider à développer le système d’exploitation le plus installé de l’histoire de la Terre. Oui, vous êtes là pour vous lancer dans l'aventure Android ingénieur de plate-forme.

Bien que le processus soit difficile, l'équipe Android s'efforce de simplifier votre chaque sortie. Et l'équipe apporte des améliorations chaque jour grâce à des dans le projet Android Open Source (AOSP).

Alors asseyez-vous, allumez un terminal et entrez dans l'histoire.

Objectifs

L'objectif de cet atelier de programmation est double:

  1. Pour vous donner un aperçu du workflow du développeur comme pour les ingénieurs Android travaillant sur la plateforme (le système d’exploitation).
  2. Nous vous encourageons à nous faire part de vos commentaires. sur les outils, la documentation et le workflow du développeur d'Android.

Prérequis

La liste des exigences de cet atelier de programmation est tirée de celles concernant (AOSP). Pour suivre cet atelier de programmation, configurez les éléments suivants :

Environnement

En règle générale, les utilisateurs compilent et développent leurs applications directement sur la station de travail. Étant donné que vous pouvez travailler dans différents terminaux et que de nombreuses commandes utilisées sont spécifiques à un terminal, vous devrez les réexécuter dans chaque session de terminal. Plus précisément, il s'agit des commandes source build/envsetup.sh et lunch.

Configurer une station de travail

  1. Installez les packages nécessaires sur votre poste de travail.
  2. Dans un terminal, installez Repo et obtenez des identifiants. dans tous les dépôts Git.

Initialiser et synchroniser le code

  1. Accédez à votre répertoire d'accueil:

    cd ~
  2. Créez un sous-répertoire de travail local:

    mkdir aosp
  3. Accédez au répertoire suivant:

    cd aosp
  4. Initialisez la branche principale du code source du dépôt AOSP (par défaut):

    repo init -u https://android.googlesource.com/platform/manifest
  5. Saisissez ou acceptez vos identifiants Git (nom, adresse e-mail).

  6. Synchronisez le code source:

    repo sync -j8

Les synchronisations initiales peuvent prendre une heure ou plus.

Chaque paiement du dépôt est représenté par un fichier manifeste. Il est possible d'effectuer plusieurs paiements de dépôt à la fois, à condition qu'ils existent dans des répertoires distincts. Mais notez que chaque paiement et accumulent des montants pour d'environ 300 Go (et en augmentation). Limitez-vous donc à 2 achats de dépôts, ou enrichir votre système avec un disque secondaire.

Compiler le code

Pour compiler Android, vous devez sélectionner un type d'appareil cible à compiler avec la commande lunch. Une cible est une permutation d'appareil, comme un modèle ou un facteur de forme spécifique.

L'appareil cible aosp_cf_x86_64_phone-userdebug vous permet pour créer l'appareil Android virtuel Cuttlefish pour les tests sans appareil physique.

Si vous préférez créer et mettre à jour un appareil physique, choisissez une autre cible et suivez les instructions pour flasher les périphériques.

  1. Configurez votre environnement pour créer des appareils Android en exécutant la à partir de la racine de l'extraction de votre code source:

    source build/envsetup.sh
  2. Transmettez la cible de compilation à la commande "déjeuner", comme ceci:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
  3. Compilez le code où que vous soyez dans votre paiement avec:

    m

La première compilation peut prendre plusieurs heures. Les builds suivants prennent beaucoup moins de temps.

Lancer Cuttlefish

Cuttlefish est l'émulateur Android utilisé pour tester vos builds.

  1. Si vous n'avez jamais installé Cuttlefish, vous devez installer les Dépendances de seiches. Dans une fenêtre de terminal, 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 curl
    git clone https://github.com/google/android-cuttlefish
    cd android-cuttlefish
    for dir in base frontend; do
    pushd $dir
    # Install build dependencies
    sudo mk-build-deps -i
    dpkg-buildpackage -uc -us
    popd
    done
    sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
    sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
    sudo usermod -aG kvm,cvdnetwork,render $USER
    sudo reboot

    Le redémarrage déclenche l'installation de modules de noyau supplémentaires et applique udev. des règles de pare-feu.

  2. Lancez Settlefish:

    launch_cvd --daemon
    
  3. Connectez-vous à l'appareil Settlefish en accédant à https://localhost:8443 dans votre navigateur Web. Vous êtes accueilli par un flux vidéo du que vous venez de créer.

Effectuer une modification

Mettez à jour le code source en suivant cet exemple de liste de modifications.

  1. À la racine de votre processus de paiement (répertoire aosp/), accédez à Projet Git frameworks/native:

    cd frameworks/native
  2. Démarrez un projet temporaire à l'aide de cette commande:

    repo start <some-name> .
  3. Modifiez SurfaceFlinger.cpp pour inclure les mises à jour de la liste de modifications au niveau lieu suivant:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. Recherchez cette ligne:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. Ajoutez ces deux lignes 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});
    
  6. Créez le code :

    m
  7. Mettez à jour le build sur l'appareil :

    adb root
    adb remount
    adb sync
    adb reboot

Vérifiez que la couleur de l'appareil sélectionné change, comme illustré à la figure 1.

Exemple de changement de couleur réussi

Figure 1 : Apparence de l'écran après un changement de couleur réussi

Tester votre code

Cette partie de l'atelier de programmation utilise un exemple de test figurant dans l'arborescence source. et échoue. Cela utilise Atest pour exécuter le test en local et tester le code.

Pour utiliser le test, procédez comme suit:

  1. Exécutez la commande suivante:

    atest DevCodelabTest
  2. Le test échouera. Examinez la trace de la pile du test défaillant :

    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)
  3. Regardez ici

    platform_testing/tests/example/devcodelab
    
  4. Pour modifier le fichier, prenez le nom du test dans android.test.example.devcodelab.DevCodelabTest et remplacez . par /, pour obtenir ce résultat:

    src/android/test/example/devcodelab/DevCodelabTest.java
    
  5. Modifiez ensuite

    platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    

    pour remplacer

    Assert.assertTrue(false)
    

    par

    Assert.assertTrue(true)
    
  6. 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 travailler sur de nombreux dépôts (ou projets) Git à la fois.

Consultez la page Outils de contrôle source pour obtenir des présentations de Git et Repo, avec Liens vers la documentation complète sur l'utilisation du code source Android. Consultez le dépôt AOSP. pour obtenir la liste complète des projets Git et les projets individuels (chemins d'accès) pour branches associées à chaque projet.

Pour les revues de code de vos projets dans Git, vous utiliserez la commande Gerrit de revue de code basé sur le Web.

  1. En supposant que vous avez apporté vos modifications dans le projet frameworks/native, exécutez la commande suivante : ces commandes pour les importer:

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
  2. Pour votre message de commit, saisissez la commande suivante:

    Android codelab change
    Test: manual atest
    
  3. Importez votre modification :

    repo upload

Si l'opération réussit, un message semblable à celui-ci s'affiche :

Upload project frameworks/native/ to remote branch main:
  branch codelab ( 1 commit, Wed Aug 7 09:32:33 2019 -0700):
         ff46b36d android codelab 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 codelab change [NEW]
remote:
To https://android-review.googlesource.com/platform/frameworks/native
 * [new branch]          codelab -> refs/for/main

Afficher votre modification dans Gerrit

Accédez au lien qui apparaît dans le terminal et qui ressemble à celui-ci:

https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432

L'atelier de programmation de démarrage sur le développement de la plate-forme Android est maintenant terminé. Pour connaître les prochaines étapes, consultez la section Envoyer des correctifs. Pour en savoir plus sur le développement d'Android, consultez le reste de ce site.

Annuler la modification

Normalement, après les tests, et après examen et approbation, vous soumettez votre modification dans Gerrit et le fusionner dans le dépôt.

Pour les besoins de cet atelier de programmation, rétablissez votre liste de modifications en cliquant Abandon dans Gerrit.

Abandonnez ensuite la branche temporaire associée dans le projet frameworks/native (ou ses sous-répertoires):

repo abandon codelab .

N'oubliez pas non plus d'annuler les modifications apportées au fichier de test. Puisque vous n'avez pas repo start, git commit et repo upload, vous pouvez réinitialiser lui-même. En supposant que vous vous trouviez dans aosp/platform_testing directory, utilisez la commande suivante pour réinitialiser le fichier :

git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .

À ce stade, vous avez terminé. Bravo !

Obtenir de l'aide

Si vous rencontrez des erreurs au cours de cet atelier de programmation, signalez-les à l'aide du Issue Tracker en bas de n'importe quelle page. Envoyez vos questions au construction-android groupe.