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. Außerdem führt das Team täglich Verbesserungen durch direkte Arbeit am Android Open Source Project (AOSP).

Also lehnen Sie sich zurück, starten Sie ein Terminal und lassen Sie uns Geschichte schreiben.

Ziele

Dieses Codelab verfolgt zwei Ziele:

  1. Um Ihnen einen kleinen Vorgeschmack auf den Workflow für Entwickler zu geben z. B. für Android-Entwickler, die an der Plattform (dem Betriebssystem) arbeiten.
  2. Wir möchten Sie bitten, Feedback zu den Android-Tools, zur Dokumentation und zum Entwicklerworkflow zu geben.

Voraussetzungen

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

Umgebung

In der Regel erfolgt die Erstellung und Entwicklung direkt auf der Workstation. Da Sie möglicherweise in verschiedenen Terminals arbeiten und viele der verwendeten Befehle terminalspezifisch sind, müssen Sie sie in jeder Terminalsitzung neu ausführen. Dazu gehören insbesondere 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-Repository-Quellcodes (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 Erstsynchronisierung kann eine Stunde oder länger dauern.

Jeder Repository-Bezahlvorgang wird durch eine Manifestdatei dargestellt. Es ist zulässig, mehrere Repository-Checkouts gleichzeitig zu haben, solange sie sich in verschiedenen Verzeichnissen befinden. Beachten Sie jedoch, dass jede Absicherung und Erstellung etwa 300 GB Speicherplatz belegt (und dieser Wert steigt). Beschränken Sie sich daher auf zwei Repository-Absicherungen oder ergänzen Sie Ihr System mit einem sekundären Laufwerk.

Code erstellen

Wenn Sie Android erstellen möchten, müssen Sie mit dem Befehl lunch einen Ziel-Gerätetyp auswählen. Ein Ziel ist eine Gerätevariante, z. B. ein bestimmtes Modell oder ein bestimmter Formfaktor.

Mit dem Geräteziel „aosp_cf_x86_64_phone-userdebug“ können Sie um das virtuelle Android-Gerät Cuttlefish ohne physisches Gerät testen.

Wenn du stattdessen ein physisches Gerät entwickeln und aktualisieren möchtest, wähle ein anderes Ziel aus und folge die Anleitung für Flash-Geräte.

  1. Richten Sie Ihre Umgebung für das Erstellen von Android-Geräten ein, indem Sie den folgenden Befehl im Stammverzeichnis Ihrer Quellcode-Checkout-Datei ausführen:

    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 wird voraussichtlich Stunden dauern. Nachfolgende Builds werden erheblich Zeit sparen.

Cuttlefish starten

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, um die Debian-Pakete des Hosts herunterzuladen, zu erstellen und zu 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

    Der Neustart löst die Installation weiterer Kernelmodule aus und wendet udev an Regeln.

  2. Sepien starten:

    launch_cvd --daemon
    
  3. Stellen Sie eine Verbindung zum Cuttlefish-Gerät her, indem Sie in Ihrem Webbrowser https://localhost:8443 aufrufen. Sie werden mit einem Videostream der Android-basierten das Sie gerade entwickelt haben.

Änderungen vornehmen

Aktualisieren Sie den Quellcode anhand dieser Änderungsliste.

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

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

    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

Überprüfen Sie, ob auf dem ausgewählten Gerät eine Farbänderung ähnlich der auf dem Bildschirm zu sehen ist. in Abbildung 1.

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. Dazu wird Atest verwendet, um den Test lokal auszuführen und den Code zu 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 zu bearbeitende Datei aufzurufen, ersetzen Sie in android.test.example.devcodelab.DevCodelabTest den Namen des Tests durch /. Sie erhalten dann Folgendes:

    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 Nutzung von Git, indem Befehle wie git clone bündelt werden in zahlreichen Git-Repositories (oder Projekten) gleichzeitig ausgeführt werden.

Unter Tools zur Versionskontrolle finden Sie eine Übersicht über Git und Repo mit Links zur vollständigen Dokumentation zur Arbeit mit Android-Quellcode. Eine vollständige Liste der Git-Projekte und der einzelnen Projekte (Pfade) für die mit den einzelnen Projekten verknüpften Branches finden Sie im AOSP-Repository.

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

  1. Angenommen, Sie haben die Änderungen im Projekt frameworks/native vorgenommen, führen Sie die folgenden Befehle aus, 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

Ist dies erfolgreich, sehen Sie eine Nachricht wie diese:

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

Ä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 Einstiegs-Codelab für die Entwicklung auf der Android-Plattform abgeschlossen. Weitere Informationen finden Sie unter Patches senden finden Sie weitere Informationen zu den nächsten Schritten. Ausführliche Informationen zur Entwicklung von Android finden Sie in den diese Website.

Änderung rückgängig machen

Normalerweise reichen Sie Ihre Änderung nach dem Testen, der Überprüfung und Genehmigung in Gerrit ein und führen sie in das Repository ein.

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

Verwerfen Sie dann den zugehörigen temporären Branch im Projektverzeichnis frameworks/native (oder in seinen Unterverzeichnissen):

repo abandon codelab .

Denken Sie auch daran, die Änderungen an der Testdatei 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 Gruppe android-building.