本帖最后由 geek_snail 于 2012-7-11 19:05 編輯
大家都知道Android是一個開源項目,,那任何人都可以為其貢獻代碼,雖然在developer的網(wǎng)站上有詳細的步驟(http://source./source/submit-patches.html#upstream-projects),,但是按照其一步一步來也會遇到很多麻煩,,在這里把我成功提交patch的步驟記錄下來,一方面希望別人不要再走彎路,,一方面也給對英文抵觸的同學一個參考,。
首先,簡單介紹一下android官方的代碼審核工具Gerrit,,Gerrit 是基于git 的 項目管理工具和代碼審核工具,,網(wǎng)上關于git的介紹很多,推薦一本git 經(jīng)典書籍《pro git》,,因為android的源碼就是git管理的,,相信大家還會比較熟悉的。 git中文教程:http://www.cnblogs.com/zhangjing230/archive/2012/05/09/2489745.html git快速入門:http:///tutorials/22
繼續(xù)說Gerrit,,Gerrit是一個網(wǎng)頁在線工具,,所有外部提交的代碼都要先提交到這個在線工具中等待代碼審核,只有審核通過的代碼才能并入到開源項目中,,一旦審核通過,,Gerrit 可以自動的merge代碼到代碼倉庫中。 Android 項目 Gerrit傳送門:https://android-review./#/q/status:open,n,z 如果你對Gerrit感興趣,,想把Gerrit集成到你現(xiàn)在進行的項目上也是可以的,,參考Geriit的開源項目: http://code.google.com/p/gerrit/
你還需要熟悉一下android官方提供的repo命令,repo是一個python腳本,,其中對git命令進行了一個封裝,,repo可以同時下載多個git倉庫。 Git,,Repo,,Gerrit的簡單介紹以及提交補丁時候的基本工作流程:http://source./source/version-control.html
相信大家已經(jīng)對怎么提交補丁到Android的開源項目有了個理論上的認識,接下來我們從實踐出發(fā)真正提交個補丁上去,,推薦使用Ubuntu作為android的源碼開發(fā)環(huán)境,。 1. 下載android的源碼,只有基于源碼才能提交我們的補丁,,源碼下載方法請參考 http://source./source/downloading.html,, 源碼下載可能需要幾個小時或者幾天的時間,視網(wǎng)絡情況而定,,國內網(wǎng)路連接android網(wǎng)站不是很穩(wěn)定,,如果遇到連接錯誤也沒關系,repo sync 可以斷點續(xù)傳,有條件的可以使用VPN,。
1.1 在本地創(chuàng)建一個代碼目錄,,并下載repo腳本。
$ mkdir ~/bin $ PATH=~/bin:$PATH //將~/bin #文件夾路徑放入到系統(tǒng)路徑,,這樣此路徑下的命令在系統(tǒng)任何地方都可以被直接調用 $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo #下載repo腳本到bin文件夾下 $ chmod a+x ~/bin/repo #repo腳本默認沒有執(zhí)行權限,,為它增加執(zhí)行權限
1.2 安裝并配置repo 在1.1中你已經(jīng)把repo下載下來了,但是要想使用它還需要安裝 我們創(chuàng)建一個單獨的文件夾來裝android的源碼,,并將repo安裝到這個文件夾中:
$ mkdir WORKING_DIRECTORY $ cd WORKING_DIRECTORY $ repo init -u https://android./platform/manifest #這樣默認下載的是master分支的源碼 如果你想下載指定分支的源碼,,如android 4.0.1r1 的源碼,可以使用-b選項來指定
$ repo init -u https://android./platform/manifest -b android-4.0.1_r1
這樣repo就安裝好了,。 1.3 同步代碼到本地,。
耐心地等待吧...
2. 配置Gerrit 登錄密鑰
首先你需要創(chuàng)建一個Google賬戶去登錄到Gerrit Server, 如果你有Gmail,,你可以直接登錄,,但注冊谷歌賬戶不一定非得要gmail郵箱,其他郵箱也是可以的,,這里我使用163郵箱申請個谷歌賬戶來登錄Gerrit,。 2.1 進入 https://android-review./, 點擊右上角 sign in,,進入google 賬戶登錄界面,,如果你有gmail可以直接登錄,否則點擊create a new count 進入如下注冊界面,填入你想顯示的郵箱地址和其他相關信息,,提交以后系統(tǒng)會向你填入的郵箱地址發(fā)封確認郵件,。
2.2 打開自己的郵箱,點擊確認鏈接,,完成確認,。
2.3 點擊Continue后就登錄到Gerrit了,但是我發(fā)現(xiàn)我的登錄名是 Anonymous Coward <[email protected]>,,之所以顯示 Anonymous Coward是因為你沒有設置顯示的姓名,,通過 Setings --> contact information --> Edit 可以設置你的顯示姓名。
2.3.1
2.3.2
2.3.3
2.3.4 保存成功后返回Gerrit的contact information 頁面,,點擊reload更新顯示姓名,。
現(xiàn)在再去看你Gerrit右上角的顯示信息是不是不一樣了?
2.4 在本地環(huán)境中配置Gerrit認證信息,,用于向gerrit提交代碼時候的身份認證。
2.4.1 還是在setting里面,,點擊 HTTP Password --> Obtain password 得到認證信息,,然后將這些認證信息拷貝到你的~/.netrc 文件中, 如果有兩行密碼,那兩行都要拷貝, 由于這寫信息涉及身份認證信息,,這里就不再截圖了,,記得不要把你的密碼泄漏出去哦,不然任何人都可以冒充你提交代碼了,!
2.5 準備工作都做好了,,終于可以動代碼了!
2.5.1 提交補丁之前你必須創(chuàng)建一個新的代碼分支,,看看官方文檔怎么說的: Start a repo branch For each change you intend to make, start a new branch within the relevant git repository:
You can start several independent branches at the same time in the same repository. The branch NAME is local to your workspace and will not be included on gerrit or the final source tree.
如果你照抄命令,,你就會遇到 error: project . not found 的錯誤提示, 問題的關鍵在這句話里面
For each change you intend to make, start a new branch within the relevant git repository 你們還記得之前提到repo的特色功能嗎,?就是同時下載多個git 倉庫到本地,,git 倉庫的列表之前也提到過,是在android根目錄/.repo(加點的都是隱藏的)/manifest.xml 中,,比如我們改動的是packages/apps/Gallery2下的文件
看到了吧,,Gallery2 項目的路徑就是path屬性的值,找到了項目路徑,,把 ‘repo start NAME .’ 中的 ‘.’ 換成你要改動過的項目路徑,。(NAME 是本地分支名字,自己?。?br>
2.5.2 要提交補丁,,總得打補丁吧,其實所謂的補丁就是指你對代碼的改動,,是不是只要我的改動邏輯正確就一定能通過審核呢,,答案是否定的,提交的補丁除了需要功能邏輯正確以為,,代碼的格式還是很重要的,,如果不注意很可能會被打回來,這里舉個例子:android的代碼規(guī)范里規(guī)定縮進不能用tab而是用4個空格,。如果你對android的代碼規(guī)范還不熟,,就仔細研究下吧 : http://source./source/code-style.html#use-spaces-for-indentation
2.5.3 提交代碼到本地的分支,這點和你平常使用git提交代碼到本地分支基本是一樣的,,要注意的是提交信息怎么寫,,官方給了個模板,要按規(guī)范格式書寫,。 第一行不能超過60個字符,,而且下一行要是一個空行。 描述要聚焦在你解決了什么問題,,問題是如何解決的,,如果你是加了個新的功能,,可以另加一些描述新功能。 為了方便以后其他的貢獻者的工作,,請?zhí)砑右恍┘僭O情況或者背景介紹,。 Start with a one-line summary (60 characters max), followed by a blank line. This format is used by git and gerrit for various displays.
short description on first line
more detailed description of your patch, which is likely to take up multiple lines. The description should focus on what issue it solves, and how it solves it. The second part is somewhat optional when implementing new features, though desirable.
Include a brief note of any assumptions or background information that may be important when another contributor works on this feature next year.
2.5.4 提交你的補丁到Gerrit
還記不記得我們在~/.netrc 中寫入了Gerrit的認證信息,提交的代碼會跟提交者的Gerrit賬戶關聯(lián)起來,。 無圖無真相,,來看一個提交:
到這里,已經(jīng)完成向Gerrit提交補丁的全部過程了,,慶祝一下 ! 接下來就是等待社區(qū)的大牛們對你代碼的審查了,,審查并驗證通過的代碼才能被開源項目收錄都倉庫中!
這里再介紹一個小技巧,,讓你的代碼盡快得到審核和驗證,,你可以自己邀請別人來幫你review和verify代碼,review代碼是不需要特殊權限的,,你也可以幫別人review代碼,,能verify代碼的人是掌握生殺大權的人,一般這項權利都由google的人來行使,。 邀請別人幫你review可以加快你的patch被處理的速度,。
以上是我向android貢獻代碼的個人經(jīng)歷,希望對android感興趣的同學有所幫助,,不對的地方還望指正,,歡迎拍磚。 |