Codelab für Android-Entwickler

Du kannst dabei helfen, das am häufigsten installierte Betriebssystem zu entwickeln der Erde. Ja, du bist hier, um Android zu werden Platform Engineer.

Der Weg ist zwar herausfordernd, aber das Android-Team bemüht sich, ihn mit jedem Release zu vereinfachen. Und das Team erreicht jeden Tag Verbesserungen durch direkte im Android Open Source Project (AOSP) tätig.

Lehnen Sie sich also zurück, starten Sie ein Terminal und lassen Sie uns Geschichte schreiben.

Ziele

Dieses Codelab verfolgt zwei Ziele:

  1. Sie erhalten einen kleinen Einblick in den Entwickler-Workflow für Android-Entwickler, die an der Plattform (dem Betriebssystem) arbeiten.
  2. Ermutigen Sie Sie, Feedback zu geben. zu den Tools, der Dokumentation und dem Entwickler-Workflow von Android.

Voraussetzungen

Die Liste der Anforderungen für dieses Codelab leitet sich von den Anforderungen an die allgemeine Plattformentwicklung (AOSP). Für dieses Codelab richten Sie Folgendes ein:

Umgebung

In der Regel erfolgt die Erstellung und Entwicklung direkt auf der Workstation. Da Sie möglicherweise die in verschiedenen Terminals funktionieren, und viele der verwendeten Befehle sind Terminal-spezifisch. müssen Sie sie in jeder Terminalsitzung noch einmal ausführen. Genauer gesagt: Dazu gehören die Befehle source build/envsetup.sh und lunch.

Workstation einrichten

  1. Installieren Sie die erforderlichen Pakete auf Ihrem .
  2. Installieren Sie das Repository und rufen Sie Anmeldedaten ab, während Sie sich noch in einem Terminal befinden. zu allen Git-Repositories hinzufügen.

Code initialisieren und synchronisieren

  1. Wechseln Sie zu Ihrem Basisverzeichnis:

    cd ~
  2. Erstellen Sie darin ein lokales Arbeitsunterverzeichnis:

    mkdir aosp
  3. Wechseln Sie in das Verzeichnis:

    cd aosp
  4. Initialisieren Sie den Hauptzweig des AOSP-Repositorys (Standardeinstellung):

    repo init -u https://android.googlesource.com/platform/manifest
  5. Geben Sie Ihre Git-Anmeldedaten (Name, E-Mail-Adresse) ein oder akzeptieren Sie sie.

  6. Quellcode synchronisieren:

    repo sync -j8

Die erste Synchronisierung kann eine Stunde oder länger dauern.

Jeder Repository-Bezahlvorgang wird durch eine Manifestdatei dargestellt. Es ist zulässig, mehrere Repository-Bezahlvorgänge gleichzeitig zu haben, solange sie in verschiedenen Verzeichnissen vorhanden sind. Beachten Sie jedoch, dass jeder Bezahlvorgang und Build Eine Nutzung von etwa 300 GB (Tendenz steigend), beschränken Sie sich daher auf 2 Repo-Checkouts, oder das System mit einem zweiten Laufwerk erweitern.

Code erstellen

Sie müssen ein Ziel auswählen, um Android zu erstellen. Gerätetyp, der mit dem Befehl lunch erstellt werden soll. Ein Ziel ist eine Gerätepermutation, z. B. ein bestimmtes Modell oder einen Formfaktor.

Mit dem Geräteziel aosp_cf_x86_64_phone-userdebug können Sie das virtuelle Android-Gerät Cuttlefish für Tests ohne physisches Gerät erstellen.

Wenn Sie stattdessen ein physisches Gerät erstellen und aktualisieren möchten, wählen Sie ein anderes Ziel aus und folgen Sie der Anleitung zum Flashen von Geräten.

  1. Richten Sie Ihre Umgebung für die Erstellung von Android-Geräten ein, indem Sie den folgenden Befehl aus dem Stammverzeichnis des Quellcodes aus:

    source build/envsetup.sh
  2. Übergeben Sie das Build-Ziel wie folgt an den Lunch-Befehl:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
  3. Erstellen Sie den Code an einer beliebigen Stelle im Bezahlvorgang mit:

    m

Der erste Build kann mehrere Stunden dauern. Nachfolgende Builds werden erheblich Zeit sparen.

Sepien werfen

Cuttlefish ist der Android-Emulator zum Testen Ihrer Builds.

  1. Wenn Sie Cuttlefish noch nie installiert haben, müssen Sie die erforderlichen Sepien-Abhängigkeiten. Führen Sie in einem Terminalfenster die folgenden Befehle aus: So können Sie die Debian-Pakete auf dem Host herunterladen, erstellen und installieren:

    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

    Durch den Neustart werden zusätzliche Kernelmodule installiert und udev-Regeln angewendet.

  2. Sepien starten:

    launch_cvd --daemon
    
  3. Du kannst eine Verbindung zum Sepia-Gerät herstellen, indem du https://localhost:8443 aufrufst in Ihrem Webbrowser. Sie werden mit einem Videostream des das Sie gerade entwickelt haben.

Änderungen vornehmen

Aktualisieren Sie den Quellcode gemäß dieser Beispieländerungsliste.

  1. Gehen Sie im Stammverzeichnis des Bezahlvorgangs (Verzeichnis aosp/) zum frameworks/native-Git-Projekt:

    cd frameworks/native
  2. Starten Sie mit diesem Befehl ein temporäres Projekt:

    repo start <some-name> .
  3. Bearbeiten Sie SurfaceFlinger.cpp so, dass die Aktualisierungen aus der Änderungsliste an der folgende Position:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. Suchen Sie nach dieser Zeile:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. Fügen Sie diese beiden Zeilen am Anfang von updateColorMatrixLocked() hinzu:

    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. Erstellen Sie den Code:

    m
  7. Aktualisieren Sie den Build auf dem Gerät:

    adb root
    adb remount
    adb sync
    adb reboot

Prüfen Sie, ob auf dem ausgewählten Gerät eine Farbänderung ähnlich wie in Abbildung 1 angezeigt wird.

Beispiel für eine erfolgreiche Farbänderung

Abbildung 1: Bildschirmdarstellung nach erfolgreicher Farbänderung

Code testen

In diesem Teil des Codelabs wird ein Beispieltest verwendet, der sich im Quellbaum befindet. und schlägt fehl. Dabei wird Atest für den Test lokal ausführen und den Code testen.

So verwenden Sie den Test:

  1. Führen Sie Folgendes aus:

    atest DevCodelabTest
  2. Der Test schlägt fehl. Prüfen Sie den Stack-Trace des fehlgeschlagenen Tests:

    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. Dann sieh dir das hier an

    platform_testing/tests/example/devcodelab
    
  4. Um die Datei bearbeiten zu können, notieren Sie sich den Namen des Tests in android.test.example.devcodelab.DevCodelabTest und ersetzen Sie . durch /, um dieses Ergebnis zu erhalten:

    src/android/test/example/devcodelab/DevCodelabTest.java
    
  5. Bearbeiten

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

    zum Ersetzen

    Assert.assertTrue(false)
    

    mit

    Assert.assertTrue(true)
    
  6. Führen Sie den Test noch einmal aus, um zu prüfen, ob das Problem behoben wurde:

    atest DevCodelabTest

Code zur Überprüfung hochladen

Repo vereinfacht die Verwendung von Git, indem Befehle wie git clone gebündelt werden, um gleichzeitig mit mehreren Git-Repositories (oder Projekten) zu arbeiten.

Unter Source Control Tools finden Sie einen Überblick über Git und Repository mit Links zur vollständigen Dokumentation zum Arbeiten mit dem Android-Quellcode Siehe AOSP-Repository finden Sie die vollständige Liste der Git-Projekte und der einzelnen Projekte (Pfade) für Zweigen, die mit jedem Projekt verknüpft sind.

Für die Codeüberprüfung Ihrer Projekte in Git verwenden Sie das Gerrit webbasierten System zur Codeüberprüfung.

  1. Wenn Sie im Projekt frameworks/native Änderungen vorgenommen haben, führen Sie folgenden Befehl aus: folgende Befehle, um sie hochzuladen:

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
  2. Geben Sie für die Commit-Nachricht Folgendes ein:

    Android codelab change
    Test: manual atest
    
  3. Laden Sie die Änderung hoch:

    repo upload

Wenn der Vorgang erfolgreich war, wird eine Meldung wie die folgende angezeigt:

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

Deine Änderung in Gerrit ansehen

Rufen Sie den im Terminal gedruckten Link auf, der in etwa so aussieht:

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

Damit ist das Start-Codelab für die Android-Plattformentwicklung abgeschlossen. Weitere Informationen zu den nächsten Schritten finden Sie unter Patches einreichen. Ausführliche Informationen zur Entwicklung von Android finden Sie auf der restlichen Website.

Änderung rückgängig machen

Normalerweise reichen Sie die Änderung nach dem Testen sowie nach Überprüfung und Genehmigung in Gerrit und führen Sie sie im Repository zusammen.

Setzen Sie für dieses Codelab Ihre Änderungsliste zurück, indem Sie auf Abandon in Gerrit aus.

Verwerfen Sie dann den verknüpften temporären Zweig im Projekt frameworks/native (oder dessen Unterverzeichnisse):

repo abandon codelab .

Vergessen Sie nicht, die Änderungen, die Sie an der Testdatei vorgenommen haben, rückgängig zu machen. Da Sie nicht repo start, git commit und repo upload die Änderung haben, können Sie die -Datei selbst. Angenommen, Sie befinden sich in der aosp/platform_testing directory, können Sie die Datei so zurücksetzen:

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

Damit sind Sie fertig. Gut gemacht!

Hilfe

Wenn in diesem Codelab Fehler auftreten, melde sie mithilfe des Problemverfolgung unten auf jeder Seite. Senden Sie Fragen an die Android-Entwicklung Gruppe.