Android內核開發:理解和掌握repo工具

由於Android源碼是用repo工具來管理的,因此,搞Android內核開發,首先要搞清楚repo是什麼東西,它該怎麼使用?作爲《Android內核開發》系列文章的第二篇,我們首先談談對repo工具的理解和使用。


1. repo是什麼?


repo是一種代碼版本管理工具,它是由一系列的Python腳本組成,封裝了一系列的Git命令,用來統一管理多個Git倉庫。


2. 爲什麼要用repo?


因爲Android源碼引用了很多開源項目,每一個子項目都是一個Git倉庫,每個Git倉庫都有很多分支版本,爲了方便統一管理各個子項目的Git倉庫,需要一個上層工具批量進行處理,因此repo誕生。


repo也會建立一個Git倉庫,用來記錄當前Android版本下各個子項目的Git倉庫分別處於哪一個分支,這個倉庫通常叫做:manifest倉庫。


3. 怎麼安裝repo?


官方的repo腳本下載方法:


curl http://commondatastorage.googleapis.com/git-repo-downloads/repo >  ./repo


由於官網被牆,目前可以使用的repo腳本下載方法如下(兩者選一):


$ git clone git://git.omapzoom.org/git-repo.git
$ git clone git://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/  

$ cp git-repo/repo  ./repo


或者修改手頭已有的被牆的repo文件:


REPO_URL = 'git://git.omapzoom.org/git-repo.git'
REPO_URL = 'git://aosp.tuna.tsinghua.edu.cn/android/git-repo' 

REPO_REV = 'stable'


當然,你也可以去我的GitHub下載這個repo文件,地址:


https://github.com/Jhuster/AOSP/blob/master/repo


4. 怎麼下載源碼?


上面說過,Android源碼分支其實由一個叫manifest倉庫來管理起來的,因此,下載源碼首先要clone這個manifest倉庫。這個倉庫裏面有一個XML文件,其實就是一個文件清單,列出了本代碼倉庫依賴哪些代碼,該去哪下載,分支是什麼。


一般用repo init命令來clone這個manifest倉庫,例如,如果要下載Android源碼,則方法如下:


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


當然,上面的官網被牆了,因此,推薦如下鏡像(兩者選一):


$ repo init -u git://git.omapzoom.org/platform/manifest.git
$ repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest


初始化完畢後,你會在本地的.repo文件夾中看到manifest倉庫的內容,這個文件夾中最重要的文件是manifest.xml(有的倉庫用的是default.xml,然後指向具體的xml),它就是上面說到的文件清單。


如果要選擇特定版本的Android源碼,或者在已下載的源碼基礎上切換到其他版本,則可以使用-b選項:


$ repo init -u git://git.omapzoom.org/platform/manifest.git -b android-5.0.2_r1 
$ repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest -b android-5.0.2_r1


然後使用 repo sync 命令進行同步即可下載好全部的Android源碼了。


5. manifest.xml文件清單的組成


上面提到了repo init需要初始化一個manifest倉庫,倉庫中含有一個很重要的manifest.xml文件清單,其實這個manifest.xml並不複雜的,它就是用XML文件的格式記錄了本項目依賴的各個Git倉庫的名稱、地址,以及分支等信息。常用的元素如下所示:


(1) manifest 最頂層的XML元素


(2) remote  設置遠程git服務器的屬性,如名稱、根URL地址等


(3) project 需要clone的Git倉庫,path表示本機路徑,name表示遠程版本庫的相對路徑


(4) copyfile 執行拷貝操作,把URL/$src地址的文件拷貝到./$dest


其實,如果不使用repo工具,也是可以對照manifest.xml文件清單直接使用“git clone”的方式一個project一個project的下載的,然後對每個project進行git checkout特定的分支。


7. 常用repo命令


這一塊網上文章很多,我就不詳細講解了,只列出常用命令。


(1) repo init   // 初始化repo倉庫


(2) repo sync   // 下載源碼


(3) repo start  // 創建分支


(4) repo checkout //切換分支


(5) repo branches //查看分支


(6) repo status   //查看文件狀態


8. 小結


關於repo工具就介紹到這裏了,有任何疑問歡迎留言或者來信[email protected]交流,也歡迎關注我的新浪微博 @盧_俊 獲取最新的文章和資訊。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章