簡介
在使用Andriod SDK進行應用程式開發的時候,我們需要對原始碼進行調試,有可能需要進入到某個Android API函數內部進行跟蹤調試。但是,如果目標版本的SDK沒有關聯對應版本的原始碼的話,就會提示你找不到原始碼。
圖:找不到Android源碼的提示
我們都知道Android系統是一個開源工程,在網上可以下載到原始碼。一般在網上搜尋一下,就會找到各種下載原始碼的方法,比如使用Git和Repo,android原始碼下載的網址是http://android.git.kernel.org/。關於利用Git下載android原始碼的方法,我就不再贅述了,因為網上的方法很多,這裡給出一個參考連結Windows平台下Android源碼的下載。
如果你跟我一樣是初學者,相信看了上面的文章,你就知道如何使用Git下載android源碼了。但是,看著http://android.git.kernel.org/ 網站下的各種目錄和檔案,相信你也會跟我一樣傻眼,不知道那個目錄下的檔案對應是什麼代碼,想找到自己所需要的東西都比較難了。所以這裡給大家介紹一下android原始碼的結構,如果發現文章有錯誤之處,還請各位童鞋輕點砸磚!
圖:http://android.git.kernel.org/ 下紛繁複雜的檔案
認識Android原始碼結構之前,先來再熟悉一下Android的系統架構吧!Android系統架構被分為四層,自下而上分別是:Linux作業系統及驅動層、本地架構和Java運行環境、Java架構、Java應用程式層。每一層的具體介紹在此就略過了。
圖:Android系統架構
認識Android原始碼結構
Android代碼的工程分為3個部分,在開啟http://android.git.kernel.org/ 後看到的,就是android原始碼的根目錄。(建議:開啟這個網站後,對照學習以下內容)
- 核心工程(Core Project):建立Android 系統的基礎,在根目錄的各個檔案夾中。
- 擴充工程(External Project):使用其他開源項目擴充的功能,在external 檔案夾中。
- 包(Package):提供Android 的應用程式和服務,在package 檔案夾中。
1、Android 的核心工程
Android 的核心工程包含了對Android系統基本啟動並執行支援,以及Android系統的編譯系統,工程的內容如下表:
Android 的核心工程
工程名稱 |
工程描述 |
bionic |
[Build 系統] C運行時支援:libc、libm、libdl、動態linker |
bootloader/legacy |
Bootloader 參考代碼 (核心載入器,在核心運行之前運行) |
build |
[Build 系統] Build系統 |
dalvik |
Dalvik虛擬機器 |
delelopment |
高層的開發和調試工具 |
framework/base |
Android 核心的架構庫 |
framework/policies/base |
架構配置策略 |
hardware/libhardware |
硬體抽象層庫 |
hardware/ril |
無線介面層(Radio Interface Layer) |
kernel |
Linux 核心 |
prebuilt |
[先行編譯核心] 對Linux 和 Mac OS 編譯的二進位支援 |
system/core |
最小化可開機環境 |
system/extras |
底層調試和檢查工具 |
除了上表列出的工程外,還有其他的工程,但大都是Android系統第2個層次的原始碼。
2、Android 擴充工程
Android 的擴充工程包含在external檔案夾中,是一些經過修改後適應Android系統的開源工程。有一些工程在主機上運行,也有些在目標機上運行。由於包含的擴充工程就多,就不一一列出,感興趣的童鞋可以自己收集一些資料學習一下。
3、Android 中的Java程式包
Android中的Java程式包是Android系統架構第4層的內容,主要包括應用程式(Application)和內容提供器(Content Providers)兩個部分,還有一個目錄inputmethods是IME的部分。
應用程式(Application)在package/apps目錄中,主要包括:AlarmClock,Browser,Calculator,Calendar,Camera,Contacts,E-mail,GoogleSearch,HTML Viewer,IM,Launcher,Mms,Music,PackageInstaller,Phone,Settings,SoundRecorder,Stk,Sync,Updater,VoiceDialer。
內容提供者(Content Providers)在package/providers目錄中,主要包括:CalendarProvider,ContactsProvider,DownloadProvider,DrmProvider,GoogleContactsProvider,GoogleSubsribedFeedsProvider,ImProvider,MediaProvider,SettingsProvider,SubscribedFeedsProvider,TelephonyProvider。
按需下載
如果你只需要其中的某一個或者幾個檔案的話,可以使用如下的git命令:
git clone git://android.git.kernel.org/工程代碼路徑
(例如: git clone git://android.git.kernel.org/platform/packages/providers/DrmProvider.git)
下載的目標地址,就是當前git命令列所在的目前的目錄。
下載各個版本的Android SDK 原始碼
給大家提供一個在Windows下下載不同版本SDK原始碼的方法,我也在網上找過其他的方法,但是都是Copy&Paste出來的。
或者參考另一篇博文:使用git 工具下載android.jar Source Code
1、下載Git,並且安裝好;
2、建立一個檔案frameworks,這個檔案夾就是用來存放你將要下載的Android SDK原始碼的目錄
3、啟動Git bash命令列,輸入命令 git clone git://android.git.kernel.org/platform/frameworks/base.git frameworks,將會把android.git.kernel.org網站上的base檔案夾下的所有檔案和檔案夾下載本地的frameworks檔案夾中;
4、在Git命令列環境下,使用cd命令,逐步進入到frameworks/base檔案夾中;
5、使用 "git tag" 命令,顯示所有的Android的原始碼工程名稱;
6、找到你所需要的原始碼的名稱和版本,在使用命令"git checkout android-1.5r4"切換到模擬器(emulator)對應的版本;
7、將frameworks/base/core/java下的所有檔案拷貝到你的SDK目錄下的"android-sdk-windows\platforms\android-3\sources"檔案夾下。
注意:每次切換模擬器的版本時,git會自動從網站上下載對應版本的原始碼到frameworks/base/檔案夾下,再將該檔案夾下的檔案拷貝到對應版本的SDK目錄下即可。