本章主要內容:
簡單介紹本書內容的架構、編譯環(huán)境的搭建以及如何利用Eclipse調試SystemServer進程。
到目前為止,Android系統(tǒng)的最新版本是4.0.3。而就在本書即將完稿之時,業(yè)界有傳聞說Android 4.0.4版本已經對大廠商發(fā)布。Android系統(tǒng)推出速度之快讓很多開發(fā)人員都很驚訝。當然,推出的速度如此之快有一些是出于商業(yè)上的考慮。不管怎樣,Android系統(tǒng)在進化過程中,其大體架構相對保持穩(wěn)定。圖1-1為Android的系統(tǒng)架構圖。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image001.png" alt="image" />
圖1-1? Android系統(tǒng)架構
相信絕大多數讀者對圖1-1或類似圖表的內容已經司空見慣。此處,我們就不再贅述。
本書作為“深入理解Android”系列的第二卷,從內容上將承接《深入理解Android:卷I》(本書以后簡稱“卷I”)的內容,但是本書關注的焦點將從Native層Framework轉移到Java層Framework。本書涵蓋的內容如圖1-2所示。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image002.png" alt="image" />
圖 1-2? 本書涵蓋的內容
從圖1-2中,讀者可發(fā)現本書的大部分內容都在討論Service。確實如此。因為Android Java層Framework的核心就是這些Service。毫不夸張地說,正是這些Service支撐了整個Java層世界的運轉。讀者可參考第3章的圖3-1來了解Framework中Service的概貌。
本節(jié)將討論Android 4.0源碼下載、Eclipse開發(fā)環(huán)境,以及如何調試SystemServer進程等相關知識。
Android 2.3以后,Google官方推薦使用64位的操作系統(tǒng)來編譯源碼。所以,讀者要先安裝64位的OS。筆者推薦的操作系統(tǒng)是Ubuntu 10.04 X86-64版。另外,讀者不要隨意升級Ubuntu,因為高版本Ubuntu中自帶的GCC版本過高,會導致編譯Android源碼時出問題。
提示其實32位的Ubuntu也可以編譯Android 2.3以后的Android系統(tǒng),但弄起來頗為麻煩,而且也沒什么技術含量。筆者建議讀者遵照官方要求去做即可。
筆者不打算過多討論Android源碼下載的步驟,原因是:這是一個需要讀者動手操作的過程,而看著電腦屏幕操作比看書后輸入大串的字符串的效率要高很多。
基于上面這個原因,這里筆者向讀者提供一個官方說明文檔,地址是http://source.android.com/source/downloading.html。該網頁中有詳細的代碼下載步驟,讀者只要執(zhí)行簡單的復制/粘貼操作即可動手實驗。如圖圖1-3所示為該網頁的截圖。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image003.png" alt="image" />
圖1-3? Android代碼下載網頁示意圖
注意讀者要選擇下載Android 4.0.1的代碼。雖然最新的Android 4.0.3版本從版本號上看變化不大,但實際代碼卻有較大變化。
另外,由于網絡環(huán)境不佳,如果讀者發(fā)現本章提供的下載地址無法連接,可從筆者博客上的鏈接去下載源代碼和工具,博客地址是:http://blog.csdn.net/innost/article/details/7525205。
?
Android 2.3及以后版本的代碼編譯都需要使用JDK1.6,所以首先要做的是下載JDK1.6。下載網址是http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html。筆者下載的文件是jdk-6u27-linux-x64.bin。把它放到一個目錄中,比如將其放到/mnt/hgfs/E目錄下,然后在這個目錄中執(zhí)行:
./ jdk-6u27-linux-x64.bin? #執(zhí)行這個文件
這個命令的作用其實就是解壓。解壓后的結果在/mnt/hgfs/E/jdk1.6.0_27目錄中。有了JDK后,還需要設置~/.bashrc文件。在該文件末尾添加如圖1-4所示的幾行語句:
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image004.png" alt="image" />
圖1-4? Java環(huán)境部署示意圖
重新登錄系統(tǒng)后,Java環(huán)境就添加到系統(tǒng)中了。
源碼編譯的步驟非常簡單。我們在卷I也詳細介紹編譯方法。不過本書要求讀者必須先編譯整個系統(tǒng),步驟如下:
·??執(zhí)行source build/envsetup.sh命令。該命令將導入Android編譯環(huán)境。
·??輸入choosecombo并執(zhí)行,它是envsetup.sh中定義的一個函數。在執(zhí)行過程中,分別選擇release、generic、eng即可。最終屏幕輸出如圖1-5所示。 ?
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image005.png" alt="image" />
圖1-5? 編譯設置效果圖
·??執(zhí)行make命令以編譯整個系統(tǒng)。編譯時間由機器配置決定。筆者的4核4GB機器的編譯時間大概在2小時左右。
本節(jié)將介紹如何利用Eclipse來調試Android Java Framework的核心進程SystemServer。
首先要下載Android SDK。下載地址為http://developer.android.com/sdk/index.html。在Linux環(huán)境下,該網站截圖如圖1-6所示。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image006.png" alt="image" />
圖1-6 AndroidSDK下載網頁示意圖
筆者下載的是Linux系統(tǒng)上的SDK。解壓后的位置在/thunderst/disk/anroid/android-sdk-linux_x86下。
然后要為Eclipse安裝ADT插件(Android Development Tools),步驟如下。
·??單擊Eclipse菜單欄Help->Install New Software,輸入Android ADT下載地址:https://dl-ssl.google.com/android/eclipse/,然后安裝其中的所有組件,并重啟Eclipse。
·??單擊Eclipse菜單欄Preferences->Android一欄,在右邊的SDK Location中輸入剛才解壓SDK后得到的目錄,即筆者設置的/thunderst/disk/anroid/android-sdk-linux_x86,最終結果如圖1-7所示。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image007.png" alt="image" />
圖1-7? SDK安裝示意圖
·??單擊Eclipse菜單欄Window->Android SDK Manager,彈出一個對話框,如圖1-8所示。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image008.png" alt="image" />
圖1-8? Android SDK Manager對話框
在圖1-8中選擇下載其中的Tools和對應版本的SDK文檔、鏡像文件、開發(fā)包等。有條件的讀者可以將Android 4.0.3和4.0對應的內容及Tools全部下載過來。
Coffee BytesJava是Eclipse的一個插件,用于對代碼進行折疊,其功能比Eclipse自帶的代碼折疊功能強大多了。對于大段代碼的研究,該插件的作用功不可沒。此插件的安裝和配置步驟如下:
·??單擊Eclipse菜單欄Help->Install New Software,在彈出的對話框中輸入http://eclipse.realjenius.com/update-site,選擇安裝這個插件即可。
·??單擊Eclipse菜單欄Window->Preference,在左上角輸入Folding進行搜索,結果如圖1-9所示。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image009.png" alt="image" />
圖1-9? Coffee Bytes Java 插件配置
在圖1-9所示的對話框中,要先打開Enablefolding選項,然后從Select foldingto use框中選擇CoffeeBytes Java Folding。圖1-9右下部分的勾選框用來配置此插件的代碼折疊功能。讀者不妨按照圖1-9所示來配置它。使用該插件后的示意圖如圖1-10所示。
如果不關心else if分支,就可以把這段代碼折疊起來 |
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image010.png" alt="image" />
圖1-10? Coffee Bytes Java插件的使用示例
從圖1-10中可看到,使用該插件后,基本上代碼中所有分支都可以折疊起來,該功能將幫助開發(fā)人員集中精力關注自己所關心的分支。
注意,這一步必須編譯完整個Android源碼才可以實施,步驟如下:
·??復制Android源碼目錄/development/ide/eclipse/.classpath到Android源碼根目錄。
·??打開Andriod源碼根目錄下的.classpath文件。該文件是供Eclipse使用的,其中保存的是源碼目錄中各個模塊的路徑。由于我們只關心Framework相關的模塊,因此可以把一些不是Framework的目錄從該文件中注釋掉。同時,去掉不必要的模塊也可加快Android源碼導入速度。圖1-11所示為該文件的部分內容。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image011.png" alt="image" />
圖1-11.classpath文件部分文件內容
另外,一些不必要的模塊會導致后續(xù)在Eclipse中Android源碼編譯失敗。筆者共享了一個.classpath文件,讀者可從http://download.csdn.net/detail/innost/4247578下載并直接使用。
單擊Eclipse菜單欄New->Java Project,彈出如圖1-12所示的對話框。設置Location為Android4.0源碼所在路徑。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image012.png" alt="image" />
圖1-12? 導入Android源碼示意圖
由于Android 4.0源碼文件較多,導入過程會持續(xù)較長一段時間,大概10幾分鐘左右。
注意導入源碼前一定要取消Eclipse的自動編譯選項(通過菜單欄Project->BuildProject Automatically設置)。另外,源碼導入完畢后,讀者千萬不要清理(clean)這個工程。清理會刪除之前源碼編譯所生成的文件,導致后續(xù)又得重新編譯Android系統(tǒng)了。
單擊Eclipse菜單欄Window->AVD Manager,創(chuàng)建模擬器,如圖1-13所示。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image013.png" alt="image" />
圖1-13? 模擬器創(chuàng)建示意圖
模擬器創(chuàng)建完畢后即可啟動它。
調試SystemServer的步驟如下:
·??首先編譯Android源碼工程。編譯過程中會有很多警告。如果有錯誤,大部分原因是.classpath文件將不需要的模塊包含了進來。讀者可根據Eclipse的提示做相應處理。筆者配置的幾臺機器基本都是一次配置就成功了。
·??在Android源碼工程上單擊右鍵,依次單擊Debug As->Debug Configurations,彈出如圖1-14所示的對話框,然后從左邊找到RemoteJava Application一欄。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image014.png" alt="image" />
圖1-14? Debug配置框示意圖
·??單擊圖1-14中黑框中的新建按鈕,然后按圖1-15中的黑框中的內容來設置該對話框。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image015.png" alt="image" />
圖1-15? Remote Java Application配置示意圖
由圖1-15所示,需要選擇Remote調試端口號為8600,Host類型為localhost。8600是SystemServer進程的調試端口號。Eclipse一旦連接到該端口,即可通過JDWP協(xié)議來調試SystemServer。
·??配置完畢后,單擊圖1-15右下角的Debug按鈕,即可啟動SystemServer的調試。
圖1-16所示為筆者調試startActivity流程的示意圖。
http://wiki.jikexueyuan.com/project/deep-android-v2/images/chapter1/image016.png" alt="image" />
圖1-16? SystemServer調試效果圖
本章對Android系統(tǒng)和源碼搭建,以及如何利用Eclipse調試SystemServer等做了相關介紹,相信讀者現在已經迫不及待了吧?馬上開始我們的源碼征程!
版權聲明:本文為博主原創(chuàng)文章,未經博主允許不得轉載。