Google在提交Android补丁程序时有说明前提条件:

提交补丁程序

本页介绍向 AOSP 提交补丁程序的完整流程,包括使用 Gerrit 查看和跟踪更改。

前提条件

您需要先初始化编译环境下载源代码创建密码并按照密码生成器页面中的说明操作,然后再按照本页中的说明操作。

编译环境要使用Linux或Mac OS,目前不支持在Windows下编译。下载源代码没有提及具体操作系统,只提了repo工具。进入创建密码页面竟然有脚本命令支持Windows user,说明Windows上可以提交patch?只是Google没有正面说而已。

现在有的在Win上办公,Linux服务器编译用无上网权限,有FQ网络。那么随之而来的需求就是能不能在Windows下提交补丁,不用虚拟Linux, 而且仅仅下载需要的project了?答案是肯定的,来看下具体流程。

安装repo for Windows

下载地址:https://github.com/esrlabs/git-repo

安装git for Windows

官方下载慢,taobao mirror下载较快:http://npm.taobao.org/mirrors/git-for-windows/

我装的版本:

$ git version
git version 2.17.1.windows.2

git版本过高后面repo init可能会报gpg错误。

安装python for Windows

装python 2.7,全部装好后:

$ repo version
repo version v0.4.20
       (from https://github.com/esrlabs/git-repo)
repo launcher version 1.25
       (from D:\prj\Tools\git-repo-stable\repo)
git version 2.17.1.windows.2
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)]

找不到命令的记得加到windows环境变量中。

下载projects

打开git bash,创建空目录:如D:\gitandroid

huyue@huyue MINGW32 /d/gitandroid
$ pwd
/d/gitandroid

先repo init同官方,然后下载你改动所在project,比如vold, 打开.repo/manifest.xml:

<project path="system/vold" name="platform/system/vold" groups="pdk" />
repo sync platform/system/vold

linux版repo sync可能不用带platform。你也可以加上-j

另外需要下载tools/repohooks:

<project path="tools/repohooks" name="platform/tools/repohooks" groups="adt-infra,cts,developers,motodev,pdk,tools,tradefed" />
repo sync platform/tools/repohooks

不然提交会报如下错误:

ERROR: Couldn't find repo hook: "D:\gitandroid\tools\repohooks\pre-upload.py"

创建密码

需要Google账号登录,这个密码验证会保存在.gitcookies文件里,Win上路径在环境变量USERPROFILE里,比如我的用户目录:

C:\Users\huyue

直接copy powershell脚本到cmd里执行生成的.gitcookies有换行问题,比较好的办法是把powershell脚本拷贝到bat文本里,执行这个bat就ok了。

修改验证

先新建一个repo分支:

repo start vold --all

check branch:

$ repo branch
*p vold                      | in all projects

分支建好后,和一般git使用一样:

git add
git commit -s [--amend]

挪到linux,确保编译功能ok。

提交补丁

  • upload without verify

repo upload如果有verify错误需要加--no-verify

  • select agreements in gerrit

提交前先选择协议种类,不然会报如下错:

huyue@huyue MINGW32 /d/gitandroid
$ repo upload --no-verify
Upload project system/vold/ to remote branch master:
  branch vold ( 1 commit, Thu Jan 3 14:20:27 2019 +0800):
         9d6cc18b cryptfs: Add error messages when remove dm-crypt device is failed
to https://android-review.googlesource.com/ (y/N)? y
fatal: remote error: No Contributor Agreement on file for user Yue Hu <zbestahu@gmail.com> (id=1055424)

----------------------------------------------------------------------
[FAILED] system/vold/    vold            (Upload failed)

gerrit上设置Agreements,Android CLA选不上,选了Google CLA填了个人信息等,填完了后浏览设置多了个Google CLA如下:

Agreements

Name Description
Google CLA Google Contributor License Agreement
New Contributor Agreement

继续提交就ok了:

huyue@huyue MINGW32 /d/gitandroid
$ repo upload --no-verify
Upload project system/vold/ to remote branch master:
  branch vold ( 1 commit, Thu Jan 3 14:20:27 2019 +0800):
         9d6cc18b cryptfs: Add error messages when remove dm-crypt device is failed
to https://android-review.googlesource.com/ (y/N)? y
remote: Processing changes: refs: 1, new: 1, done
remote:
remote: SUCCESS
remote:
remote: New Changes:
remote:   https://android-review.googlesource.com/c/platform/system/vold/+/860430 cryptfs: Add error messages when remove dm-crypt device is failed
To https://android-review.googlesource.com/platform/system/vold
 * [new branch]      vold -> refs/for/master

----------------------------------------------------------------------
[OK    ] system/vold/    vold

这个时候到gerrit你的changes就能看到提交了,加人review吧。

1st submit, hapi...

参考文档