本系列文章只為學習交流,切勿商業裝載,查看原文可查看作者[官方博客](http://blog.csdn.net/Innost)
### 內容簡介
本書是經典暢銷書“深入理解Android”系列的新作,由資深Android系統專家鄧凡平先生撰寫。從通信專業知識和Android系統代碼實現的角度,對Netd、Wi-Fi、NFC和GPS等模塊的代碼進行深入的剖析,旨在深刻揭示其實現原理和工作流程。其中涉及大量通信相關的專業知識,因此特意邀請全志和高通等著名芯片公司的資深專家擔任技術審校。本書從實際應用的需求出發,適合所有Android系統工程師、Android應用開發工程師和BSP開發工程師閱讀。
全書共9章。第1章介紹本書的內容組成、工具使用以及參考源碼的下載方法。第2章介紹Netd及相關的背景知識。第3~5章介紹Wi-Fi基礎知識,重點分析了wpa_supplicant的實現,以及Android平臺中特有的Wi-Fi服務模塊WifiService。第6~7章講解了Wi-Fi聯盟推出的兩項重要技術Wi-Fi Simple Configuration和Wi-Fi P2P,以及它們在Android平臺中的代碼實現。第8章詳細介紹了NFC基礎知識,以及NFC在Android平臺中的代碼實現。第9章講解了GPS原理及Android平臺中的位置管理服務架構。
### 本書主要內容及特色
本書所講解的Wi-Fi、NFC以及GPS模塊的背后都涉及非常多的專業知識,例如與Wi-Fi相關的802.11協議、Wi-Fi Alliance(Wi-Fi聯盟)定義的Wi-Fi Simple Configuration和Wi-Fi P2P協議、NFC Forum定義的一整套與NFC相關的協議、與GPS相關的衛星導航原理、AGPS和OMA-SUPL協議等。顯然,如果不了解這些專業知識,就不可能真正掌握它們在Android平臺中的代碼實現。
考慮到這些專業知識的重要性,本書在講解Android平臺中Wi-Fi、NFC和GPS模塊的實現之前,先重點介紹與代碼相關的專業知識。當然,這些專業知識內容如此豐富,在一本書中無法全部涵蓋。為了方便讀者進一步深入學習,本書每章的最后都會列舉筆者在撰寫各章時所閱讀的參考資料。
本書是筆者“深入理解Android”系列的第三本書,也是該系列專題卷的第二本書[①]。本書將關注Android平臺中非常重要并且專業背景知識很濃厚的Wi-Fi、NFC和GPS等模塊。相比筆者早前所撰寫的卷I、卷II,本書和它們的區別在于:
卷I和卷II的內容幾乎沒有涉及到什么專業知識。讀者只要認真研讀代碼,提高代碼閱讀能力之后就可以輕松掌握它們。
而本書所講解的Wi-Fi、NFC以及GPS模塊的背后都有著非常多的專業知識,例如與Wi-Fi相關的802.11協議、Wi-Fi Alliance定義的Wi-Fi Simple Configuration和Wi-Fi P2P協議、NFC Forum定義的一整套與NFC相關的協議、與GPS相關的衛星導航原理、AGPS和OMA-SUPL協議等等等等。顯然,如果不了解這些專業知識,讀者將不可能真正掌握它們在Android平臺中的代碼實現。
考慮到這些專業知識的重要性,本書在講解Android平臺中Wi-Fi、NFC和GPS模塊的實現之前,都將先行重點介紹與代碼相關的專業知識。當然,這些專業知識內容如此豐富,筆者在一本書中無法全部涵蓋它們。為了方便讀者進一步深入學習,本書每章的最后都會列舉出筆者在撰寫它們時所閱讀的參考文獻。
以下是本書的內容概述。
※ 第1章介紹本書的內容組成、使用的工具以及參考源碼的下載方法。
※ 第2章介紹Netd以及相關的背景知識。
※ 第3章介紹Wi-Fi基礎知識。Wi-Fi是本章的重點,而且也是當下最熱門的技術。
※ 第4章介紹wpa_supplicant,它是Wi-Fi領域中最核心的軟件實現。
※ 第5章介紹WifiService,它是Android平臺中特有的Wi-Fi服務模塊。
※ 第6章和第7章介紹Wi-Fi Alliance推出的兩項重要技術——Wi-Fi Simple Configuration和Wi-Fi P2P,以及它們在Android平臺中的代碼實現。
※ 第8章介紹NFC背景知識以及NFC在Android平臺中的代碼實現。NFC也是歷史比較悠久的技術,希望它能隨著Android的普及而走向大眾。
※ 第9章介紹GPS原理及Android平臺中的位置管理服務架構。
附錄為筆者和審稿專家之一的吳勁良先生關于本書定位、學習方法等方面的討論。相信這些討論內容能引起讀者的共鳴。
本書通過理論和代碼相結合的方式進行講解,旨在引領讀者一步步了解Wi-Fi、NFC和GPS模塊的工作原理。總之,筆者希望讀者在閱讀完本書后能有以下收獲。
※ 初步掌握Wi-Fi、NFC和GPS的專業知識。
※ 根據其實現代碼,進一步加深對這些專業知識的理解。
**讀者對象**
適合閱讀本書的讀者包括:
※ Android系統開發工程師
系統開發工程師常常需要深入理解系統的運轉過程,而本書所涉及的內容正是他們在工作和學習中最想了解的。對具體模塊感興趣的讀者也可單刀直入,閱讀相關章節。
※ Wi-Fi、NFC或GPS的BSP開發工程師
BSP開發工程師更需要對Android平臺中這些模塊的工作原理及背景知識有深入的理解。雖然本書沒有介紹這些模塊在Linux Kernel層的實現,但了解它們在用戶空間的工作流程也將極大幫助BSP開發工程師拓展自己的知識面。
※ 對Wi-Fi、NFC和GPS感興趣的在校高年級本科生、研究生和其他讀者
在掌握理論的基礎上,如何在實際代碼中來實現或使用它們也許是眾多學子最想知道的。希望這本理論與代碼實現深度結合的書籍會助您一臂之力。
**如何閱讀本書**
本書是一本專業知識和代碼實現相結合的書籍,所以讀者在閱讀時應注意以下事項。
※ 首先閱讀專業知識。如果對這些內容比較了解,可以直接跳轉到代碼實現。
※ 然后是Android平臺中相關模塊的代碼實現。這些代碼實現往往基于一定的專業知識,所以在閱讀代碼時務必和前述的專業知識相結合。
※ 每章最后都列出了筆者在撰寫各章時所參考的資料。資料較多,讀者可根據這些內容開展進一步的研究工作。
每章開頭都把本章涉及的源碼路徑全部列出,而在具體分析源碼時,只列出該源碼的文件名及所分析的函數或相關數據結構名。例如:
[-->AndroidRuntime.cpp::函數或數據結構名]
* * * * *
// 源碼分析和一些注釋
* * * * *
最后,本書在描述類之間的關系及函數調用流程上,使用了UML的靜態類圖及序列圖。UML是一個強大的工具,但它的建模規范過于煩瑣,為更簡單清晰地描述事情的本質,本書并未完全遵循UML的建模規范。如圖1所示,外部類內部的方框用于表示內部類。另外,“外部類A.內部類B”也用于表示內部類。接口和普通類用同一種框圖表示。

:-: 圖1類圖
圖2所示為本書描述數據結構及成員時使用的UML圖例。

>[info] **特別注意** 本書所使用的UML圖都比較簡單,讀者不必花費大量時間專門學習UML。另外,出于方便考慮,本書所繪制的UML圖沒有嚴格遵守UML規范,這一點敬請讀者諒解。
- 前言
- 第1章 準備工作
- 1.1 Android系統架構
- 1.2 工具使用
- 1.2.1 Source Insight的使用
- 1.2.2 Eclipse的使用
- 1.2.3 BusyBox的使用
- 1.3 本書資源下載說明
- 第2章 深入理解Netd
- 2.1 概述
- 2.2 Netd工作流程
- 2.2.1 main函數分析
- 2.2.2 NetlinkManager分析
- 2.2.3 CommandListener分析
- 2.2.4 DnsProxyListener分析
- 2.2.5 MDnsSdListener分析
- 2.3 CommandListener中的命令
- 2.3.1 iptables、tc和ip命令
- 2.3.2 CommandListener構造函數和測試工具ndc
- 2.3.3 InterfaceCmd命令
- 2.3.4 IpFwd和FirewallCmd命令
- 2.3.5 ListTtysCmd和PppdCmd命令
- 2.3.6 BandwidthControlCmd和IdletimerControlCmd命令
- 2.3.7 NatCmd命令
- 2.3.8 TetherCmd和SoftapCmd命令
- 2.3.9 ResolverCmd命令
- 2.4 NetworkManagementService介紹
- 2.4.1 create函數詳解
- 2.4.2 systemReady函數詳解
- 2.5 本章總結和參考資料說明
- 2.5.1 本章總結
- 2.5.2 參考資料說明
- 第3章 Wi-Fi基礎知識
- 3.1 概述
- 3.2 無線電頻譜和802.11協議的發展歷程
- 3.2.1 無線電頻譜知識
- 3.2.2 IEEE 802.11發展歷程
- 3.3 802.11無線網絡技術
- 3.3.1 OSI基本參考模型及相關基本概念
- 3.3.2 802.11知識點導讀
- 3.3.3 802.11組件
- 3.3.4 802.11 Service介紹
- 3.3.5 802.11 MAC服務和幀
- 3.3.6 802.11 MAC管理實體
- 3.3.7 無線網絡安全技術知識點
- 3.4 Linux Wi-Fi編程API介紹
- 3.4.1 Linux Wireless Extensions介紹
- 3.4.2 nl80211介紹
- 3.5 本章總結和參考資料說明
- 3.5.1 本章總結
- 3.5.2 參考資料說明
- 第4章 深入理解wpa_supplicant
- 4.1 概述
- 4.2 初識wpa_supplicant
- 4.2.1 wpa_supplicant架構
- 4.2.2 wpa_supplicant編譯配置
- 4.2.3 wpa_supplicant命令和控制API
- 4.2.4 git的使用
- 4.3 wpa_supplicant初始化流程
- 4.3.1 main函數分析
- 4.3.2 wpa_supplicant_init函數分析
- 4.3.3 wpa_supplicant_add_iface函數分析
- 4.3.4 wpa_supplicant_init_iface函數分析
- 4.4 EAP和EAPOL模塊
- 4.4.1 EAP模塊分析
- 4.4.2 EAPOL模塊分析
- 4.5 wpa_supplicant連接無線網絡分析
- 4.5.1 ADD_NETWORK命令處理
- 4.5.2 SET_NETWORK命令處理
- 4.5.3 ENABLE_NETWORK命令處理
- 4.6 本章總結和參考資料說明
- 4.6.1 本章總結
- 4.6.2 參考資料說明
- 第5章 深入理解WifiService
- 5.1 概述
- 5.2 WifiService的創建及初始化
- 5.2.1 HSM和AsyncChannel介紹
- 5.2.2 WifiService構造函數分析
- 5.2.3 WifiStateMachine介紹
- 5.3 加入無線網絡分析
- 5.3.1 Settings操作Wi-Fi分析
- 5.3.2 WifiService操作Wi-Fi分析
- 5.4 WifiWatchdogStateMachine介紹
- 5.5 Captive Portal Check介紹
- 5.6 本章總結和參考資料說明
- 5.6.1 本章總結
- 5.6.2 參考資料說明
- 第6章 深入理解Wi-Fi Simple Configuration
- 6.1 概述
- 6.2 WSC基礎知識
- 6.2.1 WSC應用場景
- 6.2.2 WSC核心組件及接口
- 6.3 Registration Protocol詳解
- 6.3.1 WSC IE和Attribute介紹
- 6.3.2 802.11管理幀WSC IE設置
- 6.3.3 EAP-WSC介紹
- 6.4 WSC代碼分析
- 6.4.1 Settings中的WSC處理
- 6.4.2 WifiStateMachine的處理
- 6.4.3 wpa_supplicant中的WSC處理
- 6.4.4 EAP-WSC處理流程分析
- 6.5 本章總結和參考資料說明
- 6.5.1 本章總結
- 6.5.2 參考資料說明
- 第7章 深入理解Wi-Fi P2P
- 7.1 概述
- 7.2 P2P基礎知識
- 7.2.1 P2P架構
- 7.2.2 P2P Discovery技術
- 7.2.3 P2P工作流程
- 7.3 WifiP2pSettings和WifiP2pService介紹
- 7.3.1 WifiP2pSettings工作流程
- 7.3.2 WifiP2pService工作流程
- 7.4 wpa_supplicant中的P2P
- 7.4.1 P2P模塊初始化
- 7.4.2 P2P Device Discovery流程分析
- 7.4.3 Provision Discovery流程分析
- 7.4.4 GO Negotiation流程分析
- 7.5 本章總結和參考資料說明
- 7.5.1 本章總結
- 7.5.2 參考資料說明
- 第8章 深入理解NFC
- 8.1 概述
- 8.2 NFC基礎知識
- 8.2.1 NFC概述
- 8.2.2 NFC R/W運行模式
- 8.2.3 NFC P2P運行模式
- 8.2.4 NFC CE運行模式
- 8.2.5 NCI原理
- 8.2.6 NFC相關規范
- 8.3 Android中的NFC
- 8.3.1 NFC應用示例
- 8.3.2 NFC系統模塊
- 8.4 NFC HAL層討論
- 8.5 本章總結和參考資料說明
- 8.5.1 本章總結
- 8.5.2 參考資料說明
- 第9章 深入理解GPS
- 9.1 概述
- 9.2 GPS基礎知識
- 9.2.1 衛星導航基本原理
- 9.2.2 GPS系統組成及原理
- 9.2.3 OMA-SUPL協議
- 9.3 Android中的位置管理
- 9.3.1 LocationManager架構
- 9.3.2 LocationManager應用示例
- 9.3.3 LocationManager系統模塊
- 9.4 本章總結和參考資料說明
- 9.4.1 本章總結
- 9.4.2 參考資料說明
- 附錄