本页介绍了向 Android 开源项目 (AOSP) 提交代码变更的完整流程,包括如何请求审核和跟踪您的变更。
AOSP 依赖于 Gerrit,这是一个基于 Web 的代码审核系统,适用于使用 Git 的项目。
签署贡献者许可协议
在为 AOSP 贡献任何代码变更之前,您必须阅读贡献者许可协议和标头,并签署以下协议之一
启动分支
对于您打算进行的每个代码变更,请执行以下步骤
在相关的 Git 代码库中启动新分支。分支不是原始文件的副本;它是一个指向特定提交的指针,这使得创建本地分支和在分支之间切换成为一种轻量级操作。通过使用分支,您可以区分彼此的变更。运行此命令以启动分支
repo start BRANCH_NAME
您可以同时在同一代码库中启动多个独立的分支。BRANCH_NAME 分支是您工作区的本地分支,既不包含在 Gerrit 中,也不包含在最终源代码树中。分支也特定于您所在的项目,因此,如果您需要更改不同项目中的文件作为同一变更的一部分,则需要在每个您更改文件的项目中创建一个分支。
(可选)验证分支是否已创建
repo status .
您应该会看到您新创建的分支。例如
project frameworks/native/ branch mynewbranch
进行并测试您的变更
按照以下步骤进行并测试您的变更
为确保您正在使用最新的代码库,请对整个代码库执行同步
repo sync
如果您在同步期间遇到任何冲突,请参阅解决同步冲突的步骤 2-4。
查找要更改的代码。要查找代码,请考虑使用Android 代码搜索。您可以使用 Android 代码搜索来查看 AOSP 源代码,就像您实际使用它时一样布局。如需了解详情,请参阅Code Search 使用入门。要查看 Android 代码搜索中
main
分支中的所有代码,请转到https://cs.android.com/android/platform/superproject/main
。修改或添加源文件。对于所做的任何更改
确定您是否需要使用功能启动标记,如果需要,请为您的新代码实现它们。
遵循包含许可标头中的最佳实践。
对于 Java 代码,请遵循贡献者的 AOSP Java 代码样式。
AOSP 的某些部分是用 Kotlin (
.kt
) 编写的,您可以在平台上已用 Kotlin 编写的区域中使用 Kotlin。如需详细了解 Android 中的 Kotlin,请参阅 Android 开发者Kotlin 样式指南和Kotlin-Java 互操作指南。如需更全面的 Kotlin 指导,请参阅Kotlin 语言网站。编写 API 时,请遵循Android API 指南。使用这些指南来了解 Android API 决策背后的背景信息。平台 API 的添加和修改由 Metalava 验证。
暂存并提交您的变更
提交是 Git 中修订控制的基本单位,它包含整个项目的目录结构和文件内容的快照。按照以下步骤提交您的变更
默认情况下,Git 会注册但不跟踪您所做的变更。要指示 Git 跟踪您的变更,您必须标记或暂存这些变更以包含在提交中。运行此命令以暂存变更
git add -A
此命令会跟踪您对任何文件所做的变更。
获取暂存区域中的文件,并将它们提交或存储在您的本地数据库中
git commit -s
默认情况下,会打开一个文本编辑器,并提示您提供提交消息。
以以下格式提供提交消息
第 1 行:标题。提供变更的单行摘要(最多 50 个字符)。考虑使用前缀来描述您更改的区域,后跟对此提交中所做变更的描述,例如以下包含用户界面变更的示例
ui: Removes deprecated widget
第 2 行:空行。在标题后跟一个空行。
第 3 行:正文。提供一个长描述,最大硬换行长度为 72 个字符。描述变更解决了什么问题以及如何解决。尽管正文是可选的,但对于需要回过头来参考变更的其他人来说,它很有帮助。请务必简要说明任何假设或背景信息,这些信息在其他贡献者处理此功能时可能很重要。
要阅读有关优秀提交描述的博客(附带示例),请参阅如何编写 Git 提交消息。
保存提交。
在 repo init
期间提供的唯一变更 ID 以及您的姓名和电子邮件会自动添加到您的提交消息中。
上传变更以供审核
将您的变更提交到您的个人 Git 历史记录后,将其上传到 Gerrit
运行以下命令以上传所有项目中的所有提交
repo upload
所有项目中的所有变更都包含在上传中。
系统会提示您运行 Hook 脚本。
按 a,然后按 Enter。
系统会提示您批准上传
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)?
按 y,然后按 Enter 以批准上传。
您应该会收到类似于 remote: SUCCESS
的消息。
请求审核
成功上传后,Repo 会为您提供指向 Gerrit 中变更的链接。点击该链接以在审核服务器上查看您的变更、添加评论或为您的变更请求特定审核者。对代码的所有变更都必须由相应的代码所有者审核。
要请求审核
在 Gerrit 中,点击建议所有者
图 1. Gerrit 中的“建议所有者”链接。
审核者对话框随即出现。此对话框包含可以审核您的变更的代码所有者列表。
点击代码所有者以将其添加到您的审核中。
发送按钮已激活。
(可选)输入您希望审核您的变更的任何其他人的电子邮件地址。
(可选)点击“自动提交”旁边的 +1 以在您收到批准后自动提交变更。如果您不点击此按钮,则需要 Google 员工为您提交变更。
点击发送以发送变更以供审核。
代码所有者审核您的代码变更,并提供反馈供您解决或批准变更。
确定变更状态
要确定您的变更中文件的状态,请查看变更中文件旁边的以下图标
- (对勾图标):已获得代码所有者批准
- (叉号图标):未获得代码所有者批准
- (时钟图标):等待代码所有者批准
下图显示了应用于变更中文件的这些状态图标
图 2. 显示代码所有者批准的图标的文件示例。
解决反馈并上传替换变更
如果审核者请求修改您的更新,您可以在 Git 中修改您的提交,这会在同一变更中生成新的补丁集。
要解决反馈并修改您的变更
当您上传修改后的变更时,它会在 Gerrit 和您的本地 Git 历史记录中替换原始变更。
解决同步冲突
如果其他变更已提交到源代码树,并且与您的变更冲突,您会收到一条消息,指出您有冲突。要解决冲突
确保您正在使用最新的代码
repo sync .
repo sync
命令从源服务器获取更新,然后尝试自动将您的HEAD
变基到新的远程HEAD
。如果自动变基不成功,请执行手动变基
repo rebase .
解决合并冲突。如果您没有解决合并冲突的首选方法,可以使用
git mergetool
手动修复文件之间的冲突。当您成功修复冲突文件后,运行此命令以应用新的提交
git rebase --continue
提交变更
提交通过审核和验证流程后,Google 审核者必须为您提交代码。其他用户可以运行 repo sync
以将更新拉取到他们各自的本地客户端。
合并您的提交后,您可以访问Android 持续集成信息中心,以监控您的提交何时集成到代码树中。