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

來源:互聯網
上載者:User

大家都知道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指令碼。

$ mkdir ~/bin$ PATH=~/bin:$PATH //將~/bin  #檔案夾路徑放入到系統路徑,這樣此路徑下的命令在系統任何地方都可以被直接調用$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo   #下載repo指令碼到bin檔案夾下$ chmod a+x ~/bin/repo  #repo指令碼預設沒有執行許可權,為它增加執行許可權

1.2  安裝並配置repo

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

我們建立一個單獨的檔案夾來裝android的源碼,並將repo安裝到這個檔案夾中:

$ mkdir WORKING_DIRECTORY$ cd WORKING_DIRECTORY$ repo init -u https://android.googlesource.com/platform/manifest   #這樣預設下載的是master分支的源碼

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

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

這樣repo就安裝好了。

1.3 同步代碼到本地。

$repo sync

耐心地等待吧...

2. 配置Gerrit 登入密鑰

首先你需要建立一個Google賬戶去登入到Gerrit Server, 如果你有Gmail,你可以直接登入,但註冊Google賬戶不一定非得要gmail郵箱,其他郵箱也是可以的,這裡我使用163郵箱申請個Google賬戶來登入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 的錯誤提示, 問題的關鍵在這句話裡面

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 linemore 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

       

$ repo upload

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

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

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

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

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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.