首先感謝各位兄弟姐妹們的耐心等待。本書預計在3月中旬上市發售。從今天開始,我將在博客中連載此書的一些內容。注意,此處連載的是未經出版社編輯的原始稿件,因此樣子會有些非專業。android
[要點:建議那些還在拿vim看代碼的兄弟,趕忙用source insight或者eclipse吧。編程
對於搞Framework的人,必需要掌握的技能就是用Eclipse調試System_server代碼vim
最後,沒有代碼,airpcap工具的兄弟,請下載本書資源]架構
本章主要內容:eclipse
Android是Google公司推出的一款手機開發平臺。該平臺自己是基於Linux內核的,圖1-1展現了這個系統的架構。編程語言
圖1-1 Android系統架構ide
從圖1-1可知,Android系統大致可分爲四層,從下往上依次是:工具
本節介紹Android開發和源碼研究過程當中的三件利器。源碼分析
Source Insight是閱讀源碼的必備工具,是一個Windows下的軟件,在Linux平臺上可經過wine安裝。下面介紹一下如何在Source Insight中導入源碼。post
使用Source Insight時,須要新建一個源碼工程,經過菜單項Project→New Project,可指定源碼的目錄。
提示 特別提醒讀者的是,不少讀者常把Android全部源代碼都加到工程中,這將致使Source Insight運行速度很是慢。
實際上,只須要將當前分析的源碼目錄加到工程便可。例如,新建一個Source Insight工程後,只把源碼/framework/base目錄加進去了。另外,當一個目錄下的源碼分析完後,能夠經過Project→Add and Remove Project Files選項把無須再分析的目錄從工程中去掉。上述步驟如圖1-2所示。
圖1-2 添加或刪除工程中的目錄
從圖1-2右邊的框可知:Source Insight支持動態添加或刪除目錄。經過這種方式可極大減小Source Insight的工做負擔。
提示:通常首先把framework/base下的目錄加到工程,之後若有須要,再把其餘目錄加進來。另外,關於Source Insight其餘使用技巧,讀者可參考《深刻理解Android:卷1》第1章。
筆者通常使用Source Insight來查看Native代碼,而Android推薦的集成開發工具Eclipse卻既能查看Java代碼和Native代碼,也能調試系統核心進程。
注意,這一步必須編譯完整個Android源碼才能夠實施,步驟以下:
1) 將Android源碼目錄/development/ide/eclipse/.classpath複製到Android源碼根目錄。
2) 打開Android源碼根目錄下的.classpath文件。該文件是供Eclipse使用的,其中保存的是源碼目錄中各個模塊的路徑。
因爲咱們只關心Framework相關的模塊,所以能夠把一些不是Framework的目錄從該文件中註釋掉。同時,去掉沒必要要的模塊也可加快Android源碼導入速度。圖1-3所示爲該文件的部份內容。
圖1-3 .classpath文件內容示意
而後,請讀者單擊Eclipse菜單欄New->Java Project,彈出如圖1-4所示的對話框。設置Location爲Android 4.2源碼所在路徑。
圖1-4 導入Android源碼示意圖
因爲Android 4.2源碼文件較多,導入過程會持續較長一段時間。
提示:
1)導入源碼前必定要取消Eclipse的自動編譯選項(經過菜單欄Project→Build Project Automatically設置)。另外,源碼導入完畢後,讀者千萬不要清理(clean)這個工程。清理會刪除以前源碼編譯所生成的文件,致使後續又得從新編譯Android系統了。
2)筆者在本書的共享資源中提供了一個已經配置好的.classpath文件,請讀者下載並使用它。
本節介紹如何在Eclipse中導入Android Native代碼,其步驟以下所示:
圖1-5 轉換成C++工程示意
按照圖1-5操做以後,以前的Java工程就被轉成了C++工程。不過讀者仍須要完成如下幾個步驟。
1) 經過Properties→C/C++ General→Paths and symbols,打開該工程的路徑和符號設置對話。如圖1-6所示。
圖1-6 路徑和符號設置
2)在圖1-6上邊的框中選擇Includes頁面,而後點擊下方框中的Import Settings,而後選擇4.2源碼/development/ide/eclipse/android-include-paths.xml以導入路徑配置。
3) 同上,再選擇圖1-6中的Symbols頁面,而後經過下方框中的Import Settings以導入4.2源碼/development/ide/eclipse/android-symbols.xml文件。
以上配置好路徑和符號文件後,讀者可進一步經過圖1-6上框中的Source Location頁面選擇這次須要導入的C++文件。這一步如圖1-7所示。
圖1-7 過濾C++文件
經過圖1-7中Add Folder選項,讀者能夠選擇哪些目錄下的C++文件被過濾掉。筆者目前僅導入了frameworks目錄下的Native代碼。
當全部文件都導入完畢後,讀者經過右擊C++工程,而後選擇Index→Rebuild來從新生成Native代碼的索引。
至此,經過上述方法就能導入Android中的Native代碼了。
調試SystemServer的步驟以下:
1) 首先編譯Android源碼工程。編譯過程當中會有不少警告。若是有錯誤,大部分緣由是.classpath文件將不須要的模塊包含了進來。讀者可根據Eclipse的提示作相應處理。筆者配置的幾臺機器基本都是一次配置就成功了。
2) 在Android源碼工程上單擊右鍵,依次單擊Debug As→Debug Configurations,彈出如圖1-8所示的對話框,而後從左邊找到Remote Java Application一欄。
圖1-8 Debug配置框示意圖
3) 單擊圖1-8中黑框中的新建按鈕,而後按圖1-9中的黑框中的內容來設置該對話框。
圖1-9 Remote Java Application配置示意圖
由圖1-9所示,須要選擇Remote調試端口號爲8600,Host類型爲localhost。8600是SystemServer進程的調試端口號。Eclipse一旦鏈接到該端口,便可經過JDWP協議來調試SystemServer。
提示:讀者也可閱讀《深刻理解Android:卷2》第1章來了解更多使用Eclipse的建議。
BusyBox,號稱Linux平臺上的「瑞士軍刀」,它提供了不少經常使用的工具,例如grep、find等。這些工具在標準Linux上都有,但Android系統卻去掉了其中的大多數工具。這致使了咱們在調試程序、研究Android系統時寸步難行,因此就須要在手機上安裝BusyBox。
可從網站http://www.busybox.net/downloads/binaries/1.21.1/下載已編譯好的BusyBox,如圖1-10所示。
圖1-10 BusyBox下載
注意該網站已經根據不一樣平臺編譯好了對應的BusyBox,咱們可根據本身手機的狀況下載對應的文件。筆者下載了支持Galaxy Note 2的busybox-armv7l。
提高:arm v7表示ARM指令集爲v7,目前ARM Cortex-A8/A9系列的CPU支持該指令集。
下載完BusyBox後,需將它adb push到手機上。如:
adb push busybox /system/xbin #爲了不衝突,筆者push到了/system/xbin目錄下
cd /system/xbin #進入對應目錄
chmod 755 busybox #更改busybox權限爲可執行
busybox –-install . #安裝busybox
grep #執行busybox提供的grep命令,或者busybox xxx執行xxx命令也行
BusyBox安裝完了,如執行busybox命令,就會打印如圖1-11的輸出。
圖1-11 BusyBox提供的工具
從上圖中可看出,BusyBox提供了很多的工具,這樣,咱們在研究Android系統時就如虎添翼了。
提示:本書共享資源中提供了busybox-armv7l的下載。
爲了減輕國內讀者沒法從Android官網上下載源碼的煩惱,筆者在115網盤上分享了本書所使用的Android源碼及其餘一些資源,如圖1-12所示。
圖1-12 本書資源
圖1-12中:
最後,該資源的下載地址是http://115.com/lb/5lbdugrdt4r。另外,請讀者務必關注筆者的博客blog.csdn.net/innost以獲取更新信息。
[1] 4.4新增了一個名爲ART的虛擬機運行時,相信它的出現能提高應用程序的運行速度。
[2]其用法請參考《深刻理解Android:卷2》第1章。其電子版下載地址爲http://download.csdn.net/detail/innost/4408140。