Android 開源項(xiàng)目(AOSP)主張?jiān)荚O(shè)備制造商(OEMs)和其他設(shè)備實(shí)施者將一個完整的軟件堆棧植入并運(yùn)行在他們自己的硬件上。為了保持 Android 的質(zhì)量,谷歌貢獻(xiàn)出了專職的工程師、產(chǎn)品經(jīng)理、用戶界面設(shè)計(jì)師、質(zhì)量保證測試人員和所有其他把現(xiàn)代化設(shè)備帶向市場的必要相關(guān)人員。
因此,我們保留了若干“代碼主線”,從不穩(wěn)定的試驗(yàn)性工作中清晰地區(qū)分出 Android 當(dāng)前穩(wěn)定的版本。我們將開源的管理和維護(hù)迭代進(jìn)更大的產(chǎn)品開發(fā)周期中。
下面的圖表描述了在概念層面上 AOSP 是如何管理代碼和版本。我們將提及的這些作為“代碼主線”而不是“支線”,僅僅是因?yàn)樵谌魏翁囟ǖ臅r刻,一個特定的“代碼主線”里都有可能存在不止一條支線。例如,當(dāng)一個發(fā)布被中斷,它會基于當(dāng)時的需求去決定它能不能成為一條新的分支。
在任何特定的時刻,都有一個 Android 平臺的當(dāng)前最新版本。這通常表現(xiàn)為樹的一個分支形式。
設(shè)備制造商和參與者使用當(dāng)前最新版本進(jìn)行工作,修復(fù)漏洞,推出新設(shè)備,試驗(yàn)新功能等等。
與此同時,谷歌根據(jù)產(chǎn)品的需要和目標(biāo),內(nèi)部實(shí)現(xiàn) Android 平臺和框架的下一個正式版本。我們通過在旗艦設(shè)備上與設(shè)備合作伙伴合作,開發(fā)出 Android 的下一個正式版本。這些設(shè)備合作伙伴的性能規(guī)范被選中,用來推動 Android 朝著我們希望的方向前進(jìn)。
http://wiki.jikexueyuan.com/project/android-source/images/codelines-branches-releases1.png" alt="" />
一個發(fā)布版本對應(yīng)于一個 Android 平臺的正式版本,例如 1.5,2.1 等等。一般來說,一個平臺的發(fā)布版本對應(yīng)一個正式版本。這個正式版本在 AndroidManifest.xml 文件的 SdkVersion 域里面且它是在 frameworks/base/api 源代碼樹下定義的。
一個上游項(xiàng)目是一個開源項(xiàng)目,Android 堆棧就是從這個開源項(xiàng)目上獲取代碼的。這些包括一些著名的項(xiàng)目,如 Linux 內(nèi)核和 WebKit。隨著時間的推移,我們正在遷移的一些半自主性的 Android 項(xiàng)目(例如 Android 運(yùn)行環(huán)境 “ART”, Android SDK 工具,Bionic 等等) 作為“上游”項(xiàng)目進(jìn)行開發(fā)。通常情況下會在公共樹里面完全開發(fā)這些項(xiàng)目。對于一些上游項(xiàng)目,開發(fā)是通過直接地構(gòu)建上游項(xiàng)目本身完成的??梢詤⒖?a rel="nofollow" title="上游項(xiàng)目">上游項(xiàng)目獲取更多資訊。在這兩種情況下,快照將定期被拉入版本。
在任何時候,對于特定的 Android 平臺,代碼主線版本(實(shí)際上在 git 里面可能包含了不止一個實(shí)際的分支)被認(rèn)為是唯一規(guī)范的源代碼。原始設(shè)備制造商和其他設(shè)備制造商應(yīng)該只從發(fā)布版本分支獲取源代碼。
“實(shí)驗(yàn)性”代碼線路的建立用以獲取社區(qū)的變化,這樣他們可以在迭代上著眼于穩(wěn)定性。
證明了穩(wěn)定的變化將最終被拖入發(fā)布分支。注意,這只適用于漏洞修復(fù)的、應(yīng)用程序改進(jìn)的和其它不影響平臺 API 的變化。
當(dāng)有必要時,變化將被從上游項(xiàng)目(包括 Android “上游”項(xiàng)目)拖入發(fā)布分支。
谷歌內(nèi)部將開發(fā)“N+1”個版本(即框架和平臺 API 的下一個主要版本)。可以參看關(guān)于私有的代碼主線獲取更多資訊。
當(dāng)有必要時,從上游、發(fā)布版本與實(shí)驗(yàn)分支拉出的變化將會放到谷歌的私有分支。
當(dāng)下一個正式版本的平臺 API 已經(jīng)穩(wěn)定,并經(jīng)過全面測試,谷歌將中斷下一個平臺正式版本的發(fā)布版本。(這特別是指一種新 SdkVersion。)這也將對應(yīng)被制成一個公共發(fā)布分支的內(nèi)部代碼行和新的當(dāng)前平臺代碼主線。
上述提及的源管理策略包括一個谷歌將繼續(xù)保密的代碼主線。這樣做的原因是要把注意力集中在目前 Android 公共版本。
原始設(shè)備制造商和其他設(shè)備制造商自然希望制造出與 Android 最新版本相關(guān)的產(chǎn)品。同樣,應(yīng)用程序開發(fā)者如非必要不希望處理更多的平臺版本。與此同時,谷歌保留對作為一個平臺和一個產(chǎn)品的 Android 戰(zhàn)略方向的責(zé)任。我們的方法著重于在少量的旗艦設(shè)備上運(yùn)行功能,確保與 Android 相關(guān)的知識產(chǎn)權(quán)受到保護(hù)。
結(jié)果是,谷歌經(jīng)常擁有來自第三方的機(jī)密信息。我們必須避免泄露敏感的功能,直到我們確保擁有適當(dāng)?shù)谋Wo(hù)措施。另外,一次存在太多平臺版本也會對平臺引起真實(shí)的風(fēng)險?;谶@些原因,我們已經(jīng)構(gòu)建了開源項(xiàng)目 - 包括第三方的貢獻(xiàn) - 以專注于 Android 的目前公開的穩(wěn)定版本。下一平臺版本的深度開發(fā)不會公開進(jìn)行,直到它已經(jīng)準(zhǔn)備好成為一個發(fā)布版本。
我們意識到許多貢獻(xiàn)者不同意這種方法。我們尊重其他人可能有不同的觀點(diǎn),然而,我們覺得這種方法是最好的,我們也選擇這個方法來實(shí)現(xiàn)。