《深刻理解Android:Wi-Fi,NFC和GPS》章節連載[節選]--第一章 準備工做

首先感謝各位兄弟姐妹們的耐心等待。本書預計在3月中旬上市發售。從今天開始,我將在博客中連載此書的一些內容。注意,此處連載的是未經出版社編輯的原始稿件,因此樣子會有些非專業。android

[要點:建議那些還在拿vim看代碼的兄弟,趕忙用source insight或者eclipse吧。編程

對於搞Framework的人,必需要掌握的技能就是用Eclipse調試System_server代碼vim

最後,沒有代碼,airpcap工具的兄弟,請下載本書資源]架構

第一章  準備工做

本章主要內容:eclipse

  • 介紹本書的內容組成;
  • 工具使用;
  • 本書資源下載說明。

1.1  Android系統架構

AndroidGoogle公司推出的一款手機開發平臺。該平臺自己是基於Linux內核的,圖1-1展現了這個系統的架構。編程語言

1-1  Android系統架構ide

從圖1-1可知,Android系統大致可分爲四層,從下往上依次是:工具

  •  Linux內核層,目前Android 4.4(代號爲KitKat)基於Linux內核3.4版本。
  • Libraries層,這一層提供動態庫(也叫共享庫)、Android運行時庫、Dalvik虛擬機[1]等。從編程語言上來講,這一層大部分都是用CC++寫的,因此也能夠簡單地把它當作是Native層。
  • Libraries層之上是Framework層,這一層大部分用Java語言編寫。它是Android平臺上Java世界的基石。
  • Framework層之上就是Applications層了,和用戶直接交互的就是這些應用程序,它們都是用Java開發的。

1.2 工具使用

本節介紹Android開發和源碼研究過程當中的三件利器。源碼分析

1.2.1  Source Insight的使用

Source Insight是閱讀源碼的必備工具,是一個Windows下的軟件,在Linux平臺上可經過wine安裝。下面介紹一下如何在Source Insight中導入源碼。post

使用Source Insight時,須要新建一個源碼工程,經過菜單項ProjectNew Project,可指定源碼的目錄。

提示  特別提醒讀者的是,不少讀者常把Android全部源代碼都加到工程中,這將致使Source Insight運行速度很是慢。

實際上,只須要將當前分析的源碼目錄加到工程便可。例如,新建一個Source Insight工程後,只把源碼/framework/base目錄加進去了。另外,當一個目錄下的源碼分析完後,能夠經過ProjectAdd and Remove Project Files選項把無須再分析的目錄從工程中去掉。上述步驟如圖1-2所示。

1-2  添加或刪除工程中的目錄

從圖1-2右邊的框可知:Source Insight支持動態添加或刪除目錄。經過這種方式可極大減小Source Insight的工做負擔。

提示:通常首先把framework/base下的目錄加到工程,之後若有須要,再把其餘目錄加進來。另外,關於Source Insight其餘使用技巧,讀者可參考《深刻理解Android:卷1》第1章。

1.2.2  Eclipse的使用

筆者通常使用Source Insight來查看Native代碼,而Android推薦的集成開發工具Eclipse卻既能查看Java代碼和Native代碼,也能調試系統核心進程。

1.  導入Android Framework Java源碼

注意,這一步必須編譯完整個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所示的對話框。設置LocationAndroid 4.2源碼所在路徑。

1-4  導入Android源碼示意圖

因爲Android 4.2源碼文件較多,導入過程會持續較長一段時間。

提示:

1)導入源碼前必定要取消Eclipse的自動編譯選項(經過菜單欄ProjectBuild Project Automatically設置)。另外,源碼導入完畢後,讀者千萬不要清理(clean)這個工程。清理會刪除以前源碼編譯所生成的文件,致使後續又得從新編譯Android系統了。

2)筆者在本書的共享資源中提供了一個已經配置好的.classpath文件,請讀者下載並使用它。

2.  導入Android Native代碼

本節介紹如何在Eclipse中導入Android Native代碼,其步驟以下所示:

  • 導入Android Framework中的Java文件後,首先切換到C/C++視圖(經過單擊菜單欄WindowOpen Perspective→選擇C/C++)。
  • 單擊菜單欄NewC/C++,而後選擇Convert to a C/C++ project。如圖1-5所示:

1-5  轉換成C++工程示意

按照圖1-5操做以後,以前的Java工程就被轉成了C++工程。不過讀者仍須要完成如下幾個步驟。

1) 經過PropertiesC/C++ GeneralPaths 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-7Add Folder選項,讀者能夠選擇哪些目錄下的C++文件被過濾掉。筆者目前僅導入了frameworks目錄下的Native代碼。

當全部文件都導入完畢後,讀者經過右擊C++工程,而後選擇IndexRebuild來從新生成Native代碼的索引。

至此,經過上述方法就能導入Android中的Native代碼了。

3.  調試SystemServer

調試SystemServer的步驟以下:

1) 首先編譯Android源碼工程。編譯過程當中會有不少警告。若是有錯誤,大部分緣由是.classpath文件將不須要的模塊包含了進來。讀者可根據Eclipse的提示作相應處理。筆者配置的幾臺機器基本都是一次配置就成功了。

2)  在Android源碼工程上單擊右鍵,依次單擊Debug AsDebug Configurations,彈出如圖1-8所示的對話框,而後從左邊找到Remote Java Application一欄。

1-8  Debug配置框示意圖

3) 單擊圖1-8中黑框中的新建按鈕,而後按圖1-9中的黑框中的內容來設置該對話框。

1-9  Remote Java Application配置示意圖

由圖1-9所示,須要選擇Remote調試端口號爲8600Host類型爲localhost8600SystemServer進程的調試端口號。Eclipse一旦鏈接到該端口,便可經過JDWP協議來調試SystemServer

提示:讀者也可閱讀《深刻理解Android:卷2》第1章來了解更多使用Eclipse的建議。

1.2.3  BusyBox的使用

BusyBox,號稱Linux平臺上的「瑞士軍刀」,它提供了不少經常使用的工具,例如grepfind等。這些工具在標準Linux上都有,但Android系統卻去掉了其中的大多數工具。這致使了咱們在調試程序、研究Android系統時寸步難行,因此就須要在手機上安裝BusyBox

1.  下載BusyBox

可從網站http://www.busybox.net/downloads/binaries/1.21.1/下載已編譯好的BusyBox,如圖1-10所示。

1-10  BusyBox下載

注意該網站已經根據不一樣平臺編譯好了對應的BusyBox,咱們可根據本身手機的狀況下載對應的文件。筆者下載了支持Galaxy Note 2busybox-armv7l

提高:arm v7表示ARM指令集爲v7,目前ARM Cortex-A8/A9系列的CPU支持該指令集。

2.  安裝和使用BusyBox

下載完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的下載。

1.3  本書資源下載說明

爲了減輕國內讀者沒法從Android官網上下載源碼的煩惱,筆者在115網盤上分享了本書所使用的Android源碼及其餘一些資源,如圖1-12所示。

1-12  本書資源

1-12中:

  • 4.2.2.tar.gz4.2.2源碼壓縮包。請讀者特別注意,本書對wpa_supplicant的分析使用的是Android 4.1源碼中的wpa_supplicant,故筆者在external目錄中將4.1版本中的wpa_supplicant代碼複製到wpa_supplicant_8_4.1中。
  • classpathAndroid Java配置文件,使用時請將它更名爲.classpath
  • busybox-armv7lBusyBox
  • com.cb.eclipse.folding_1.0.6.jar是一個Eclipse的插件,名叫Coffee Byte Java,它能夠摺疊代碼段以方便閱讀[2]
  • 最後四個文件爲筆者研究Wi-Fi時利用Wi-Fi數據截獲工具AirPcap保存的相關協議數據包,其中p2p_cap爲測試P2P時保存的數據包,wps_pbcwps_pin爲測試WSC PBCPIN時保存的數據包,wpa_supplicant_analysis爲測試STA加入AP時所保存的數據包。沒有AirPcap工具的讀者可經過Wireshark工具直接導入這些數據以更直觀得方式來分析Wi-Fi

最後,該資源的下載地址是http://115.com/lb/5lbdugrdt4r。另外,請讀者務必關注筆者的博客blog.csdn.net/innost以獲取更新信息。


[1] 4.4新增了一個名爲ART的虛擬機運行時,相信它的出現能提高應用程序的運行速度。

[2]其用法請參考《深刻理解Android:卷2》第1章。其電子版下載地址爲http://download.csdn.net/detail/innost/4408140

相關文章
相關標籤/搜索