Auf dieser Seite wird der vollständige Prozess zum Senden einer Codeänderung an das Android Open Source Project (AOSP) beschrieben. Außerdem wird beschrieben, wie Sie eine Überprüfung beantragen und Ihre Änderungen nachverfolgen können.
AOSP stützt sich auf ein Gerrit, ein webbasiertes Codeüberprüfungssystem für Projekte, die Git verwenden.
Lizenzvereinbarungen für Mitwirkende unterzeichnen
Bevor Sie Codeänderungen für AOSP beitragen, müssen Sie die Lizenzvereinbarungen und Header für Contributor lesen und eine der folgenden Vereinbarungen unterzeichnen:
- Wenn Sie als einzelner Beitragender nur in Ihrem Namen Beiträge leisten, müssen Sie die Lizenzvereinbarung für Beitragende unterzeichnen.
- Als Mitarbeiter eines Unternehmens muss dein Unternehmen die Lizenzvereinbarung für Corporate Contributor unterzeichnet haben, damit du in seinem Namen Spenden leisten darfst.
Zweig starten
Führen Sie für jede Codeänderung, die Sie vornehmen möchten, die folgenden Schritte aus:
Starten Sie einen neuen Zweig im relevanten Git-Repository. Ein Zweig ist keine Kopie der Originaldateien. Er ist ein Zeiger auf einen bestimmten Commit, was das Erstellen lokaler Zweige und das Wechseln zwischen ihnen zu einem einfachen Vorgang macht. Durch die Verwendung von Zweigen können Sie Änderungen voneinander identifizieren. Führen Sie den folgenden Befehl aus, um einen Zweig zu starten:
repo start BRANCH_NAME
Sie können im selben Repository mehrere unabhängige Zweige gleichzeitig starten. Der Zweig BRANCH_NAME ist lokal in Ihrem Arbeitsbereich und ist weder auf Gerrit noch in der endgültigen Quellstruktur enthalten. Zweige sind auch projektspezifisch. Wenn Sie also im Rahmen derselben Änderung Dateien in verschiedenen Projekten ändern müssen, benötigen Sie in jedem Projekt, in dem Sie Dateien ändern, einen Zweig.
(Optional) Prüfen Sie, ob der Zweig erstellt wurde:
repo status .
Der neu erstellte Zweig sollte angezeigt werden. Beispiel:
project frameworks/native/ branch mynewbranch
Änderungen vornehmen und testen
Führen Sie die folgenden Schritte aus, um Ihre Änderung vorzunehmen und zu testen:
Führen Sie eine Synchronisierung der gesamten Codebasis durch, um sicherzustellen, dass Sie mit der neuesten Codebasis arbeiten:
repo sync
Falls während der Synchronisierung Konflikte auftreten, lesen Sie die Schritte 2 bis 4 unter Synchronisierungskonflikte lösen.
Suchen Sie den Code, den Sie ändern möchten. Sie können die Android Code Search verwenden, um Code zu finden. Mit der Android Codesuche können Sie sich den AOSP-Quellcode ansehen, wie er bei der tatsächlichen Verwendung dargestellt wird. Weitere Informationen finden Sie unter Erste Schritte bei der Codesuche. Wenn Sie den gesamten Code im
main
-Branch innerhalb der Android-Codesuche ansehen möchten, rufen Siehttps://cs.android.com/android/platform/superproject/main
auf.Ändern oder fügen Sie Quelldateien hinzu. Gehen Sie für alle vorgenommenen Änderungen wie folgt vor:
- Folgen Sie den Best Practices unter Lizenz-Header hinzufügen.
Halte dich beim Java-Code an den AOSP-Java-Codestil für Beitragende.
Einige Teile von AOSP sind in Kotlin (
.kt
) geschrieben. Sie können Kotlin in Bereichen der Plattform verwenden, die bereits in Kotlin geschrieben wurden. Weitere Informationen zu Kotlin unter Android finden Sie im Kotlin-Styleguide für Android-Entwickler und im Kotlin-Java-Interoperabilitätsleitfaden. Ausführlichere Informationen zu Kotlin finden Sie auf der Kotlin-Website.Beachten Sie beim Schreiben von APIs die Android API-Richtlinien. In diesen Richtlinien erfahren Sie mehr über den Kontext der API-Entscheidungen von Android. Hinzugefügte und geänderte Plattform-APIs werden von Metalava überprüft.
Änderung bereitstellen und per Commit bestätigen
Ein Commit ist die Grundeinheit der Versionsverwaltung in Git und besteht aus einem Snapshot der Verzeichnisstruktur und der Dateiinhalte für das gesamte Projekt. Führen Sie die folgenden Schritte aus, um die Änderung zu übernehmen:
Standardmäßig registriert Git die von Ihnen vorgenommenen Änderungen jedoch nicht. Um Git anzuweisen, Ihre Änderungen nachzuverfolgen, müssen Sie diese Änderungen markieren oder stufen, damit sie in einen Commit aufgenommen werden. Führen Sie den folgenden Befehl aus, um die Änderung bereitzustellen:
git add -A
Dieser Befehl verfolgt Änderungen, die Sie an Dateien vorgenommen haben.
Führen Sie für die Dateien im Staging-Bereich einen Commit durch oder speichern Sie sie in Ihrer lokalen Datenbank:
git commit -s
Standardmäßig wird ein Texteditor geöffnet und Sie werden aufgefordert, eine Commit-Nachricht anzugeben.
Geben Sie eine Commit-Nachricht im folgenden Format an:
Zeile 1: Überschrift. Geben Sie eine einzeilige Zusammenfassung der Änderung ein (maximal 50 Zeichen). Verwenden Sie Präfixe, um den geänderten Bereich zu beschreiben, gefolgt von einer Beschreibung der Änderung, die Sie in diesem Commit vorgenommen haben, wie im folgenden Beispiel mit einer Änderung der Benutzeroberfläche:
ui: Removes deprecated widget
Zeile 2: Leerzeile. Folgen Sie dem Anzeigentitel mit einer Leerzeile.
Zeile 3: Text. Geben Sie eine lange Beschreibung an, die mit maximal 72 Zeichen umgebrochen wird. Beschreiben Sie, welches Problem durch die Änderung behoben wird und wie. Obwohl der Text optional ist, ist er für andere hilfreich, die sich auf die Änderung beziehen müssen. Geben Sie unbedingt kurz alle Annahmen oder Hintergrundinformationen an, die wichtig sein könnten, wenn ein anderer Mitwirkender an dieser Funktion arbeitet.
Einen Blog über gute Commit-Beschreibungen (mit Beispielen) finden Sie unter So schreiben Sie eine Git-Commit-Nachricht.
Speichern Sie das Commit.
Eine eindeutige Änderungs-ID sowie Ihr Name und Ihre E-Mail-Adresse, die während repo init
angegeben wurden, werden Ihrer Commit-Nachricht automatisch hinzugefügt.
Änderung zur Überprüfung hochladen
Nachdem Sie Ihre Änderung in Ihrem persönlichen Git-Verlauf gespeichert haben, laden Sie sie in Gerrit hoch:
Führen Sie den folgenden Befehl aus, um alle Commits in alle Ihre Projekte hochzuladen:
repo upload
Alle Änderungen in allen Projekten werden in den Upload einbezogen.
Sie werden aufgefordert, Hook-Skripts auszuführen.
Drücken Sie A und dann die Eingabetaste.
Sie werden aufgefordert, den Upload zu genehmigen:
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)?
Drücken Sie Y und dann die Eingabetaste, um den Upload zu genehmigen.
Sie sollten eine Nachricht wie diese erhalten: remote: SUCCESS
.
Überprüfung beantragen
Nach einem erfolgreichen Upload erhalten Sie von Repo einen Link zu Ihren Änderungen in Gerrit. Klicken Sie auf den Link, um Ihre Änderungen auf dem Überprüfungsserver anzusehen, Kommentare hinzuzufügen oder bestimmte Prüfer für Ihre Änderung anzufordern. Alle Änderungen am Code müssen von den entsprechenden Codeinhabern überprüft werden. So beantragen Sie eine Überprüfung:
Klicke in Gerrit auf EIGENTUMSRECHTE VORSCHLAGEN:
Abbildung 1: Link „Inhaber vorschlagen“ in Gerrit.
Das Dialogfeld für Prüfer wird angezeigt. Dieses Dialogfeld enthält eine Liste der Codeinhaber, die Ihre Änderung prüfen können.
Klicken Sie auf einen Codeinhaber, um ihn Ihrer Rezension hinzuzufügen.
Die Schaltfläche SEND (Senden) ist aktiviert.
Optional: Geben Sie die E-Mail-Adressen aller anderen ein, deren Änderung Sie prüfen möchten.
Optional: Klicken Sie neben „Automatisch senden“ auf +1, um die Änderung automatisch einzureichen, nachdem Sie die Genehmigungen erhalten haben. Wenn Sie nicht auf diese Schaltfläche klicken, muss ein Google-Mitarbeiter Ihre Änderung für Sie einreichen.
Klicke auf SENDEN, um die Änderung zur Überprüfung zu senden.
Codeinhaber prüfen Ihre Codeänderungen und geben Ihnen entweder Feedback, damit Sie die Änderungen korrigieren oder genehmigen können.
Bestimmen des Änderungsstatus
Prüfen Sie, ob die folgenden Symbole neben den Dateien in der Änderung angezeigt werden, um den Status der Dateien in Ihrer Änderung zu ermitteln:
- (Häkchensymbol): Vom Codeinhaber genehmigt
- (Kreuzsymbol): Nicht vom Codeinhaber genehmigt
- (Uhrensymbol): Genehmigung durch Codeinhaber ausstehend
Die folgende Abbildung zeigt diese Statussymbole, die auf Dateien in einer Änderung angewendet werden:
Abbildung 2: Beispiel für Dateien mit Symbolen, die die Genehmigung des Codeinhabers anzeigen
Feedback klären und Ersatzänderung hochladen
Wenn ein Prüfer eine Änderung an Ihrem Update anfordert, können Sie Ihren Commit in Git ändern. Dies führt zu einem neuen Patchset für dieselbe Änderung.
So klären Sie das Feedback und ändern Ihre Änderung:
Führen Sie die Schritte 2 bis 4 unter Änderung vornehmen und testen aus.
Führen Sie die folgenden Befehle aus, um Ihre Änderung zu ändern:
git add -A git commit --amend
Wenn Sie die geänderte Änderung hochladen, ersetzt sie das Original sowohl auf Gerrit als auch in Ihrem lokalen Git-Verlauf.
Synchronisierungskonflikte lösen
Wenn andere Änderungen an die Quellstruktur gesendet werden, die mit Ihren in Konflikt stehen, erhalten Sie eine Meldung, dass Konflikte vorliegen. So lösen Sie die Konflikte:
Achten Sie darauf, mit dem aktuellen Code zu arbeiten:
repo sync .
Der Befehl
repo sync
ruft die Updates vom Quellserver ab und versucht dann,HEAD
automatisch auf dem neuen Remote-HEAD
zu erstellen.Wenn die automatische Rebase nicht erfolgreich ist, führen Sie eine manuelle Rebase durch:
repo rebase .
Zusammenführungskonflikte lösen Wenn Sie keine bevorzugte Methode zum Lösen von Zusammenführungskonflikten haben, können Sie
git mergetool
verwenden, um Konflikte zwischen Dateien manuell zu beheben.Wenn Sie die in Konflikt stehenden Dateien erfolgreich korrigiert haben, führen Sie den folgenden Befehl aus, um die neuen Commits anzuwenden:
git rebase --continue
Änderung senden
Nachdem eine Einreichung den Überprüfungs- und Bestätigungsprozess durchlaufen hat, muss ein Google-Prüfer den Code für Sie einreichen. Andere Nutzer können repo sync
ausführen, um das Update in ihre jeweiligen lokalen Clients abzurufen.
Nachdem die Einreichungen zusammengeführt wurden, können Sie im Dashboard von Android Continuous Integration nachsehen, ob Ihre Einreichungen in die Baumstruktur integriert sind.