Questa pagina descrive la procedura completa per inviare una modifica del codice all'Android Open Source Project (AOSP), inclusa la richiesta di revisione e il monitoraggio delle modifiche.
AOSP si basa su Gerrit, un sistema di revisione del codice basato sul web per i progetti che utilizzano Git.
Firmare i contratti di licenza dei collaboratori
Prima di apportare modifiche al codice per AOSP, devi leggere i contratti di licenza e le intestazioni dei collaboratori e firmare uno dei seguenti contratti:
- In qualità di collaboratore privato che apporta contributi solo per tuo conto, firma il Contratto di licenza per i collaboratori privati.
- In qualità di dipendente di un'azienda, assicurati che la tua azienda abbia firmato il Contratto di licenza per i collaboratori aziendali autorizzandoti a fornire contributi per suo conto.
Avvia un ramo
Per ogni modifica al codice che intendi apportare, svolgi i seguenti passaggi:
Avvia un nuovo ramo nel repository Git pertinente. Un ramo non è una copia degli originali; è un puntatore a un commit specifico, il che rende la creazione di rami locali e il passaggio da uno all'altro un'operazione leggera. Con l'utilizzo dei rami, puoi identificare le modifiche rispetto a un altro ramo. Esegui questo comando per avviare un ramo:
repo start BRANCH_NAME
Puoi avviare più branch indipendenti contemporaneamente nello stesso repository. Il ramo BRANCH_NAME è locale per il tuo workspace e non è incluso in Gerrit o nella struttura ad albero delle origini finale. I branch sono specifici anche per il progetto in cui ti trovi, quindi se devi modificare i file in progetti diversi nell'ambito della stessa modifica, dovrai avere un branch in ogni progetto in cui modifichi i file.
(Facoltativo) Verifica che il ramo sia stato creato:
repo status .
Dovresti vedere il ramo appena creato. Ad esempio:
project frameworks/native/ branch mynewbranch
Apporta e testa la modifica
Per apportare e testare la modifica:
Per assicurarti di utilizzare il codice di base più recente, esegui una sincronizzazione dell'intero codice di base:
repo sync
Se si verificano conflitti durante la sincronizzazione, consulta i passaggi 2-4 di Risolvere i conflitti di sincronizzazione.
Trova il codice da modificare. Per trovare il codice, ti consigliamo di utilizzare Android Code Search. Puoi utilizzare la ricerca di codice Android per visualizzare il codice sorgente di AOSP così come è strutturato quando lo utilizzi effettivamente. Per ulteriori informazioni, consulta la guida introduttiva all'utilizzo di Ricerca codice. Per visualizzare tutto il codice nel ramo
main
nella ricerca del codice Android, vai ahttps://cs.android.com/android/platform/superproject/main
.Modificare o aggiungere file di origine. Per eventuali modifiche apportate:
Determina se devi utilizzare i flag di lancio delle funzionalità e, in caso affermativo, implementali per il nuovo codice.
Segui le best practice descritte in Includi intestazioni della licenza.
Per il codice Java, segui lo stile di codice Java AOSP per i collaboratori.
Alcune parti di AOSP sono scritte in Kotlin (
.kt
) e puoi utilizzare Kotlin nelle parti della piattaforma già scritte in Kotlin. Per ulteriori informazioni su Kotlin in Android, consulta la guida allo stile Kotlin per gli sviluppatori Android e la guida all'interoperabilità Kotlin-Java. Per indicazioni più dettagliate su Kotlin, consulta il sito del linguaggio Kotlin.Quando scrivi API, segui le linee guida per le API Android. Utilizza queste linee guida per comprendere il contesto alla base delle decisioni relative alle API di Android. Le aggiunte e le modifiche delle API di piattaforma vengono convalidate da Metalava.
Esegui il commit e inserisci la modifica nella fase
Un commit è l'unità di base del controllo delle revisioni in Git e consiste in un scatto della struttura della directory e dei contenuti dei file per l'intero progetto. Per eseguire il commit della modifica:
Per impostazione predefinita, Git registra, ma non monitora le modifiche apportate. Per indicare a Git di monitorare le modifiche, devi contrassegnarle o inserirle in una fase per includerle in un commit. Esegui questo comando per eseguire la gestione delle modifiche:
git add -A
Questo comando monitora le modifiche apportate a qualsiasi file.
Prendi i file nell'area di staging e esegui il commit o archiviali nel database locale:
git commit -s
Per impostazione predefinita, si apre un editor di testo e ti viene chiesto di fornire un messaggio di commit.
Fornisci un messaggio di commit nel seguente formato:
Riga 1: titolo. Fornisci un riepilogo di una riga della modifica (massimo 50 caratteri). Valuta la possibilità di utilizzare i prefissi per descrivere l'area modificata, seguita da una descrizione della modifica apportata in questo commit, ad esempio l'esempio seguente contenente una modifica all'interfaccia utente:
ui: Removes deprecated widget
Riga 2: riga vuota. Inserisci una riga vuota dopo il titolo.
Riga 3: Testo. Fornisci una descrizione lunga che si inserisce a capo automaticamente al massimo dopo 72 caratteri. Descrivi il problema risolto dalla modifica e come. Anche se il corpo è facoltativo, è utile per gli altri utenti che devono fare riferimento alla modifica. Assicurati di includere una breve nota su eventuali presupposti o informazioni di contesto che potrebbero essere importanti quando un altro collaboratore lavora a questa funzionalità.
Per leggere un blog sulle descrizioni dei commit efficaci (con esempi), consulta Come scrivere un messaggio di commit Git.
Salva il commit.
Un ID modifica univoco e il tuo nome e indirizzo email, forniti durante repo init
, vengono aggiunti automaticamente al messaggio del commit.
Carica la modifica per la revisione
Dopo aver eseguito il commit della modifica nella cronologia Git personale, caricala su Gerrit:
Esegui il seguente comando per caricare tutti i commit in tutti i progetti:
repo upload
Nel caricamento sono incluse tutte le modifiche in tutti i progetti.
Ti viene chiesto di eseguire script di hook.
Premi A, quindi Invio.
Ti viene chiesto di approvare il caricamento:
Upload project frameworks/native/ to remote branch main: branch BRANCH_NAME ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android codelab change to https://android-review.googlesource.com/ (y/N)?
Premi y e poi Invio per approvare il caricamento.
Dovresti ricevere un messaggio simile a remote: SUCCESS
.
Richiedi una revisione
Dopo un caricamento riuscito, Repo ti fornisce un link alle modifiche in Gerrit. Fai clic sul link per visualizzare le modifiche sul server di revisione, aggiungere commenti o richiedere revisori specifici per la modifica. Tutte le modifiche al codice devono essere esaminate dai proprietari del codice appropriati. Per richiedere una revisione:
In Gerrit, fai clic su SUGGERI PROPRIETARI:
Figura 1. Suggerisci il link dei proprietari in Gerrit.
Viene visualizzata la finestra di dialogo del revisore. Questa finestra di dialogo contiene un elenco di proprietari di codice che possono esaminare la modifica.
Fai clic su un proprietario del codice per aggiungerlo alla revisione.
Il pulsante INVIA è attivo.
(Facoltativo) Digita l'indirizzo email di altre persone che vuoi che esaminino la modifica.
(Facoltativo) Fai clic su +1 accanto a Invio automatico per inviare automaticamente la modifica dopo aver ricevuto le approvazioni. Se non fai clic su questo pulsante, un impiegato di Google dovrà inviare la modifica per tuo conto.
Fai clic su INVIA per inviare la modifica per la revisione.
I proprietari del codice esaminano le modifiche al codice e forniscono un feedback per consentirti di risolvere o approvare le modifiche.
Determinare lo stato della modifica
Per determinare lo stato dei file nella modifica, controlla le seguenti icone accanto ai file nella modifica:
- (icona di spunta): approvato dal proprietario del codice
- (icona a forma di croce): non approvato dal proprietario del codice
- (icona della sveglia): in attesa di approvazione da parte del proprietario del codice
La figura seguente mostra queste icone di stato applicate ai file in una modifica:
Figura 2. Esempio di file con icone che mostrano l'approvazione del proprietario del codice.
Risolvere il feedback e caricare una modifica sostitutiva
Se un revisore richiede una modifica all'aggiornamento, puoi emendare il commit in Git, il che genera un nuovo set di patch per la stessa modifica.
Per risolvere il feedback e modificare la modifica:
Segui i passaggi 2-4 descritti in Apportare e testare la modifica.
Esegui i seguenti comandi per modificare la modifica:
git add -A git commit --amend
Quando carichi la modifica modificata, questa sostituisce quella originale sia su Gerrit sia nella cronologia Git locale.
Risolvere i conflitti di sincronizzazione
Se vengono inviate altre modifiche all'albero di origine in conflitto con le tue, riceverai un messaggio che ti informa della presenza di conflitti. Per risolvere i conflitti:
Assicurati di utilizzare il codice più recente:
repo sync .
Il comando
repo sync
recupera gli aggiornamenti dal server di origine, quindi tenta di eseguire automaticamente il rebase delHEAD
sul nuovoHEAD
remoto.Se il ricoinvolgimento automatico non va a buon fine, esegui un ricoinvolgimento manuale:
repo rebase .
Risolvi i conflitti di unione. Se non hai un metodo preferito per risolvere i conflitti di unione, puoi utilizzare
git mergetool
per correggere manualmente i conflitti tra i file.Dopo aver corretto i file in conflitto, esegui questo comando per applicare i nuovi commit:
git rebase --continue
Invia modifica
Dopo che un invio ha superato la procedura di revisione e verifica, un revisore di Google deve inviare il codice per tuo conto. Gli altri
utenti possono eseguire repo sync
per scaricare l'aggiornamento nei rispettivi
client locali.
Una volta unito il tuo invio, puoi visitare la dashboard Integrazione continua di Android per monitorare quando i tuoi invii vengono integrati nell'albero.