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 che lavora per una società, assicurati che la tua azienda abbia firmato il Contratto di licenza per i collaboratori aziendali che ti autorizza a fornire contributi per suo conto.
Creare un ramo
Per ogni modifica al codice che intendi apportare, svolgi i seguenti passaggi:
Avviare un nuovo ramo all'interno del repository Git pertinente. Un ramo non è una copia dei file originali, ma è 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.
Cerca 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 le 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 aree della piattaforma già scritte in Kotlin. Per ulteriori informazioni su Kotlin in Android, consulta la guida di stile di Kotlin per sviluppatori Android e la guida all'interoperabilità di 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 gestione temporanea ed esegui il commit o archiviali nel tuo 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. Segui il titolo con una riga vuota.
Riga 3: Testo. Fornisci una descrizione lunga con una lunghezza massima di 72 caratteri. Descrivi il problema risolto dalla modifica e come. Sebbene il corpo del messaggio sia facoltativo, è utile per gli altri utenti che devono fare riferimento al cambiamento. Assicurati di includere una breve nota di eventuali ipotesi o informazioni di base 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 tua cronologia Git personale, caricala su Gerrit:
Esegui il seguente comando per caricare tutti i commit in tutti i progetti:
repo upload
Tutte le modifiche in tutti i progetti sono incluse nel caricamento.
.Ti viene chiesto di eseguire script 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, quindi 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 apportate al codice devono essere esaminate dai proprietari del codice appropriati. Per richiedere una revisione:
In Gerrit, fai clic su SUGGERI PROPRIETARI:
Figura 1. Suggerisci link ai 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 tua recensione.
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 segno 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 una modifica.
Esegui questi comandi per modificare la modifica:
git add -A git commit --amend
Quando carichi la modifica modificata, sostituisce l'originale sia su Gerrit che nella tua 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.
Dopo aver unito i contenuti inviati, puoi visitare la dashboard Integrazione continua di Android per monitorare quando i contenuti inviati vengono integrati nella struttura ad albero.