这页介绍全部提交一个补丁到 AOSP 的过程,包括检阅和追踪改变用 Gerrit。
你先跟着这页的介绍,你将需要建立你的本地工作环境和获取 Android 源文件,介绍跟着"获得开始" 部分,这里。
关于 Repo 和 Git 的细节,看版本控制。
关于不同角色的信息,你能在 Android 开源社区内发挥,看工程角色。
假如你计划贡献代码到 Android 平台,确认读了 AOSP 的授权信息。
注意,改变一些上游工程使用 Android 应该直接被制造到这个工程,描述在上游工程。
你能上传到 Gerrit 前,你需要建立一个密码,将标识你用这服务。你仅仅需要做这一次。
登录在AOSP Gerrit 服务。
转到 Settings -> HTTP Password -> Obtain Password
跟着随后(译者注:原为subsquent)页的介绍,和复制粘贴你的密码到 ~/.netrc
里,假如这些是两个密码行,复制两个。
每个改变你打算制作,开始一个新分支用有关 git 知识库:
$ repo start NAME .
你能开始几个独立分支在相同时间在相同知识库。分支 NAME 是在本地的你的工作空间和将不被包括 gerrit 或最后的源树。
一旦你修改源文件(请同时验证它们)保证改变到你的本地知识库:
$ git add -A
$ git commit -s
提供一个细节描述这个改变在你的承诺信息。这个描述将被推到公共 AOSP 知识库,所以请跟着我们的指引写改变明细表描述:
开始于一行总结(最大 60 个字符),接着一个空行。这个格式是用于 git 和 gerrit 各个显示。
short description on first line
more detailed description of your patch,
which is likely to take up multiple lines.
描述将聚焦在它解决什么问题,和如何解决。第二部分是有些可选的当实施新特性,通过可取的。
包括一个简短的任何假设或背景信息的笔记,可能是重要的,当另一个贡献者这个特征下一年。
一个独特的改变 ID 和你的名字和 email 作为提供 repo init
期间将被自动添加你的承诺信息。
一旦你承诺你的改变你私人历史,上传它到 gerrit 用
$ repo upload
假如你开始多个分支在相同的知识库,你将被提示选择上传哪些。
一个成功的上传只有,repo 将提供你一个 Gerrit 新页面的 URL。访问这个链接浏览你的补丁在评论服务器,添加评论,或要求具体评论者为你的补丁。
支持一个评论这看你的补丁和要求一个小修改。你能修改你的承诺用 git,将导致一个新包 gerrit 上有相同的改变 ID 作为原文。
注意,假如你使其它承诺自从上传这个补丁,你将需要手动移动你的 git HEAD。
$ git add -A
$ git commit --amend
当你上传修改补丁,他将替换原本在 gerrit 上和在你的本地 git 历史。
假如其它补丁是提交到源树,和你的冲突,你将需要 rebase 你的补丁在源知识库新 HEAD 顶部。简单的方法做这是运行
$ repo sync
这命令首先取更新从源服务器,然后企图自动 rebase 你的 HEAD 到新的远程 HEAD。
假如自动 rebase 是不成共,你将不得不实施一个手工 rebase。
$ git rebase master
用 git mergetool
可能帮助你处理 rebase 冲突,一旦你成功合并冲突文件,
$ git rebase --continue
自动或手工 rebase 两者之一成功后,运行 repo upload
提交你的 rebased 补丁。
一个提交使他通过评论和校验过程后,Gerrit 自动合并改变到公共知识库。其它用户将能运行 repo sync
拉这更新到他们的本地客户端。
假如你被分配成一个改变的批准者,你需要确定下面的:
这个改变适合这工程的声明目的?
这个改变是有效的在这个工程的存在的架构?
这个改变介绍设计缺陷将导致问题在将来?
这个改变跟着最好的做法已经既定到这个工程?
这个改变是一个好的方法实施描述的功能?
这个改变是描述一个安全或不稳定风险?
假如你批准这改变,标记它用 LGTM ("我看好")用 Gerrit。
假如你被分配为一个改变的校验者,你需要做下面的:
打补丁这个改变到你的本地客户端用一个下载命令。
构建和测试这改变。
用 Gerrit 使用公共评论标记这承诺作为"已校验"或"失败",并且添加一个信息解释问题为什么是确定的。
一个已经被校验和合并的提交经被吓在用 nextrepo sync
。假如你希望下载一个具体但不被批准的改变,运行
$ repo download TARGET CHANGE
TARGET 是改变应该被下载到的本地目录和 CHANGE 是改变号在 Gerrit 里的表。更多信息,看Repo 参考。
简短讲,贡献高品质代码到一个或多个 Android 工程,细节关于不同角色在 Android 开源社区和饰演他们,看工程角色。
打开改变的细节用 Gerrit,点击一个改变的"Id 号"或"主题"。比较既定代码用更新代码,点击"Side-by-side 差异"下的文件名。
社区里的任何人能用 Gerrit 添加内联评论到代码提交。一个好的评论将被应用到行或部分代码,它是附在 Gerrit。它可能是一个短的和建设性的建议,关于一行代码可以如何被改善,或它可以是一个解释从作者关于这样的方法代码为什么有意义。
添加内联评论,双击代码有关的行和写你的评论在打开的文本框。当你点击保存,仅仅你能看到你的评论。
发布你的评论以便其他人用 Gerrit 将能看它们,点击发布评论按钮。你的评论将被电子邮件发到这个改变所有有关的各方,包括改变的拥有者,补丁设置上传(假如不同于拥有者),并且所有当前评论者。
Android 利用一些其它的开源工程,例如 Linux 内核和 WebKit,描述在分支和发布。多数工程在 external/
下。改变应该被上游制作和然后 Android 维护者通知新的上游发布包含这些改变。上传补丁也可以是有用的,移动我们追踪一个新的上游发布,虽然制作改变是困难的,假如工程是广泛的用在 Android 像大多数较大的下面提到的一些。
一个有趣的特别的情况是仿生。许多代码来自 BSD,所以除非改变是编写新的仿生,我们将比较多的看一个上游修理和然后拉到一个全新文件从适当的 BSD。(可悲的是我们有相当一个混合不同的 BSD 在此刻,但是我们希望讲话在未来,和进入一个位置,我们追踪上游更密切。)
所有的改变 ICU4C 工程在 external/icu4c
应该被制作由上游在 icu-project.org/。更多看提交 ICU Bugs 和需要的特征。
所有的改变 OpenSSL 工程在 external/openssl
应该被制作由上游在 openssl.org。
所有的改变 V8 工程在 external/v8
应该被制作由上游在 code.google.com/p/v8。。细节看 贡献到 V8。
所有的改变 WebKit 工程在 external/webkit
应该被制作由上游在 webkit.org。过程开首先备案一个 WebKit bug。这个 bug 应该用于 Android
平台
和 OS
领域,仅仅假如 bug 是具体的 Android。Bug 更有可能接收评论者的注意,一旦一个建议修理被添加和测试被包含。细节看 贡献代码到 WebKit。
所有的改变 zlib 工程在 external/zlib
应该被制作由上游在 zlib.net。