Android核心開發:源碼的版本與分支詳解

來源:互聯網
上載者:User

標籤:核心   版本   切換   android   分支   

我想很多初學者或許跟我一樣,看完Android源碼下載相關的文章以後,就開始興緻勃勃地去下載Android源碼了,但是下載完了源碼後,有沒有像我一樣產生如下幾個困惑呢?


(1) Android版本有哪些分支可用?每個分支的TAG是什嗎?


(2) Android源碼下載完了怎麼沒有看到Linux核心代碼?Android源碼對應Linux核心是否可以從kernel.org官網去下載?Android對標準的Linux核心做了哪些修改?


(3) Android源碼分支與Linux版本分支的對應關係是什麼樣的?高版本的Android源碼能否使用低版本的Linux核心?或者低版本Android源碼能否使用高版本的Linux核心?


(4) 開發板廠商提供的Android源碼與AOSP官網下載的Android源碼是什麼關係呢?


作為我的《Android核心開發》系列文章的第三篇,本文主要來解答一下上面提到的幾個問題。


1.  Android版本有哪些分支可用?每個分支的TAG是什嗎?


Android官網詳細地介紹了當前Android的各個版本名稱、Version、對應的API Level、Branch TAG、以及Supported devices,該連結地址如下:


http://source.android.com/source/build-numbers.html


由於官網被牆,這裡我也給出了一份儲存下來的離線html文檔,你可以下載下來用瀏覽器開啟查看,地址如下:


https://github.com/Jhuster/AOSP/tree/master/documents


當然,想查看當前可用的Android源碼分支和版本,也可以在下載好的Android源碼根目錄下執行如下命令:


$ git --git-dir .repo/manifests/.git/ branch -a或者$ cd .repo/manifests$ git branch -a | cut -d / -f 3


得到的結果樣本如下(只截取了部分):


650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6D/59/wKiom1Vhw2_jbHQjAAK3TWf8ZCI336.jpg" title="2015-05-22 085359 的螢幕.png" alt="wKiom1Vhw2_jbHQjAAK3TWf8ZCI336.jpg" />


那麼,如果你想切換到其他Android分支,只需要重新執行 repo init 和 repo sync 即可,樣本如下:


$ repo init -b android-4.2.2_r1 $ repo sync


2.  Android源碼與Linux核心代碼的關係?


文章開頭提到的第二個問題主要涉及到Android源碼與Linux核心代碼的關係,我們首先要瞭解一個重要的概念:


Android並沒有使用標準的Linux核心,而是做了很多的修改。


Android對標準的Linux核心代碼做了大量的剪裁和最佳化,並且添加了許多特有的代碼,主要包括:自訂UI系統,採用Bionic Libc庫代替glibc庫,添加Gold-Fish平台,編寫專有的驅動程式,如Binder、Logger、PowerManager等等。


由於著作權分歧等原因,這些修改並沒有merge到Linux主分支中去,因此,我們不能直接從Linux Kernel的官網(kernel.org)去下載適用於Android源碼的Linux核心代碼,而是要到Google官網提供的kernel網址去下載經過修改後的Linux核心代碼。


Google提供了多個版本的Linux Kernel,分別對應不同的裝置或者廠商版本,你可以通過 git clone 命令來完成下載,如下所示:


650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6D/55/wKioL1VhxUijTV8kAARg-dNeQVw544.jpg" title="2015-05-22 094048 的螢幕.png" alt="wKioL1VhxUijTV8kAARg-dNeQVw544.jpg" />   

如果你只是使用Android模擬器來跑Android核心,那麼就可以選擇goldfish版本作為你的Linux Kernel,如果你手頭有上述核心支援的裝置,那麼,你就下載對應的kernel即可。


那麼,如果你手頭的裝置或者開發板不在上述支援的列表中怎麼辦呢?


放心,一般而言,Android開發板的廠商會在上述Linux Kernel的基礎上針對自己的開發板修改適配出一套可用的Linux Kernel的,你只需要到廠商的官網或者論壇尋找對應的代碼即可。對於自己設計開發的板子,則需要下載相近的kernel代碼(如CPU型號相同),然後針對性的修改和移植即可。


3.  Android分支與Linux分支的關係


Android版本迭代更新的過程中,Linux Kernel也在不斷的迭代更新,因此,往往新的Android版本會使用較新的Linux核心分支,具體的分支對應關係我在Google官網上沒有找到,但是在維基百科和stackoverflow上找到了一份表格,如下所示:


650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6D/59/wKiom1Vhw-qQFexwAAE9DtXdWqs887.jpg" title="2015-05-22 094048 的螢幕.png" alt="wKiom1Vhw-qQFexwAAE9DtXdWqs887.jpg" />    


維基百科講的更加詳細,具體介紹了每一個Android分支到底有哪些修改,地址如下:


http://en.wikipedia.org/wiki/Android_version_history


一般情況下,不同的Android分支最好能使用對應的Linux核心分支版本,這樣才能保證系統的正常編譯通過和運行無誤,但是,也可以詳細瞭解某個Android版本對應的Linux核心到底做了哪些修改,並且把這些修改移植到其他版本的Linux核心上,也是可以實現低版本的Android運行在高版本的Linux核心上的,當然,反過來難度比較大,因為一般高版本的Android核心會用到高版本的Linux核心特性,移植起來會麻煩很多。


4.  廠商提供的Android版本與AOSP的關係


很多廠商會提供專門的針對該開發板的Android源碼,那麼,我們是否可以直接使用從AOSP官網上下載的Android源碼呢?


廠商一般會對官網的Android源碼進行修改,但是修改的部分一般會打個patch包,因此,你只需要下載廠商提供的patch包,並且將手頭的官網上下載的Android源碼切換到對應的分支,打上patch補丁即可。


5.  小結


關於Android源碼的版本與分支就介紹到這裡了,有任何疑問歡迎留言或者來信[email protected]交流,也歡迎關注我的新浪微博 @盧_俊 擷取最新的文章和資訊。


本文出自 “對影成三人” 部落格,請務必保留此出處http://ticktick.blog.51cto.com/823160/1654759

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.