Codelab per sviluppatori Android

Puoi contribuire allo sviluppo del sistema operativo più installato nella storia della Terra. Sì, sei qui per intraprendere il viaggio per diventare un platform engineer di Android.

Nonostante il percorso sia impegnativo, il team di Android si impegna a semplificare il tuo percorso a ogni release. Il team apporta miglioramenti ogni giorno tramite il lavoro diretto nell'Android Open Source Project.

Quindi siediti, accendi un terminale e facciamo la storia.

Obiettivi

La mission di questo codelab è duplice:

  1. per darti un piccolo assaggio del flusso di lavoro degli sviluppatori per gli ingegneri Android che lavorano sulla piattaforma (il sistema operativo).
  2. Ti invitiamo a fornire feedback sugli strumenti, sulla documentazione e sul flusso di lavoro per sviluppatori di Android.

Prerequisiti

L'elenco dei requisiti per questo codelab deriva da quelli per lo sviluppo generale della piattaforma (AOSP). Per seguire questo codelab, configura quanto segue:

Ambiente

In genere, gli utenti creano e sviluppano direttamente sulla workstation. Poiché potresti lavorare in vari terminali e molti dei comandi utilizzati sono specifici del terminale, dovrai eseguirli nuovamente in ogni sessione del terminale. Nello specifico, sono inclusi i comandi source build/envsetup.sh e lunch.

Configura workstation

  1. Installa i pacchetti necessari sulla tua workstation.
  2. Mentre sei ancora in un terminale, installa il repository e guadagna le credenziali in tutti i repository Git.

Inizializza e sincronizza il codice

  1. Passa alla tua home directory:

    cd ~
    
  2. Crea una sottodirectory di lavoro locale al suo interno:

    mkdir aosp
    
  3. Passa alla directory:

    cd aosp
    
  4. Inizializza il ramo principale del codice sorgente del repository AOSP (predefinito):

    repo init -u https://android.googlesource.com/platform/manifest
    
  5. Inserisci o accetta le tue credenziali Git (nome, indirizzo email).

  6. Sincronizza il codice sorgente:

    repo sync -j8
    

Le sincronizzazioni iniziali possono richiedere un'ora o più.

Ogni pagamento dei repository è rappresentato da un file manifest. È consentito avere più di un pagamento dei repository alla volta, purché esistano in directory distinte. Tuttavia, tieni presente che ogni pagamento e ogni build ammonta a circa 300 GB di utilizzo (in continuo aumento), quindi limita il pagamento a 2 repository o aumenta il sistema con un'unità secondaria.

Crea il codice

Per creare Android, devi selezionare un tipo di dispositivo target da creare con il comando lunch. Un target è una permutazione di dispositivo, ad esempio un modello o un fattore di forma specifico.

Il dispositivo di destinazione aosp_cf_x86_64_phone-userdebug consente di creare il dispositivo Android virtuale Cuttlefish per i test senza un dispositivo fisico.

Per creare e aggiornare un dispositivo fisico, scegli un altro target e segui le istruzioni per i dispositivi lampeggianti.

  1. Configura il tuo ambiente per la creazione di dispositivi Android eseguendo questo comando dalla directory radice del pagamento del codice sorgente:

    source build/envsetup.sh
    
  2. Passa il target di build al comando pranzo in questo modo:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
    
  3. Crea il codice da qualsiasi punto del tuo pagamento con:

    m
    

La prima build richiede ore. Le build successive richiedono molto meno tempo.

Lancia seppia

Cuttlefish è l'emulatore Android utilizzato per testare le build.

  1. Se non hai mai installato Cuttlefish, devi installare le dipendenze Cuttlefish necessarie. In una finestra del terminale, esegui questi comandi per scaricare, creare 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.

  2. Avvia seppia:

    launch_cvd --daemon
    
  3. Connettiti al dispositivo Cuttlefish andando su https://localhost:8443 nel tuo browser web. Viene visualizzato un video stream del dispositivo Android che hai appena realizzato.

Effettua una modifica

Aggiorna il codice sorgente seguendo questo esempio di elenco delle modifiche.

  1. Dalla directory principale del pagamento (directory aosp/), vai al progetto Git frameworks/native:

    cd frameworks/native
    
  2. Avvia un progetto temporaneo con questo comando:

    repo start <some-name> .
    
  3. Modifica SurfaceFlinger.cpp in modo da includere gli aggiornamenti dall'elenco delle modifiche nel seguente punto:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. Trova questa riga:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. Aggiungi queste due righe 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});
    
  6. Crea il codice:

    m
    
  7. Aggiorna la build sul dispositivo:

    adb root
    adb remount
    adb sync
    adb reboot
    

Verifica che sul dispositivo selezionato appaia un cambiamento di colore simile a quello mostrato nella Figura 1.

Esempio di una modifica di colore riuscita

Figura 1. Aspetto dello schermo dopo una corretta modifica del colore

Testa il codice

Questa parte del codelab utilizza un test di esempio che si trova nell'albero del codice sorgente e non funziona. che utilizza Atest per eseguire il test in locale e testare il codice.

Per utilizzare il test, segui queste istruzioni:

  1. Corsa:

    atest DevCodelabTest
    
  2. Il test avrà esito negativo. Per risolvere il problema, individua il codice sorgente del test non riuscito:

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
    
  3. Quindi guarda qui

    platform_testing/tests/example/devcodelab
    
  4. Per richiedere la modifica del file, prendi il nome del test in android.test.example.devcodelab.DevCodelabTest e sostituisci . con /, per ottenere questo risultato:

    src/android/test/example/devcodelab/DevCodelabTest.java
    
  5. Quindi modifica

    platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    

    per sostituire

    Assert.assertTrue(false)
    

    con

    Assert.assertTrue(true)
    
  6. Esegui di nuovo il test per verificare di aver risolto il problema:

    atest DevCodelabTest
    

Carica il codice per la revisione

Il repository semplifica l'utilizzo di Git raggruppando i comandi come git clone in modo che possano funzionare in numerosi repository (o progetti) Git contemporaneamente.

Consulta gli strumenti di controllo del codice sorgente per una panoramica di Git e repository, con link alla documentazione completa sull'utilizzo del codice sorgente di Android. Consulta il repository AOSP per l'elenco completo dei progetti Git e i singoli progetti (percorsi) per i rami associati a ogni progetto.

Per la revisione del codice dei progetti in Git, utilizzerai il sistema di revisione del codice basato sul web di Gerrit.

  1. Supponendo che tu abbia apportato le modifiche nel progetto frameworks/native, esegui questi comandi per caricarle:

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
    
  2. Inserisci quanto segue per il messaggio di commit:

    Android codelab change
    Test: manual atest
    
  3. Carica la modifica:

    repo upload
    

Se l'operazione è andata a buon fine, verrà visualizzato un messaggio simile a questo:

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

Visualizza la tua modifica in Gerrit

Vai al link, stampato nel terminale, simile a questo:

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

Qui si completa il codelab iniziale per lo sviluppo della piattaforma Android. Consulta Invio di patch per i passaggi successivi e, per i dettagli completi sullo sviluppo di Android, visita il resto di questo sito.

Ripristina la modifica

Di solito, dopo il test e in fase di revisione e approvazione, invii la modifica in Gerrit e la unisci al repository.

Ai fini di questo codelab, ripristina l'elenco modifiche facendo clic su Abbandona in Gerrit.

Abbandona il ramo temporaneo associato nella directory del progetto frameworks/native (o nelle sue sottodirectory):

repo abandon codelab .

Ricorda di ripristinare le modifiche apportate al file di test. Poiché non hai apportato tu la modifica repo start, git commit e repo upload, puoi reimpostare il file stesso. Supponendo che ti trovi nell'aosp/platform_testing directory, utilizza quanto segue per reimpostare il file:

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

A questo punto, hai finito. Ottimo!

Ricevere assistenza

Se si verificano errori durante questo codelab, segnalali utilizzando il link Issue Tracker nella parte inferiore di qualsiasi pagina. Invia domande al gruppo di android-building.