[深入理解Android卷二 全文-第一章]開發環境部署
由於《深入理解Android 卷一》和《深入理解Android卷二》不再出版,而知識的傳播不應該因為紙質媒介的問題而中斷,所以我將在CSDN部落格中全文轉發這兩本書的全部內容。
第1章 開發環境部署
本章主要內容:
簡單介紹本書內容的架構、編譯環境的搭建以及如何利用Eclipse除錯SystemServer程式。
1.1 系統架構
到目前為止,Android系統的最新版本是4.0.3。而就在本書即將完稿之時,業界有傳聞說Android 4.0.4版本已經對大廠商釋出。Android系統推出速度之快讓很多開發人員都很驚訝。當然,推出的速度如此之快有一些是出於商業上的考慮。不管怎樣,Android系統在進化過程中,其大體架構相對保持穩定。圖1-1為Android的系統架構圖。
圖1-1 Android系統架構
相信絕大多數讀者對圖1-1或類似圖表的內容已經司空見慣。此處,我們就不再贅述。
本書作為“深入理解Android”系列的第二卷,從內容上將承接《深入理解Android:卷I》(本書以後簡稱“卷I”)的內容,但是本書關注的焦點將從Native層Framework轉移到Java層Framework。本書涵蓋的內容如圖1-2所示。
圖 1-2 本書涵蓋的內容
從圖1-2中,讀者可發現本書的大部分內容都在討論Service。確實如此。因為Android Java層Framework的核心就是這些Service。毫不誇張地說,正是這些Service支撐了整個Java層世界的運轉。讀者可參考第3章的圖3-1來了解Framework中Service的概貌。
1.2 搭建開發環境
本節將討論Android 4.0原始碼下載、Eclipse開發環境,以及如何除錯SystemServer程式等相關知識。
1.2.1 下載原始碼
Android 2.3以後,Google官方推薦使用64位的作業系統來編譯原始碼。所以,讀者要先安裝64位的OS。筆者推薦的作業系統是Ubuntu 10.04 X86-64版。另外,讀者不要隨意升級Ubuntu,因為高版本Ubuntu中自帶的GCC版本過高,會導致編譯Android原始碼時出問題。
提示其實32位的Ubuntu也可以編譯Android 2.3以後的Android系統,但弄起來頗為麻煩,而且也沒什麼技術含量。筆者建議讀者遵照官方要求去做即可。
筆者不打算過多討論Android原始碼下載的步驟,原因是:這是一個需要讀者動手操作的過程,而看著電腦螢幕操作比看書後輸入大串的字串的效率要高很多。
基於上面這個原因,這裡筆者向讀者提供一個官方說明文件,地址是http://source.android.com/source/downloading.html。該網頁中有詳細的程式碼下載步驟,讀者只要執行簡單的複製/貼上操作即可動手實驗。如圖圖1-3所示為該網頁的截圖。
圖1-3 Android程式碼下載網頁示意圖
注意讀者要選擇下載Android 4.0.1的程式碼。雖然最新的Android 4.0.3版本從版本號上看變化不大,但實際程式碼卻有較大變化。
另外,由於網路環境不佳,如果讀者發現本章提供的下載地址無法連線,可從筆者部落格上的連結去下載原始碼和工具,部落格地址是:http://blog.csdn.net/innost/article/details/7525205。
1.2.2 編譯原始碼
1. 部署JDK
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目錄下,然後在這個目錄中執行:
./ jdk-6u27-linux-x64.bin #執行這個檔案
這個命令的作用其實就是解壓。解壓後的結果在/mnt/hgfs/E/jdk1.6.0_27目錄中。有了JDK後,還需要設定~/.bashrc檔案。在該檔案末尾新增如圖1-4所示的幾行語句:
圖1-4 Java環境部署示意圖
重新登入系統後,Java環境就新增到系統中了。
2. 編譯原始碼
原始碼編譯的步驟非常簡單。我們在卷I也詳細介紹編譯方法。不過本書要求讀者必須先編譯整個系統,步驟如下:
· 執行source build/envsetup.sh命令。該命令將匯入Android編譯環境。
· 輸入choosecombo並執行,它是envsetup.sh中定義的一個函式。在執行過程中,分別選擇release、generic、eng即可。最終螢幕輸出如圖1-5所示。
圖1-5 編譯設定效果圖
· 執行make命令以編譯整個系統。編譯時間由機器配置決定。筆者的4核4GB機器的編譯時間大概在2小時左右。
1.2.3 利用Eclipse除錯SystemServer
本節將介紹如何利用Eclipse來除錯Android Java Framework的核心程式SystemServer。
1. 配置Eclipse
首先要下載Android SDK。下載地址為http://developer.android.com/sdk/index.html。在Linux環境下,該網站截圖如圖1-6所示。
圖1-6 AndroidSDK下載網頁示意圖
筆者下載的是Linux系統上的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所示。
圖1-7 SDK安裝示意圖
· 單擊Eclipse選單欄Window->Android SDK Manager,彈出一個對話方塊,如圖1-8所示。
圖1-8 Android SDK Manager對話方塊
在圖1-8中選擇下載其中的Tools和對應版本的SDK文件、映象檔案、開發包等。有條件的讀者可以將Android 4.0.3和4.0對應的內容及Tools全部下載過來。
2. 使用Coffee Bytes Java外掛
Coffee BytesJava是Eclipse的一個外掛,用於對程式碼進行摺疊,其功能比Eclipse自帶的程式碼摺疊功能強大多了。對於大段程式碼的研究,該外掛的作用功不可沒。此外掛的安裝和配置步驟如下:
· 單擊Eclipse選單欄Help->Install New Software,在彈出的對話方塊中輸入http://eclipse.realjenius.com/update-site,選擇安裝這個外掛即可。
· 單擊Eclipse選單欄Window->Preference,在左上角輸入Folding進行搜尋,結果如圖1-9所示。
圖1-9 Coffee Bytes Java 外掛配置
在圖1-9所示的對話方塊中,要先開啟Enablefolding選項,然後從Select foldingto use框中選擇CoffeeBytes Java Folding。圖1-9右下部分的勾選框用來配置此外掛的程式碼摺疊功能。讀者不妨按照圖1-9所示來配置它。使用該外掛後的示意圖如圖1-10所示。
如果不關心else if分支,就可以把這段程式碼摺疊起來 |
圖1-10 Coffee Bytes Java外掛的使用示例
從圖1-10中可看到,使用該外掛後,基本上程式碼中所有分支都可以摺疊起來,該功能將幫助開發人員集中精力關注自己所關心的分支。
3. 匯入Android原始碼
注意,這一步必須編譯完整個Android原始碼才可以實施,步驟如下:
· 複製Android原始碼目錄/development/ide/eclipse/.classpath到Android原始碼根目錄。
· 開啟Andriod原始碼根目錄下的.classpath檔案。該檔案是供Eclipse使用的,其中儲存的是原始碼目錄中各個模組的路徑。由於我們只關心Framework相關的模組,因此可以把一些不是Framework的目錄從該檔案中註釋掉。同時,去掉不必要的模組也可加快Android原始碼匯入速度。圖1-11所示為該檔案的部分內容。
圖1-11.classpath檔案部分檔案內容
另外,一些不必要的模組會導致後續在Eclipse中Android原始碼編譯失敗。筆者共享了一個.classpath檔案,讀者可從http://download.csdn.net/detail/innost/4247578下載並直接使用。
單擊Eclipse選單欄New->Java Project,彈出如圖1-12所示的對話方塊。設定Location為Android4.0原始碼所在路徑。
圖1-12 匯入Android原始碼示意圖
由於Android 4.0原始碼檔案較多,匯入過程會持續較長一段時間,大概10幾分鐘左右。
注意匯入原始碼前一定要取消Eclipse的自動編譯選項(通過選單欄Project->BuildProject Automatically設定)。另外,原始碼匯入完畢後,讀者千萬不要清理(clean)這個工程。清理會刪除之前原始碼編譯所生成的檔案,導致後續又得重新編譯Android系統了。
4. 建立並執行模擬器
單擊Eclipse選單欄Window->AVD Manager,建立模擬器,如圖1-13所示。
圖1-13 模擬器建立示意圖
模擬器建立完畢後即可啟動它。
5. 除錯SystemServer
除錯SystemServer的步驟如下:
· 首先編譯Android原始碼工程。編譯過程中會有很多警告。如果有錯誤,大部分原因是.classpath檔案將不需要的模組包含了進來。讀者可根據Eclipse的提示做相應處理。筆者配置的幾臺機器基本都是一次配置就成功了。
· 在Android原始碼工程上單擊右鍵,依次單擊Debug As->Debug Configurations,彈出如圖1-14所示的對話方塊,然後從左邊找到RemoteJava Application一欄。
圖1-14 Debug配置框示意圖
· 單擊圖1-14中黑框中的新建按鈕,然後按圖1-15中的黑框中的內容來設定該對話方塊。
圖1-15 Remote Java Application配置示意圖
由圖1-15所示,需要選擇Remote除錯埠號為8600,Host型別為localhost。8600是SystemServer程式的除錯埠號。Eclipse一旦連線到該埠,即可通過JDWP協議來除錯SystemServer。
· 配置完畢後,單擊圖1-15右下角的Debug按鈕,即可啟動SystemServer的除錯。
圖1-16所示為筆者除錯startActivity流程的示意圖。
圖1-16 SystemServer除錯效果圖
1.3 本章小結
本章對Android系統和原始碼搭建,以及如何利用Eclipse除錯SystemServer等做了相關介紹,相信讀者現在已經迫不及待了吧?馬上開始我們的原始碼征程!
相關文章
- [深入理解Android卷二 全文-第五章]深入理解PowerManagerServiceAndroid
- [深入理解Android卷二 全文-第六章]深入理解ActivityManagerServiceAndroid
- [深入理解Android卷二 全文-第四章]深入理解PackageManagerServiceAndroidPackage
- [深入理解Android卷二 全文-第三章]深入理解SystemServerAndroidServer
- [深入理解Android卷二 全文-第二章]深入理解Java Binder和MessageQueueAndroidJava
- [深入理解Android卷一全文-第十章]深入理解MediaScannerAndroid
- [深入理解Android卷一全文-第八章]深入理解Surface系統Android
- [深入理解Android卷一全文-第七章]深入理解Audio系統Android
- [深入理解Android卷一全文-第九章]深入理解Vold和RildAndroid
- 深入淺出理解 Spark:環境部署與工作原理Spark
- 《深入理解Android:卷IIIA》一一2.4本章小結Android
- 深入理解AndroidAndroid
- 深入理解 GCD(二)GC
- 五步搞定Android開發環境部署——非常詳細的Android開發環境搭建教程Android開發環境
- 規範:開發環境部署開發環境
- 圖解 Android 系列(二)深入理解 init 與 zygote 程式圖解AndroidGo
- 深入理解 iOS 開發中的鎖iOS
- 深入 Git 和開發規範(二)Git
- iOS開發筆記(七):深入理解 AutoreleaseiOS筆記
- iOS開發NSTimer的深入理解iOS
- 非同步(二):Generator深入理解非同步
- JEESZ分散式框架開發環境部署分散式框架開發環境
- 深入理解JVM(二)——揭開HotSpot物件建立的奧祕JVMHotSpot物件
- 深入理解rtmp(一)之開發環境搭建開發環境
- 深入理解jQuery外掛開發總結(三)jQuery
- 深入理解jQuery外掛開發總結(一)jQuery
- 移動前端開發之viewport的深入理解前端View
- iOS:iOS8開發 深入理解autolayout(3)iOS
- Android 深入理解 Notification 機制Android
- 深入理解 Android 中的 MatrixAndroid
- 深入理解Java中的鎖(二)Java
- 深入理解hashmap(二)理論篇HashMap
- 深入理解Plasma(二)Plasma 細節ASM
- 機器學習:深入理解LSTM網路 (二)機器學習
- Android執行緒篇(四)深入理解Java執行緒池(二)Android執行緒Java
- 聯合國開發計劃署:2023年聯合國開發計劃署年度報告
- 深入理解 Android ANR 觸發原理以及資訊收集過程Android
- [深入理解Java虛擬機器]第一章 走進JavaJava虛擬機