Android-Entwicklung testen

In dieser Anleitung können Sie zum ersten Mal die Entwicklung des Android-Betriebssystems ausprobieren.

Für die Android-Entwicklung einrichten

Bevor Sie den main-Branch der Android-Quelle herunterladen und erstellen, prüfen Sie, ob Ihre Hardware die erforderlichen Anforderungen erfüllt und die erforderliche Software richtig installiert ist. Außerdem sollten Sie mit den folgenden Begriffen vertraut sein:

Git
Git ist ein kostenloses und Open-Source-verfügbares verteiltes Versionskontrollsystem. Android verwendet Git für lokale Vorgänge wie Verzweigungen, Commits, Differenzen und Bearbeitungen. Informationen zum Erlernen von Git finden Sie in der Git-Dokumentation.
Repository
Repo ist ein Python-Wrapper für Git, der die Ausführung komplexer Vorgänge in mehreren Git-Repositories vereinfacht. Repo ersetzt Git nicht für alle Versionskontrollvorgänge, sondern vereinfacht nur komplexe Git-Vorgänge. Repo verwendet Manifestdateien, um Git-Projekte im Android-Superprojekt zusammenzuführen.
Manifestdatei
Eine Manifestdatei ist eine XML-Datei, in der angegeben ist, wo die verschiedenen Git-Projekte in der Android-Quelle in einem AOSP-Quellbaum abgelegt werden.

Hardwareanforderungen erfüllen

Ihre Entwicklungs-Workstation sollte die folgenden Hardwareanforderungen erfüllen oder übertreffen:

  • Ein 64-Bit-x86-System.

  • Mindestens 400 GB freier Speicherplatz zum Auschecken und Erstellen des Codes (250 GB zum Auschecken + 150 GB zum Erstellen).

  • Mindestens 64 GB RAM Google verwendet Maschinen mit 72 Kernen und 64 GB RAM, um Android zu entwickeln. Bei dieser Hardwarekonfiguration dauert ein vollständiger Android-Build etwa 40 Minuten und ein inkrementeller Android-Build nur wenige Minuten. Im Vergleich dazu dauert ein vollständiger Build mit einem 6‑Kern-Rechner mit 64 GB RAM etwa 6 Stunden.

Anforderungen an das Betriebssystem

Auf Ihrer Entwicklungs-Workstation muss eine beliebige 64-Bit-Linux-Distribution mit GNU C Library (glibc) 2.17 oder höher ausgeführt werden.

Erforderliche Pakete installieren

Führen Sie den folgenden Befehl aus, um die erforderlichen Pakete für Ubuntu 18.04 oder höher zu installieren:

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 fontconfig

Erforderliche Software installieren

Bevor Sie mit AOSP arbeiten können, müssen Sie OpenJDK, Make, Python 3 und Repository installiert haben. Der Hauptzweig von AOSP enthält vorkonfigurierte Versionen von OpenJDK, Make und Python 3. Daher sind keine zusätzlichen Installationsschritte erforderlich. Im folgenden Abschnitt wird beschrieben, wie Sie Repo installieren.

Repo installieren

So installierst du Repo:

  1. Laden Sie die aktuellen Paketinformationen herunter:

    sudo apt-get update
  2. Führen Sie den folgenden Befehl aus, um den Repo-Launcher zu installieren:

    sudo apt-get install repo

    Der Repository-Launcher stellt ein Python-Skript bereit, das einen Bezahlvorgang initialisiert und das vollständige Repository-Tool herunterlädt.

    Wenn der Vorgang erfolgreich war, fahren Sie mit Schritt 4 fort.

  3. Optional: Installieren Sie Repo manuell mit den folgenden Befehlen:

    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/repo

    Mit den ersten drei Befehlen wird eine temporäre Datei eingerichtet, Repo in die Datei heruntergeladen und geprüft, ob der angegebene Schlüssel mit dem erforderlichen Schlüssel übereinstimmt. Wenn diese Befehle erfolgreich sind, wird mit dem letzten Befehl der Repo-Launcher installiert.

  4. Prüfen Sie die Repository-Launcher-Version:

    repo version

    Die Ausgabe sollte Version 2.4 oder höher angeben, zum Beispiel:

    repo launcher version 2.45

Android-Quelle herunterladen

Die Android-Quelle befindet sich in einer Sammlung von Git-Repositories, die von Google gehostet werden. Jedes Git-Repository enthält den gesamten Verlauf der Android-Quelle, einschließlich Änderungen an der Quelle und dem Zeitpunkt, zu dem die Änderungen vorgenommen wurden. So laden Sie die Android-Quelle herunter:

  1. Wechseln Sie zu Ihrem Basisverzeichnis:

    cd ~
  2. Erstellen Sie darin ein lokales Arbeitsunterverzeichnis:

    mkdir aosp
  3. Rufen Sie das Verzeichnis auf:

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

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

  6. Synchronisieren Sie den Quellcode:

    repo sync -c -j8

    Wenn beim Herunterladen Probleme auftreten, lesen Sie den Hilfeartikel Synchronisierungsprobleme beheben.

Code erstellen

So erstellen Sie den Code:

  1. Rufen Sie im Arbeitsverzeichnis das envsetup.sh-Script auf, um die Buildumgebung einzurichten:

    source build/envsetup.sh
  2. Geben Sie mit dem Befehl lunch einen Ziel-Gerätetyp an, der erstellt werden soll. Ein Ziel ist eine Gerätevariante, z. B. ein bestimmtes Modell oder ein bestimmter Formfaktor. Geben Sie dieses Ziel an:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

    Sie sollten eine Zusammenfassung Ihrer Ziel- und Build-Umgebung sehen:

    ============================================
    PLATFORM_VERSION_CODENAME=VanillaIceCream
    PLATFORM_VERSION=VanillaIceCream
    PRODUCT_INCLUDE_TAGS=com.android.mainline
    TARGET_PRODUCT=aosp_arm
    TARGET_BUILD_VARIANT=eng
    TARGET_ARCH=arm
    TARGET_ARCH_VARIANT=armv7-a-neon
    TARGET_CPU_VARIANT=generic
    HOST_OS=linux
    HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
    HOST_CROSS_OS=windows
    BUILD_ID=AOSP.MAIN
    OUT_DIR=out
    ============================================
    
  3. Erstellen Sie das Ziel:

    m

Der erste Build wird voraussichtlich Stunden dauern. Nachfolgende Builds dauern deutlich kürzer. Die Ausgabe des Builds wird in $OUT_DIR angezeigt.

Cuttlefish starten

Cuttlefish ist der Android-Emulator, mit dem Ihre Builds getestet werden.

  1. Führen Sie die folgenden Befehle aus, um die Debian-Pakete für den Host 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 zusätzlicher Kernelmodule aus und wendet udev-Regeln an.

  2. Sepia starten:

    launch_cvd --daemon
    
  3. Stellen Sie eine Verbindung zum Cuttlefish-Gerät her, indem Sie in Ihrem Webbrowser https://localhost:8443 aufrufen. Ihr virtuelles Android-Gerät wird angezeigt.

Änderungen vornehmen

Aktualisieren Sie den Quellcode anhand dieser Änderungsliste.

  1. Rufen Sie im Stammverzeichnis Ihrer Kopie (aosp/-Verzeichnis) das Git-Projekt frameworks/native auf:

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

    repo start <some-name> .
  3. Bearbeiten Sie SurfaceFlinger.cpp an folgendem Speicherort mit Ihrem Editor:

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

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. Fügen Sie diese Zeile 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. Build auf dem Gerät aktualisieren:

    adb root
    adb remount -R
    adb root
    adb sync
    adb reboot
  8. Überprüfen Sie, ob auf dem ausgewählten Gerät eine Farbänderung ähnlich wie in Abbildung 1 zu sehen ist.

    Beispiel für eine erfolgreiche Farbänderung

    Abbildung 1. Bildschirmdarstellung nach erfolgreicher Farbänderung

Test korrigieren

In diesem Teil des Codelabs wird ein Beispieltest verwendet, der sich in der Quellstruktur befindet und fehlschlägt.

So führen Sie den Test aus, beheben Fehler und korrigieren ihn:

  1. Führen Sie Folgendes aus:

    atest DevCodelabTest

    Der Test schlägt fehl.

  2. 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)

    In der letzten Zeile des Stacktrace wird der fehlgeschlagene Test angezeigt (testHelloWorld). Dieser Test befindet sich in einer Datei namens DevCodelabTest.java.

  3. Um den Speicherort des zu korrigierenden Tests zu ermitteln, fügen Sie der letzten Zeile des Stack-Traces bis einschließlich des Namens der Testdatei WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/ hinzu. Aus android.test.example.devcodelab.DevCodelabTest wird also WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java.

  4. Bearbeiten Sie platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java und ersetzen Sie Assert.assertTrue(false) durch Assert.assertTrue(true).

  5. 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 so gebündelt werden, dass sie in zahlreichen Git-Repositories (oder Projekten) gleichzeitig funktionieren.

Verwenden Sie für die Codeüberprüfung Ihrer Projekte in Git das webbasierte Codeüberprüfungssystem Gerrit.

  1. Wenn Sie Ihre Änderungen im Projekt frameworks/native vorgenommen haben, führen Sie diese Befehle aus, um die Änderungen hochzuladen:

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
  2. Geben Sie als 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

Wenn Sie die Änderung in Gerrit sehen möchten, rufen Sie die Linkausgabe im Terminal auf. Der Link sieht in etwa so aus:

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

Ä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. Kehren Sie stattdessen für dieses Codelab zu Ihrer ursprünglichen Arbeit zurück:

  1. Klicken Sie in Gerrit auf Verlassen.

  2. Verwerfen Sie den verknüpften temporären Zweig im Projektverzeichnis frameworks/native (oder seinen Unterverzeichnissen):

    repo abandon codelab .
  3. Machen Sie die Änderungen rückgängig, die Sie an der Testdatei vorgenommen haben. Da Sie repo start, git commit und repo upload für die Teständerung nicht ausgeführt haben, können Sie die Datei selbst zurücksetzen. Angenommen, Sie befinden sich im Verzeichnis aosp/platform_testing directory, verwenden Sie den folgenden Befehl, um die Datei zurückzusetzen:

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

Damit ist das Codelab zur Entwicklung für die Android-Plattform abgeschlossen.

Hilfe

Wenn während dieses Codelabs Fehler auftreten, melden Sie sie über den Link Issue Tracker unten auf jeder Seite. Senden Sie Fragen an die Gruppe android-building.

Geben Sie ps -A | grep crosvm ein, um zu prüfen, ob crosvm bereits ausgeführt wird. Wenn crossvm ausgeführt wird, geben Sie den Prozess stop_cvd || true oder kill crosvm mit Prozess-PID ein.