向Android社區貢獻代碼過程詳解


大家都知道Android是一個開源項目,那任何人都可以為其貢獻代碼,雖然在developer的網站上有詳細的步驟(http://source.android.com/source/submit-patches.html#upstream-projects),但是按照其一步一步來也會遇到很多麻煩,在這里把我成功提交patch的步驟記錄下來,一方面希望別人不要再走彎路,一方面也給對英文抵觸的同學一個參考。

 

 

 

首先,簡單介紹一下android官方的代碼審核工具Gerrit,Gerrit 是基於git 的 項目管理工具和代碼審核工具,網上關於git的介紹很多,推薦一本git 經典書籍《pro git》,因為android的源碼就是git管理的,相信大家還會比較熟悉的。

git中文教程:http://www.cnblogs.com/zhangjing230/archive/2012/05/09/2489745.html

git快速入門:http://zhuidaniu.com/tutorials/22

 

 

繼續說Gerrit,Gerrit是一個網頁在線工具,所有外部提交的代碼都要先提交到這個在線工具中等待代碼審核,只有審核通過的代碼才能並入到開源項目中,一旦審核通過,Gerrit 可以自動的merge代碼到代碼倉庫中。

Android 項目 Gerrit傳送門:https://android-review.googlesource.com/#/q/status:open,n,z

如果你對Gerrit感興趣,想把Gerrit集成到你現在進行的項目上也是可以的,參考Geriit的開源項目: http://code.google.com/p/gerrit/

 

 

你還需要熟悉一下android官方提供的repo命令,repo是一個python腳本,其中對git命令進行了一個封裝,repo可以同時下載多個git倉庫。

Git,Repo,Gerrit的簡單介紹以及提交補丁時候的基本工作流程:http://source.android.com/source/version-control.html

 

 

相信大家已經對怎么提交補丁到Android的開源項目有了個理論上的認識,接下來我們從實踐出發真正提交個補丁上去,推薦使用Ubuntu作為android的源碼開發環境。

1. 下載android的源碼,只有基於源碼才能提交我們的補丁,源碼下載方法請參考 http://source.android.com/source/downloading.html, 源碼下載可能需要幾個小時或者幾天的時間,視網絡情況而定,國內網路連接android網站不是很穩定,如果遇到連接錯誤也沒關系,repo sync 可以斷點續傳,有條件的可以使用VPN。

1.1 在本地創建一個代碼目錄,並下載repo腳本。

 

[plain]  view plain copy
  1. $ mkdir ~/bin  
  2. $ PATH=~/bin:$PATH //將~/bin  #文件夾路徑放入到系統路徑,這樣此路徑下的命令在系統任何地方都可以被直接調用  
  3. $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo   #下載repo腳本到bin文件夾下  
  4. $ chmod a+x ~/bin/repo  #repo腳本默認沒有執行權限,為它增加執行權限  

 

 


 

 

1.2  安裝並配置repo

在1.1中你已經把repo下載下來了,但是要想使用它還需要安裝

我們創建一個單獨的文件夾來裝android的源碼,並將repo安裝到這個文件夾中:

 

[plain]  view plain copy
  1. $ mkdir WORKING_DIRECTORY  
  2. $ cd WORKING_DIRECTORY  
  3. $ repo init -u https://android.googlesource.com/platform/manifest   #這樣默認下載的是master分支的源碼  

 


如果你想下載指定分支的源碼,如android 4.0.1r1 的源碼,可以使用-b選項來指定

 

 

[plain]  view plain copy
  1. $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1  

 


 

這樣repo就安裝好了。

1.3 同步代碼到本地。

 

[python]  view plain copy
  1. $repo sync  

耐心地等待吧...

 

 

2. 配置Gerrit 登錄密鑰

首先你需要創建一個Google賬戶去登錄到Gerrit Server, 如果你有Gmail,你可以直接登錄,但注冊谷歌賬戶不一定非得要gmail郵箱,其他郵箱也是可以的,這里我使用163郵箱申請個谷歌賬戶來登錄Gerrit。

2.1 進入 https://android-review.googlesource.com/, 點擊右上角 sign in,進入google 賬戶登錄界面,如果你有gmail可以直接登錄,否則點擊create a new count 進入如下注冊界面,填入你想顯示的郵箱地址和其他相關信息,提交以后系統會向你填入的郵箱地址發封確認郵件。

2.2  打開自己的郵箱,點擊確認鏈接,完成確認。

 

2.3 點擊Continue后就登錄到Gerrit了,但是我發現我的登錄名是   Anonymous Coward <springnap@163.com>,之所以顯示 Anonymous Coward是因為你沒有設置顯示的姓名,通過 Setings --> contact information --> Edit 可以設置你的顯示姓名。

2.3.1

2.3.2

 

2.3.3

 

2.3.4  保存成功后返回Gerrit的contact information 頁面,點擊reload更新顯示姓名。

 

 

現在再去看你Gerrit右上角的顯示信息是不是不一樣了?大笑

 

2.4 在本地環境中配置Gerrit認證信息,用於向gerrit提交代碼時候的身份認證。

2.4.1 還是在setting里面,點擊 HTTP Password --> Obtain password 得到認證信息,然后將這些認證信息拷貝到你的~/.netrc 文件中, 如果有兩行密碼,那兩行都要拷貝,

由於這寫信息涉及身份認證信息,這里就不再截圖了,記得不要把你的密碼泄漏出去哦,不然任何人都可以冒充你提交代碼了!

 

2.5 准備工作都做好了,終於可以動代碼了!

2.5.1 提交補丁之前你必須創建一個新的代碼分支,看看官方文檔怎么說的:

 

Start a repo branch

 

For each change you intend to make, start a new branch within the relevant git repository:

$ repo start NAME .

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 的錯誤提示, 問題的關鍵在這句話里面

 

[plain]  view plain copy
  1. 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 是本地分支名字,自己取)

 

 

2.5.2  要提交補丁,總得打補丁吧,其實所謂的補丁就是指你對代碼的改動,是不是只要我的改動邏輯正確就一定能通過審核呢,答案是否定的,提交的補丁除了需要功能邏輯正確以為,代碼的格式還是很重要的,如果不注意很可能會被打回來,這里舉個例子:android的代碼規范里規定縮進不能用tab而是用4個空格。如果你對android的代碼規范還不熟,就仔細研究下吧 : http://source.android.com/source/code-style.html#use-spaces-for-indentation

 

2.5.3 提交代碼到本地的分支,這點和你平常使用git提交代碼到本地分支基本是一樣的,要注意的是提交信息怎么寫,官方給了個模板,要按規范格式書寫。

        第一行不能超過60個字符,而且下一行要是一個空行。

        描述要聚焦在你解決了什么問題,問題是如何解決的,如果你是加了個新的功能,可以另加一些描述新功能。

        為了方便以后其他的貢獻者的工作,請添加一些假設情況或者背景介紹。

 

  • 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

       

[plain]  view plain copy
  1. $ repo upload  

 

 

還記不記得我們在~/.netrc 中寫入了Gerrit的認證信息,提交的代碼會跟提交者的Gerrit賬戶關聯起來。

 

無圖無真相,來看一個提交:

 

到這里,已經完成向Gerrit提交補丁的全部過程了,慶祝一下 ! 偷笑接下來就是等待社區的大牛們對你代碼的審查了,審查並驗證通過的代碼才能被開源項目收錄都倉庫中!

 

這里再介紹一個小技巧,讓你的代碼盡快得到審核和驗證,你可以自己邀請別人來幫你review和verify代碼,review代碼是不需要特殊權限的,你也可以幫別人review代碼,能verify代碼的人是掌握生殺大權的人,一般這項權利都由google的人來行使。

邀請別人幫你review可以加快你的patch被處理的速度。

 

 

以上是我向android貢獻代碼的個人經歷,希望對android感興趣的同學有所幫助,不對的地方還望指正,歡迎拍磚。

轉自:http://blog.csdn.net/xinfuqizao/article/details/7733597


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM