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 Manifestzweig des
Android-Quellcodes herunterladen und erstellen, prüfen Sie, ob Ihre Hardware die
erforderlichen Anforderungen erfüllt und ob die
erforderliche Software ordnungsgemäß installiert ist. Sie sollten auch mit den folgenden Begriffen vertraut sein:
- Git
- Git ist ein kostenloses und Open-Source-Versionsverwaltungssystem. Android verwendet Git für lokale Vorgänge wie Branching, Commits, Diffs und Bearbeitungen. Weitere Informationen zu 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 komplexe Git-Vorgänge. Repo verwendet Manifestdateien, um Git-Projekte im Android-Superprojekt zusammenzufassen.
- Manifestdatei
- Eine Manifestdatei ist eine XML-Datei, in der angegeben ist, wo die verschiedenen Git-Projekte im Android-Quellcode in einem AOSP-Quellcodebaum platziert werden.
Hardwareanforderungen erfüllen
Ihre Entwicklungs-Workstation sollte die folgenden Hardwareanforderungen erfüllen oder übertreffen:
Ein 64-Bit-x86-System.
Mindestens 400 GB kostenloser Festplattenspeicher 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 nur wenige Minuten. Im Gegensatz dazu dauert ein vollständiger Build mit einer 6-Kern-Maschine mit 64 GB RAM etwa 6 Stunden.
Systemanforderungen erfüllen
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 fontconfigErforderliche Software installieren
Bevor Sie mit AOSP arbeiten können, müssen Sie OpenJDK, Make, Python 3 und Repo installiert haben. Der neueste Releasezweig von Android enthält vorkompilierte Versionen von OpenJDK, Make und Python 3, sodass keine zusätzlichen Installationsschritte erforderlich sind. Im folgenden Abschnitt wird die Installation von Repo beschrieben.
Repo installieren
So installieren Sie Repo:
Laden Sie die aktuellen Paketinformationen herunter:
sudo apt-get updateFühren Sie den folgenden Befehl aus, um den Repo-Launcher zu installieren:
sudo apt-get install repoDer Repo-Launcher stellt ein Python-Skript bereit, das einen Checkout initialisiert und das vollständige Repo-Tool herunterlädt.
Wenn der Vorgang erfolgreich war, 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/repoMit 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 ausgeführt werden, installiert der letzte Befehl den Repo-Launcher.
Prüfen Sie die Version des Repo-Launchers:
repo versionDie Ausgabe sollte eine Version von 2.4 oder höher angeben, 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 dem Zeitpunkt, an 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 aospWechseln Sie zum Verzeichnis:
cd aospInitialisieren Sie den neuesten Releasezweig des AOSP-Repository-Quellcodes (
android-latest-release):repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifestGeben Sie Ihre Git-Anmeldedaten (Name, E-Mail-Adresse) ein oder übernehmen Sie sie.
Synchronisieren Sie den Quellcode:
repo sync -c -j8Wenn beim Herunterladen Probleme auftreten, lesen Sie den Hilfeartikel Synchronisierungsprobleme beheben.
Code erstellen
So erstellen Sie den Code:
Führen Sie im Arbeitsverzeichnis das Skript
envsetup.shaus, um die Build-Umgebung einzurichten:source build/envsetup.shGeben Sie mit dem Befehl
luncheinen Zielgerätetyp an, der erstellt werden soll. 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-userdebugSie sollten eine Zusammenfassung Ihres Ziels und Ihrer 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 dauert mehrere Stunden. Nachfolgende Builds dauern deutlich weniger Zeit. Die Ausgabe Ihres Builds wird in $OUT_DIR angezeigt.
Cuttlefish starten
Cuttlefish ist der Android-Emulator, mit dem Sie Ihre Builds testen können.
Führen Sie die folgenden Befehle aus, um die Host-Debian-Pakete herunterzuladen, zu erstellen und zu installieren:
sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curlgit clone https://github.com/google/android-cuttlefishcd android-cuttlefishfor dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd donesudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -fsudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -fsudo usermod -aG kvm,cvdnetwork,render $USERsudo rebootDurch den Neustart werden zusätzliche Kernelmodule installiert und
udev-Regeln angewendet.Starten Sie Cuttlefish:
launch_cvd --daemonRufen Sie in Ihrem Webbrowser
https://localhost:8443auf, um eine Verbindung zum Cuttlefish-Gerät herzustellen. Ihr virtuelles Android-Gerät wird angezeigt.
Änderungen vornehmen
Aktualisieren Sie den Quellcode gemäß dieser Beispiel-Änderungsliste.
Wechseln Sie im Stammverzeichnis Ihres Checkouts (
aosp/-Verzeichnis) zum Git-Projektframeworks/native:cd frameworks/nativeStarten Sie mit diesem Befehl ein temporäres Projekt:
repo start PROJECT_NAME.Bearbeiten Sie mit Ihrem Editor
SurfaceFlinger.cppam folgenden Speicherort:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cppSuchen Sie diese Zeile:
void SurfaceFlinger::updateColorMatrixLocked() {Fügen Sie diese Zeile am Anfang von
updateColorMatrixLocked()ein: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:
mAktualisieren Sie den Build auf dem Gerät:
adb rootadb remount -Radb rootadb syncadb rebootPrüfen Sie, ob auf dem ausgewählten Gerät eine Farbänderung angezeigt wird, die der in Abbildung 1 ähnelt.
Abbildung 1 : Bildschirmanzeige nach erfolgreicher Farbänderung
Test korrigieren
In diesem Teil des Codelabs wird ein Beispieltest verwendet, der sich im Quellcodebaum befindet und fehlschlägt.
So führen Sie den Test aus, debuggen und korrigieren ihn:
Ausführen:
atest DevCodelabTestDer Test schlägt fehl.
Prüfen 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 Test angezeigt, der fehlschlägt (
testHelloWorld). Dieser Test befindet sich in einer Datei namensDevCodelabTest.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 Test datei. So wird ausandroid.test.example.devcodelab.DevCodelabTestWORKING_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.javaund 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.
Verwenden Sie für die Codeüberprüfung Ihrer Projekte in Git das Gerrit webbasierte Codeüberprüfungssystem.
Angenommen, Sie haben die Änderungen im Projekt
frameworks/nativevorgenommen. Führen Sie die folgenden Befehle aus, um die Änderungen hochzuladen:cd frameworks/nativerepo start PROJECT_NAME.git add .git commitGeben Sie für Ihre Commit-Nachricht Folgendes ein:
Android PROJECT_NAME. change Test: manual atestLaden Sie die Änderung hoch:
repo uploadWenn der Vorgang erfolgreich war, wird eine Meldung wie diese angezeigt:
Upload project frameworks/native/ to remote branch android17-release: branch PROJECT_NAME. ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android PROJECT_NAME. 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 PROJECT_NAME. change [NEW] remote: To https://android-review.googlesource.com/platform/frameworks/native * [new branch] PROJECT_NAME. -> refs/for/android17-release
Änderung in Gerrit ansehen
Wenn Sie Ihre Änderung in Gerrit ansehen möchten, 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 im Repository zusammen. Für dieses Codelab machen Sie Ihre Arbeit stattdessen rückgängig:
Klicken Sie in Gerrit auf Aufgeben.
Geben Sie den zugehörigen temporären Zweig im Projektverzeichnis
frameworks/native(oder in den Unterverzeichnissen) auf:repo abandon PROJECT_NAME.Machen Sie die Änderungen rückgängig, die Sie an der Testdatei vorgenommen haben. Da Sie
repo start,git commitundrepo uploadfür die Teständerung nicht ausgeführt haben, können Sie die Datei selbst zurücksetzen. Wenn Sie sich imaosp/platform_testing directorybefinden, verwenden Sie den folgenden Befehl, um die Datei zurückzusetzen:git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javagit checkout .
Damit ist das Codelab zur Entwicklung für die Android-Plattform abgeschlossen.
Hilfe
Wenn bei diesem Codelab Fehler auftreten, melden Sie sie über den Issue Tracker unten auf einer beliebigen 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 stop_cvd || true ein oder beenden Sie den kill crosvm-Prozess mit der Prozess-PID.