In dieser Anleitung können Sie zum ersten Mal die Entwicklung für das Android-Betriebssystem ausprobieren.
Für die Android-Entwicklung einrichten
Bevor Sie den android-latest-release
-Manifest-Branch des Android-Quellcodes herunterladen und erstellen, müssen Sie sicherstellen, dass 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 Open-Source-Versionsverwaltungssystem. Android verwendet Git für lokale Vorgänge wie Branching, Commits, Diffs und Bearbeitungen. Hilfe zum Erlernen von Git finden Sie in der Git-Dokumentation.
- Repo
- 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 Versionsverwaltungsvorgänge, sondern erleichtert nur die Ausführung komplexer Git-Vorgänge. Repo verwendet Manifestdateien, um Git-Projekte im Android-Superprojekt zusammenzufassen.
- Manifestdatei
- Eine Manifestdatei ist eine XML-Datei, in der angegeben wird, wo sich die verschiedenen Git-Projekte im Android-Quellcode in einem AOSP-Quellcodebaum befinden.
Hardwareanforderungen für Meet
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 72‑Kern-Maschinen mit 64 GB RAM, um Android zu erstellen. Mit dieser Hardwarekonfiguration dauert ein vollständiger Build von Android etwa 40 Minuten und ein inkrementeller Build von Android nur wenige Minuten. Im Gegensatz dazu dauert ein vollständiger Build mit einer 6-Kern-Maschine mit 64 GB RAM etwa 6 Stunden.
Anforderungen an das Betriebssystem erfüllen
Auf Ihrer Entwickler-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 Repo installieren. Der aktuelle Release-Branch von Android enthält vorab erstellte Versionen von OpenJDK, Make und Python 3, sodass keine zusätzlichen Installationsschritte erforderlich sind. Im folgenden Abschnitt wird beschrieben, wie Sie Repo installieren.
Repo installieren
So installieren Sie Repo:
Laden Sie die aktuellen Paketinformationen herunter:
sudo apt-get update
Führen Sie den folgenden Befehl aus, um den Repo-Launcher zu installieren:
sudo apt-get install repo
Der Repo Launcher stellt ein Python-Script bereit, das einen Checkout initialisiert und das vollständige Repo-Tool herunterlädt.
Wenn das funktioniert, fahren Sie mit Schritt 4 fort.
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 bereitgestellte Schlüssel mit dem erforderlichen Schlüssel übereinstimmt. Wenn diese Befehle erfolgreich ausgeführt werden, wird mit dem letzten Befehl der Repo-Launcher installiert.
Prüfen Sie die Version des Repo-Launchers:
repo version
Die Ausgabe sollte eine Version von 2.4 oder höher enthalten, z. B.:
repo launcher version 2.45
Android-Quellcode herunterladen
Der Android-Quellcode befindet sich in einer Sammlung von Git-Repositories, die von Google gehostet werden. Jedes Git-Repository enthält den gesamten Verlauf des Android-Quellcodes, einschließlich Änderungen am Quellcode und des Zeitpunkts, zu dem die Änderungen vorgenommen wurden. So laden Sie den Android-Quellcode herunter:
Wechseln Sie zu Ihrem Basisverzeichnis:
cd ~
Erstellen Sie darin ein lokales Arbeitsunterverzeichnis:
mkdir aosp
Wechseln Sie zum Verzeichnis:
cd aosp
Initialisieren Sie den Quellcode des AOSP-Repositorys mit dem neuesten Release-Branch (
android-latest-release
):repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifest
Geben Sie Ihre Git-Anmeldedaten (Name, E-Mail-Adresse) ein oder übernehmen Sie sie.
Quellcode synchronisieren:
repo sync -c -j8
Wenn beim Herunterladen Probleme auftreten, lesen Sie den Hilfeartikel Synchronisierungsprobleme beheben.
Code erstellen
So erstellen Sie den Code:
Führen Sie im Arbeitsverzeichnis das
envsetup.sh
-Skript aus, um die Build-Umgebung einzurichten:source build/envsetup.sh
Geben Sie mit dem Befehl
lunch
einen Zielgerätetyp für den Build an. Ein Ziel ist eine Gerätepermutation, z. B. ein bestimmtes Modell oder ein bestimmter Formfaktor. Geben Sie dieses Ziel an:lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug
Sie sollten eine Zusammenfassung Ihrer Ziel- und Build-Umgebung sehen:
============================================ 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 ============================================
Erstellen Sie das Ziel:
m
Der erste Build kann mehrere Stunden dauern. Nachfolgende Builds dauern deutlich weniger lange. Die Ausgabe Ihres Builds wird in $OUT_DIR
angezeigt.
Cuttlefish starten
Cuttlefish ist der Android-Emulator, der zum Testen Ihrer Builds verwendet wird.
Führen Sie die folgenden Befehle aus, um die Debian-Hostpakete 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
Durch den Neustart werden zusätzliche Kernelmodule installiert und
udev
-Regeln angewendet.Cuttlefish starten:
launch_cvd --daemon
Stellen Sie eine Verbindung zum Cuttlefish-Gerät her, indem Sie in Ihrem Webbrowser zu
https://localhost:8443
navigieren. Ihr virtuelles Android-Gerät wird angezeigt.
Änderungen vornehmen
Aktualisieren Sie den Quellcode anhand dieser Änderungsliste.
Wechseln Sie vom Stammverzeichnis Ihres Checkouts (
aosp/
-Verzeichnis) zum Git-Projektframeworks/native
:cd frameworks/native
Starten Sie ein temporäres Projekt mit diesem Befehl:
repo start <some-name> .
Bearbeiten Sie
SurfaceFlinger.cpp
mit einem Editor am folgenden Speicherort:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
Suchen Sie diese Zeile:
void SurfaceFlinger::updateColorMatrixLocked() {
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});
Erstellen Sie den Code:
m
Aktualisieren Sie den Build auf dem Gerät:
adb root
adb remount -R
adb root
adb sync
adb reboot
Prüfe, ob sich die Farbe auf dem ausgewählten Gerät ähnlich wie in Abbildung 1 ändert.
Abbildung 1: Bildschirmanzeige nach erfolgreicher Farbänderung
Test korrigieren
In diesem Teil des Codelabs wird ein Beispieltest verwendet, der sich im Quellbaum befindet und fehlschlägt.
So führen Sie den Test aus, debuggen ihn und beheben Fehler:
Laufen:
atest DevCodelabTest
Der Test schlägt fehl.
Untersuchen Sie den Stacktrace 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 (
testHelloWorld
) angezeigt. Dieser Test befindet sich in der DateiDevCodelabTest.java
.Um den Speicherort des zu korrigierenden Tests zu ermitteln, hängen Sie
WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/
an die letzte Zeile des Stacktrace an, bis einschließlich des Namens der Testdatei.android.test.example.devcodelab.DevCodelabTest
wird also zuWORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
.Bearbeiten Sie
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
und ersetzen SieAssert.assertTrue(false)
durchAssert.assertTrue(true)
.Führen Sie den Test noch einmal aus, um zu prüfen, ob Sie das Problem behoben haben:
atest DevCodelabTest
Code zur Überprüfung hochladen
Repo vereinfacht die Verwendung von Git, indem Befehle wie git clone
gebündelt werden, um gleichzeitig in mehreren Git-Repositories (oder Projekten) zu arbeiten.
Für die Codeüberprüfung Ihrer Projekte in Git können Sie das webbasierte Codeüberprüfungssystem Gerrit verwenden.
Angenommen, Sie haben die Änderungen im Projekt
frameworks/native
vorgenommen. Führen Sie die folgenden Befehle aus, um die Änderungen hochzuladen:cd frameworks/native
repo start codelab .
git add .
git commit
Geben Sie für Ihre Commit-Nachricht Folgendes ein:
Android codelab change Test: manual atest
Laden Sie Ihre Änderung hoch:
repo upload
Wenn der Vorgang erfolgreich war, wird eine Meldung wie die folgende angezeigt:
Upload project frameworks/native/ to remote branch android16-release: 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/android16-release
Änderung in Gerrit ansehen
Um die Änderung in Gerrit aufzurufen, rufen Sie den Link auf, der im Terminal ausgegeben wurde. Der Link sieht etwa so aus:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Änderung rückgängig machen
Normalerweise reichen Sie nach dem Testen und nach der Überprüfung und Genehmigung Ihre Änderung in Gerrit ein und führen sie mit dem Repository zusammen. Machen Sie für dieses Codelab stattdessen Ihre Änderungen rückgängig:
Klicken Sie in Gerrit auf Abandon (Aufgeben).
Verwerfen Sie den zugehörigen temporären Branch im Projektverzeichnis
frameworks/native
(oder in seinen Unterverzeichnissen):repo abandon codelab .
Setzen Sie die Änderungen zurück, die Sie an der Testdatei vorgenommen haben. Da Sie
repo start
,git commit
undrepo upload
nicht für die Teständerung ausgeführt haben, können Sie die Datei selbst zurücksetzen. Wenn Sie sich im Verzeichnisaosp/platform_testing directory
befinden, können Sie die Datei mit dem folgenden Befehl zurücksetzen: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 bitte über den Link Issue Tracker unten auf einer beliebigen Seite. Fragen können Sie an die Gruppe android-building senden.
Geben Sie ps -A | grep crosvm
ein, um zu prüfen, ob crosvm
bereits ausgeführt wird. Wenn crossvm
ausgeführt wird, geben Sie stop_cvd || true
oder kill crosvm
ein, gefolgt von der Prozess-PID.