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

來源:互聯網
上載者:User

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

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

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

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

第一章  準備工作

本章主要內容:

  • 介紹本書的內容組成;
  • 工具使用;
  • 本書資源下載說明。
1.1  Android系統架構

Android是Google公司推出的一款手機開發平台。該平台本身是基於Linux核心的,圖1-1展示了這個系統的架構。

圖1-1  Android系統架構

從圖1-1可知,Android系統大體可分為四層,從下往上依次是:

  •  Linux核心層,目前Android 4.4(代號為KitKat)基於Linux核心3.4版本。
  • Libraries層,這一層提供動態庫(也叫共用庫)、Android執行階段程式庫、Dalvik虛擬機器[1]等。從程式設計語言上來說,這一層大部分都是用C或C++寫的,所以也可以簡單地把它看成是Native層。
  • Libraries層之上是Framework層,這一層大部分用Java語言編寫。它是Android平台上Java世界的基石。
  • Framework層之上就是Applications層了,和使用者直接互動的就是這些應用程式,它們都是用Java開發的。
1.2 工具使用

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

1.2.1  Source Insight的使用

Source Insight是閱讀源碼的必備工具,是一個Windows下的軟體,在Linux平台上可通過wine安裝。下面介紹一下如何在Source Insight中匯入源碼。

使用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章。

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所示的對話方塊。設定Location為Android 4.2源碼所在路徑。

圖1-4  匯入Android源碼

由於Android 4.2源碼檔案較多,匯入處理程序會持續較長一段時間。

提示:

1)匯入源碼前一定要取消Eclipse的自動編譯選項(通過功能表列Project→Build Project Automatically設定)。另外,源碼匯入完畢後,讀者千萬不要清理(clean)這個工程。清理會刪除之前源碼編譯所產生的檔案,導致後續又得重新編譯Android系統了。

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

2.  匯入Android Native代碼

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

  • 匯入Android Framework中的Java檔案後,首先切換到C/C++視圖(通過單擊功能表列Window→Open Perspective→選擇C/C++)。
  • 單擊功能表列New→C/C++,然後選擇Convert to a C/C++ project。1-5所示:

圖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代碼了。

3.  調試SystemServer

調試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的建議。

1.2.3  BusyBox的使用

BusyBox,號稱Linux平台上的“瑞士軍刀”,它提供了很多常用的工具,例如grep、find等。這些工具在標準Linux上都有,但Android系統卻去掉了其中的大多數工具。這導致了我們在偵錯工具、研究Android系統時步履維艱,所以就需要在手機上安裝BusyBox。

1.  下載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支援該指令集。

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.gz為4.2.2源碼壓縮包。請讀者特別注意,本書對wpa_supplicant的分析使用的是Android 4.1源碼中的wpa_supplicant,故筆者在external目錄中將4.1版本中的wpa_supplicant代碼複製到wpa_supplicant_8_4.1中。
  • classpath為Android Java設定檔,使用時請將它改名為.classpath。
  • busybox-armv7l是BusyBox。
  • com.cb.eclipse.folding_1.0.6.jar是一個Eclipse的外掛程式,名叫Coffee Byte Java,它可以摺疊程式碼片段以方便閱讀[2]。
  • 最後四個檔案為筆者研究Wi-Fi時利用Wi-Fi資料截獲工具AirPcap儲存的相關協議資料包,其中p2p_cap為測試P2P時儲存的資料包,wps_pbc和wps_pin為測試WSC PBC和PIN時儲存的資料包,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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.