在Android源碼中包含了很多的東西,如內嵌在Android系統中應用程式(如拍照、計算機、日曆、撥號器等)的原始碼;Android SDK帶的各種工具(如adb、emulator等)的原始碼;Android NDK的原始碼;硬體抽象層HAL的原始碼等等。
《Android源碼解析》系列博文將記錄下我學習Android源碼過程中的點點滴滴。
1.安裝Git工具
Android原始碼採用了Git版本控制工具來進行管理。可以使用如下的命令在ubuntu作業系統上安裝Git工具:
root@ubuntu:~# apt-get install git-core gnupg
安裝過程中,遇到了【404 Not Found】的錯誤,1所示。
圖1 【404 Not Found】錯誤
原因是在http://us.archive.ubuntu.com/ubuntu/源上找不到Git軟體資源。解決辦法是換一個有效源。具體方法如下:
選擇“Applications”菜單下的“Ubuntu Software Center”選項,在彈出的“Ubuntu Software Center”對話方塊中選擇“Edit”菜單下的“Software Sources”選項,將彈出2所示的“Software Sources”對話方塊。
圖2 “Software Sources”對話方塊
在2所示的“Software Sources”對話方塊中選擇“Download from”中的“Other”選項。將彈出所圖3所示的“Chose a Download Server”對話方塊。
圖3 “Chose a Download Server”對話方塊
在3所示的“Choose a Download Server”對話方塊中選擇“Select Best Server”,系統會自動尋找出最好的源來,最後點擊“Choose Server”即可。
更換了源之後,Git就可以順利的安裝了。
2.下載repo工具
在下載Android源碼之前,需要先下載一個repo工具,在這個工具中封裝了用來下載Android源碼所需要的git命令。
repo工具的下載和安裝方法如下:
root@ubuntu:~# wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo root@ubuntu:~# chmod a+x repo root@ubuntu:~# mv repo /bin/
通過以上的操作,我們下載了repo工具,然後修改其許可權為可執行,最後將repo工具放到了/bin目錄下。
3.下載Android原始碼
現在,我們就可以建立一個空目錄,用來放置下載好的Android源碼了。這裡,我的存放目錄為:/home/menlsh/AndroidSrc。
在AndroidSrc目錄下執行如下的命令就可以開始下載Android源碼了,這裡我選擇了下載Android4.0版本的源碼。
root@ubuntu:/home/menlsh/AndroidSrc# repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 root@ubuntu:/home/menlsh/AndroidSrc# repo sync
接下來,便是漫長的等待時間了。repo支援斷點續存,所以如果在下載過程中碰到網路中斷的現象,只需要重複執行repo sync命令就可以繼續下載了。
在下載過程中,AndroidSrc目錄中是沒有檔案內容顯示的。下載完成後,會出現4所示“done”資訊提示。
圖4 下載完成
同時,在AndroidSrc目錄中可以看到5所示的Android源碼目錄結構。
圖5 Android源碼目錄結構
至此,Android源碼便算是下載完成了。
4.Android源碼目錄結構解析
由圖5可以看出,在Android源碼目錄中包含了很多的子目錄,下面就來說說這些子目錄所代表的含義。
(1)abi:應用程式二進位介面(Application Binary Interface)
(2)bionic:C/C++執行階段程式庫
(3)bootable:用於Android裝載和啟動程式,包括bootloader和recovery等
(4)build:用於編譯Android源碼以及建立system.img、ramdisk.img等檔案的工具
(5)cts:用於相容性測試的工具
(6)dalvik:Dalvik虛擬機器的原始碼
(7)development:一些開發與測試工具
(8)device:與裝置相關的代碼
(9)docs:Android原始碼項目相關的文檔和工具
(10)external:擴充工具的原始碼
(11)frameworks:Android架構層原始碼(也就是Android SDK的原始碼)
(12)hardware:硬體層介面和庫(HAL的原始碼)
(13)libcore:Java核心庫
(14)ndk:NDK的原始碼
(15)packages:與Android系統一起發布的應用程式的原始碼(如拍照、計算機等)
(16)prebuilt:Android在各種平台下編譯之前要使用的工具
(17)sdk:在開發環境中使用到的工具(如ddms、draw9patch等)
(18)system:Android基本系統
(19)Makefile:編譯指令碼
在這些目錄中,device、frameworks、hardware、packages將是我重點進行學習的對象,也將會是本系列博文的主要介紹內容。