Questo tutorial ti consente di provare per la prima volta lo sviluppo del sistema operativo Android.
Configurare lo sviluppo per Android
Prima di scaricare e creare il ramo del manifest android-latest-release
della sorgente Android, assicurati che l'hardware soddisfi i requisiti necessari e che il software richiesto sia installato correttamente. Devi anche avere familiarità con i seguenti termini:
- Git
- Git è un sistema di controllo della versione distribuito senza costi e open source. Android utilizza Git per le operazioni locali come la creazione di rami, i commit, le differenze e le modifiche. Per informazioni su Git, consulta la documentazione di Git.
- Repo
- Repo è un wrapper Python per Git che semplifica l'esecuzione di operazioni complesse su più repository Git. Repo non sostituisce Git per tutte le operazioni di controllo della versione, ma semplifica solo le operazioni Git complesse da eseguire. Repo utilizza i file manifest per aggregare i progetti Git nel superprogetto Android.
- file manifest
- Un file manifest è un file XML che specifica dove vengono inseriti i vari progetti Git nel codice sorgente di Android all'interno di una struttura ad albero del codice sorgente AOSP.
Requisiti hardware di Meet
La workstation di sviluppo deve soddisfare o superare i seguenti requisiti hardware:
Un sistema x86 a 64 bit.
Almeno 400 GB di spazio libero su disco per estrarre e compilare il codice (250 GB per l'estrazione + 150 GB per la compilazione).
Almeno 64 GB di RAM. Google utilizza macchine con 72 core e 64 GB di RAM per creare Android. Con questa configurazione hardware, la build completa di Android richiede circa 40 minuti, mentre la build incrementale di Android richiede solo pochi minuti. Al contrario, una build completa con una macchina a 6 core con 64 GB di RAM richiede circa 6 ore.
Soddisfare i requisiti del sistema operativo
La workstation di sviluppo deve eseguire qualsiasi distribuzione Linux a 64 bit con GNU C Library (glibc) 2.17 o versioni successive.
Installa i pacchetti richiesti
Per installare i pacchetti richiesti per Ubuntu 18.04 o versioni successive, esegui il seguente comando:
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
Installare il software richiesto
Prima di poter lavorare con AOSP, devi installare OpenJDK, Make, Python 3 e Repo. L'ultimo ramo di release di Android include versioni predefinite di OpenJDK, Make e Python 3, pertanto non sono necessari passaggi di installazione aggiuntivi. La sezione seguente spiega come installare Repo.
Installare il repository
Per installare Repo:
Scarica le informazioni sul pacchetto attuale:
sudo apt-get update
Esegui questo comando per installare l'utilità di avvio di Repo:
sudo apt-get install repo
Il launcher Repo fornisce uno script Python che inizializza un checkout e scarica lo strumento Repo completo.
Se l'operazione va a buon fine, vai al passaggio 4.
(Facoltativo) Installa manualmente Repo utilizzando la seguente serie di comandi:
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
I primi tre comandi configurano un file temporaneo, scaricano Repo nel file e verificano che la chiave fornita corrisponda a quella richiesta. Se questi comandi vanno a buon fine, l'ultimo comando installa l'utilità di avvio di Repo.
Verifica la versione di Repo Launcher:
repo version
L'output dovrebbe indicare una versione 2.4 o successiva, ad esempio:
repo launcher version 2.45
Scaricare l'origine Android
Il codice sorgente di Android si trova in una raccolta di repository Git ospitati da Google. Ogni repository Git include l'intera cronologia dell'origine Android, incluse le modifiche all'origine e quando sono state apportate. Per scaricare il codice sorgente di Android:
Vai alla tua home directory:
cd ~
Crea una sottodirectory di lavoro locale al suo interno:
mkdir aosp
Vai alla directory:
cd aosp
Inizializza il ramo dell'ultima release del codice sorgente del repository AOSP (
android-latest-release
):repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifest
Inserisci o accetta le tue credenziali Git (nome, indirizzo email).
Sincronizza il codice sorgente:
repo sync -c -j8
Se riscontri problemi durante il download, consulta Risolvere i problemi di sincronizzazione.
Crea il codice
Per creare il codice:
Dalla directory di lavoro, esegui lo script
envsetup.sh
per configurare l'ambiente di compilazione:source build/envsetup.sh
Specifica un tipo di dispositivo target da compilare con il comando
lunch
. Un target è una permutazione di dispositivi, ad esempio un modello o un fattore di forma specifico. Specifica questo target:lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug
Dovresti visualizzare un riepilogo dell'ambiente di build e di destinazione:
============================================ 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 ============================================
Crea il target:
m
La prima build potrebbe richiedere ore. Le build successive richiedono molto
meno tempo. L'output della build viene visualizzato in
$OUT_DIR
.
Avvia Cuttlefish
Cuttlefish è l'emulatore Android utilizzato per testare le build.
Esegui i seguenti comandi per scaricare, compilare e installare i pacchetti Debian host:
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
Il riavvio attiva l'installazione di moduli kernel aggiuntivi e applica le regole
udev
.Avvia Cuttlefish:
launch_cvd --daemon
Connettiti al dispositivo Cuttlefish andando su
https://localhost:8443
nel browser web. Viene visualizzato il dispositivo virtuale basato su Android.
Effettua una modifica
Aggiorna il codice sorgente seguendo questo esempio di changelist.
Dalla radice del checkout (directory
aosp/
), vai al progetto Gitframeworks/native
:cd frameworks/native
Avvia un progetto temporaneo con questo comando:
repo start <some-name> .
Utilizza l'editor per modificare
SurfaceFlinger.cpp
nella seguente posizione:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
Trova questa riga:
void SurfaceFlinger::updateColorMatrixLocked() {
Aggiungi questa riga all'inizio di
updateColorMatrixLocked()
: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});
Crea il codice:
m
Aggiorna la build sul dispositivo:
adb root
adb remount -R
adb root
adb sync
adb reboot
Verifica che il colore del dispositivo selezionato cambi in modo simile a quanto mostrato nella Figura 1.
Figura 1. Aspetto dello schermo dopo la modifica del colore
Correggere un test
Questa parte del codelab utilizza un test di esempio presente nell'albero delle origini che non va a buon fine.
Per eseguire, eseguire il debug e correggere il test, segui queste istruzioni:
Esegui:
atest DevCodelabTest
Il test non riesce.
Esamina la traccia dello stack del test non riuscito:
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)
L'ultima riga della traccia dello stack mostra il test che non è riuscito (
testHelloWorld
). Questo test si trova in un file denominatoDevCodelabTest.java
.Per determinare la posizione del test da correggere, aggiungi
WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/
all'ultima riga dello stack trace fino al nome del file di test incluso. Quindi,android.test.example.devcodelab.DevCodelabTest
diventaWORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
.Modifica
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
e sostituisciAssert.assertTrue(false)
conAssert.assertTrue(true)
Esegui di nuovo il test per verificare di aver risolto il problema:
atest DevCodelabTest
Caricare il codice per la revisione
Repo semplifica l'utilizzo di Git raggruppando comandi come git clone
per lavorare
contemporaneamente su numerosi repository Git (o progetti).
Per la revisione del codice dei tuoi progetti in Git, utilizza il sistema di revisione del codice basato sul web Gerrit.
Supponendo che tu abbia apportato le modifiche nel progetto
frameworks/native
, esegui questi comandi per caricare le modifiche:cd frameworks/native
repo start codelab .
git add .
git commit
Per il messaggio di commit, inserisci quanto segue:
Android codelab change Test: manual atest
Carica la modifica:
repo upload
Se l'operazione riesce, viene visualizzato un messaggio simile a questo:
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
Visualizzare la modifica in Gerrit
Per visualizzare la modifica in Gerrit, vai al link di output nel terminale. Il link è simile al seguente:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Ripristinare la modifica
Normalmente, dopo i test e dopo la revisione e l'approvazione, invii la modifica in Gerrit e la unisci al repository. Ai fini di questo codelab, annulla il tuo lavoro:
In Gerrit, fai clic su Abbandona.
Abbandona il ramo temporaneo associato nella directory del progetto
frameworks/native
(o nelle relative sottodirectory):repo abandon codelab .
Ripristina le modifiche apportate al file di test. Poiché non hai eseguito
repo start
,git commit
erepo upload
sulla modifica di test, puoi reimpostare il file stesso. Supponendo che tu ti trovi inaosp/platform_testing directory
, utilizza il seguente comando per reimpostare il file:git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .
Con questo si conclude il codelab per lo sviluppo della piattaforma Android.
Ricevi assistenza
Se riscontri errori durante questo codelab, segnalali utilizzando il link Issue Tracker in fondo a qualsiasi pagina. Invia domande al gruppo android-building.
Digita ps -A | grep crosvm
per verificare se crosvm
è già in esecuzione. Se crossvm
è
in esecuzione, digita stop_cvd || true
o kill crosvm
con il PID del processo.