Android系統原理及開發要點詳解

Android系統原理及開發要點詳解

《Android系統原理及開發要點詳解》是2010年1月電子工業出版社出版的圖書,作者是韓超,梁泉。

基本信息

內 容 簡介

Android系統原理及開發要點詳解 Android系統原理及開發要點詳解

本書全面介紹開放的行動電話平台Android系統,包括Android系統中的Linux驅動、本地框架、Java框架和Java套用4個層次。本書內容以知識性內容為綱,重點關注開發要點,各個部分內容注重相互照應,按照清晰的思路向讀者介紹整個Android系統的原理和開發方法。

本書按照Android系統的框架和各個子系統的主線,重點介紹開發Android應用程式和構建硬體抽象層。其內容涵蓋了Android應用程式開發和Android系統移植構建手機系統兩大方面。

本書既適合從事Android各個層次開發的工程師閱讀,也適合通用嵌入式Linux系統的學習者使用。

作者簡介

韓超 移動系統開發資深工程師,在Android領域具有完備的知識和前沿的技術,長期從事一線開發工作。韓超是中國大陸地區較早參與Android系統開發的人員之一,也是中國大陸的Androidin(機鋒網)開發社區的核心成員和重要組織者之一;也曾經引領大陸各種相關技術人員進入Android領域,並組織參與國內外的相關枝術交流。

前 言

Android 是Google歷經數年和投資數億美元開發出來的智慧型手機系統,Google也發起了圍繞Android的組織——開放手機聯盟,其英文全稱為“Open Handset Alliance”。

隨著各大移動終端生產商大力開發和生產基於Android的移動智慧型設備,Android迅速得到業界和社會的認可,並成為整個產業的熱點,基於Android平台的各類人才逐漸成為各大企業競相爭奪的焦點。

Android系統是一個開放的系統,任何公司、個人開發者、愛好者都可以參與其中。對於技術工作者,Android不僅是一個智慧型手機的系統,也可以作為學習嵌入式Linux系統的較完整的軟體平台。

Android是一個較新的系統和技術,因此介紹Android的資料和書籍還比較少,尤其簡體中文的書籍,相對更少。本書《Android系統原理及開發要點詳解》 是一本綜合介紹Android系統的書,集合了Androidin社區多位專家作者的經驗,精心編寫而成。

Android 作為一個龐大的系統,包括了Linux作業系統、各種本地程式、虛擬機和運行環境、Java框架和Java應用程式多方面的內容。這對於初學者是一個非常大的挑戰,因此對於學習、研究進而開發Android系統來說,掌握系統的脈絡和使用恰當的學習方法是非常重要的,這也是本書的組織主旨。

本書特點

為了適應Android系統的情況,本書在內容的編排和組織上具有以下一些重要特點。

保持完整性和層次性

本書緊緊把握Android系統的4個層次,分章節介紹,並且有重點地介紹了Android整個系統的代碼結構、編譯系統、相關工具、各部分組織等全局性內容。這將讓讀者即使只花費較短的時間,也可以獲得對Android系統大致的感性理解。

提供清晰的框架

Android是一個有數百兆大小的較大系統,各部分之間是有機聯繫的,這就要求Android的學習和開發者需要具有一些軟體架構方面的知識。本書為Android整體和重點模組繪製了大量的框圖,這樣非常有利於幫助讀者直觀地理解系統。本書在講述每一個部分時,均列出相關代碼的路徑,幫助讀者對應著進行快速、高效地學習。

抓核心內容

Android系統已經發布了若干個版本:1.0、1.5(cupcake)、1.6(donut)和2.0(eclair),從開發的角度,各個版本在同時使用,這對於學習者是一個較大的挑戰。因此本書作者通過把握Android演進中脈絡,儘量總結出共性的內容展示給讀者。在某些部分,在講解代碼的同時,突出概念性的內容。本書力求通過一本教材,給讀者一個長期的、穩定的學習方法和思路。

開發細節

Android 包含眾多的軟體、程式和工具,涉及軟體開發各個方面。在實際的開發過程中,很多內容並不需要開發者去改動。本書從工程的角度出發,偏重開發中常用的內容,對於開發中較少涉及的部分,僅做精煉的大致介紹。本書重點介紹顯示機制、輸入機制、音頻/視頻系統的移植層、多媒體系統的構建、電話系統的構建、連線系統的構建、感測器的移值、套用開發中最常涉及的部分,在每段講解中,穿插了開發中可以使用的一些技巧。

本書內容

本書的各個章節及其組織方式如下所示。

第1章“Android系統概述”,概述Android系統方面的內容,包括智慧型手機平台的發展歷程、Android系統的特點、Android的3種開發工作,以及Android的2種不同的開發方式。

第2章“Android系統開發綜述”,介紹Android系統開發的綜述性內容,包括工具使用、獲得代碼、編譯系統、仿真器運行、SDK使用等。

第3章“Android的Linux核心與驅動程式”,介紹Android核心的特點、Android中使用的專用驅動程式、Android系統可能使用的標準設備驅動。

第4章“Android的底層庫和程式”,介紹Android系統的基礎程式,以本地程式為主。

第5章“Android的Java虛擬機和Java環境”,這是介於本地和Java層之間的相關內容,主要介紹Android的Java虛擬機Dalvik的基本概念、Android Java程式的環境、JNI的使用方法,以及Java框架的啟動流程等。

第6章“Android的GUI系統”,包括Android GUI系統架構、底層的pixelflinger和libui庫、Surface系統、Skia和2D圖形系統、Android的OpenGL和3D圖形系統等內容。

第7章“Android的Audio系統”,主要是音頻的輸入輸出環節,音頻系統從驅動程式、本地框架到Java框架都具有內容。

第8章“Android的Video輸入輸出系統”,介紹Android的Video輸入輸出系統,包括Overlay系統和Camera系統兩個部分,前者只有本地的內容,後者各個層次均有內容。

第9章“Android的多媒體系統”,介紹Android的多媒體系統的核心部分,包括Android中多媒體系統的業務、結構、多媒體系統的核心框架、OpenCore系統結構和使用等內容。

第10章“Android的電話部分”,介紹Android系統在電話方面的功能,Android是智慧型手機系統,電話是其核心部分。

第11章“Android的連線部分”,主要包括WiFi、藍牙及定位系統等,這些Android的連線部分也具有從驅動層到Java套用層的結構。

第12章“Android的感測器系統”,感測器系統涉及Android的各個層次,具有完整的結構,相比其他系統,感測器系統的各個層次都比較簡單。

第6~12章分模組介紹Android的幾個核心繫統,主要是本地框架和Java框架方面的內容,兼顧應用程式和驅動層,這是本書的重點。

第13章“Android應用程式概述及框架”,介紹Android應用程式層的基本概念和應用程式框架,這部分內容是Android自下而上的第4個層次,可以基於原始碼或者SDK開發,它們之間的差別非常小。

第14章“Android應用程式的主要方面”,介紹Android應用程式層開發的各個方面,基本上是橫向內容,包括應用程式的基本控制、各種UI元素的使用、圖形API使用3個方面的內容。

第15章“Android應用程式的設計思想”,本章的內容是基於通用的應用程式和GUI程式的通用設計思想,結合Android系統自身的特點,提出一些值得注意的問題和設計方法。

本書讀者

本書適應廣大的讀者群,力求在Android的系統移植、應用程式開發、系統框架改進方面給讀者全面的支持。不同的讀者在學習本書時,應該使用不同的方法。

Android初級開發者:在本書指引下閱讀代碼,搭建系統開發環境,對於Android應用程式的開發者,重點關注後3章的內容。

Android中、高級開發者:通過本書的引導,學習系統架構,關注開發要點,並儘量使用手機系統的通用設計思想、軟體工程思想、系統工程思想來指導Android系統學習。

嵌入式Linux系統學習者:將Android作為一個集Linux核心和套用層程式於一體的系統進行學習,並可以利用Android的仿真環境運行和調試程式。

讀者在學習本書的過程中,應儘量對照本書的框圖和手頭的Android原始碼,這樣可以達到事半功倍的效果。本書在重點代碼中加上大量的注釋,幫助讀者閱讀,對於非重點的代碼,不占用本書的篇幅,讀者可以參考開放的原始碼。可以採用順序讀和重點讀相結合的方式學習本書,順序讀關注系統框架,重點讀關注開發要點。

本書作者

本書在編寫過程中提煉和綜合Android早期開發者的經驗、中國大陸Androidin社區的開發成果,以及各位專家的經驗和技術,這是本書出版的知識源泉。本書主要由Androidin社區的兩名核心技術專家韓超和梁泉領銜規劃和編著,韓超統稿。總部設在南加州、專注於Android平台並提供其移動套用開發及解決方案的邁奔無線(mAPPn Inc.)也投入技術和人力參與了本書的工作。

參與本書編寫的還有於仕林、張宇、張超等人,趙家維、黃亮、沈楨、徐威特、楊鈺等參與了審校工作。

由於時間倉促,可能依然存在一些錯誤和問題,請讀者見諒,歡迎讀者討論和指點。

目 錄

第1章 Android系統概述1

1.1 基礎知識1

1.1.1 Android開發系統的由來1

1.1.2 行動電話系統開發模式2

1.1.3 未來行動電話的功能及Android的優勢4

1.2 Android的開發工作6

1.2.1 Android移植開發6

1.2.2 Android套用開發8

1.2.3 Android系統開發9

1.3 Android的SDK與原始碼10

1.3.1 基於SDK的Android開發10

1.3.2 基於原始碼SDK Android開發11

第2章 Android系統開發綜述13

2.1 Android的系統架構13

2.1.1 軟體結構13

2.1.2 Android的工具16

2.2 Android原始碼的開發環境18

2.2.1 Android原始碼的獲取和提交18

2.2.2 Android原始碼結構21

2.2.3 編譯24

2.2.4 系統的運行25

2.3 Android SDK的開發環境32

2.3.1 SDK的結構32

2.3.2 Windows環境SDK開發33

2.3.3 Linux環境SDK開發42

第3章 Android的Linux核心與驅動程式44

3.1 Linux核心與驅動44

3.2 Android專用驅動45

3.2.1 Ashmem45

3.2.2 Binder45

3.2.3 Logger46

3.3 Android使用的設備驅動46

3.3.1 Framebuffer顯示驅動46

3.3.2 Event輸入設備驅動48

3.3.3 v4l2攝像頭——視頻驅動50

3.3.4 OSS音頻驅動53

3.3.5 ALSA音頻驅動54

3.3.6 MTD驅動56

3.3.7 藍牙驅動57

3.3.8 Wlan驅動58

第4章 Android的底層庫和程式60

4.1 底層庫和程式的結構60

4.1.1 本地實現的基本結構60

4.1.2 增加本地程式和庫的方法61

4.2 標準C/C++庫bionic64

4.3 C語言工具庫libcutils65

4.4 init可執行程式66

4.5 Shell工具72

4.6 C++工具庫libutils75

4.6.1 libutils的基本內容75

4.6.2 Binder76

4.6.3 libutils中的其他內容82

4.7 Android的系統進程85

4.7.1 servicemanager85

4.7.2 zygote87

第5章 Android的Java虛擬機和Java環境88

5.1 Dalvik虛擬機和核心庫88

5.1.1 dex工具庫和虛擬機的實現89

5.1.2 核心庫90

5.1.3 nativehelper庫91

5.2 Android的Java程式環境91

5.2.1 Java類的層次結構91

5.2.2 Android Java類的代碼92

5.2.3 Android系統API92

5.3 JNI的使用96

5.3.1 JNI的架構和實現方式97

5.3.2 JNI的實現方式97

5.3.3 在應用程式中使用JNI99

5.4 系統服務的Java部分101

5.4.1 Binder102

5.4.2 ServiceManager103

5.4.3 系統進程103

第6章 Android的GUI系統106

6.1 Android GUI系統綜述106

6.2 pixelflinger和libui庫108

6.2.1 pixelflinger108

6.2.2 libui108

6.2.3 輸出/輸入與硬體的接口109

6.3 Surface系統113

6.3.1 Surface系統本地接口113

6.3.2 SurfaceFlinger本地代碼115

6.3.3 Surface的Java和JNI代碼119

6.4 Skia和2D圖形系統121

6.4.1 Skia底層庫121

6.4.2 Android圖形系統的JNI接口124

6.4.3 Android的圖形包(graphics)125

6.5 Android的OpenGL系統與3D圖形系統125

6.5.1 OpenGL的本地代碼125

6.5.2 OpenGL的JNI代碼130

6.5.3 OpenGL的Java類130

第7章 Android的Audio系統132

7.1 Audio系統綜述132

7.2 Audio系統和上層接口134

7.2.1 Audio系統的各個層次134

7.2.2 media庫中的Audio框架部分135

7.2.3 AudioFlinger本地代碼138

7.2.4 Audio系統的JNI代碼140

7.2.5 Audio系統的Java代碼142

7.3 Audio的硬體抽象層142

7.3.1 Audio硬體抽象層的接口定義142

7.3.2 AudioFlinger中自帶Audio硬體抽象層實現144

7.3.3 Audio硬體抽象層的真正實現150

第8章 Android的Video輸入輸出系統151

8.1 Video輸入輸出系統綜述151

8.1.1 Android的Overlay系統結構152

8.1.2 Android的Camera系統結構153

8.2 Overlay系統155

8.2.1 Overlay系統的框架部分定義156

8.2.2 SurfaceFlinger系統的Overlay部分158

8.3 Overlay的硬體抽象層161

8.3.1 Overlay系統硬體抽象層的接口161

8.3.2 Overlay系統硬體實現框架164

8.3.3 Overlay系統硬體實現的注意事項166

8.4 Camera系統與上層接口169

8.4.1 Camera本地代碼框架169

8.4.2 CameraService176

8.4.3 Camera的JNI代碼179

8.4.4 Camera的Java代碼182

8.5 Camera的硬體抽象層182

8.5.1 Camera硬體抽象層的接口定義182

8.5.2 Camera硬體抽象層的樁實現184

8.5.3 Camera硬體抽象層的硬體實現188

第9章 Android的多媒體系統190

9.1 Android多媒體系統的結構和業務190

9.1.1 多媒體系統的巨觀結構190

9.1.2 多媒體的各種業務192

9.2 多媒體系統的各個層次199

9.2.1 libmedia的框架部分199

9.2.2 多媒體服務208

9.2.3 多媒體部分的JNI代碼213

9.2.4 多媒體部分的Java框架代碼215

9.2.5 android.widget.VideoView類216

9.3 多媒體實現的核心部分OpenCore216

9.3.1 OpenCore概述216

9.3.2 OpenCore的層次結構217

9.3.3 OpenCore的OSCL部分219

9.3.4 OpenCore的檔案格式和編解碼部分221

9.3.5 OpenCore 的Node222

9.3.6 OpenCore 的功能擴展223

9.3.7 OpenCore的 Player226

9.3.8 OpenCore 的Author236

第10章 Android的電話部分243

10.1 Android電話部分綜述243

10.2 Modem驅動243

10.3 本地的RIL代碼245

10.3.1 簡介245

10.3.2 RILD守護進程246

10.3.3 libril庫247

10.3.4 RIL的實現庫Reference RIL247

10.3.5 Request(請求)流程248

10.3.6 Response(回響)流程249

10.3.7 RIL的移植工作251

10.4 Java框架及套用251

10.4.1 基本架構252

10.4.2 呼叫255

10.4.3 簡訊256

10.4.4 數據連線257

10.4.5 其他框架部分及其他套用258

第11章 Android的連線部分259

11.1 WiFi部分259

11.1.1 WiFi基本架構259

11.1.2 WiFi本地實現260

11.1.3 WiFi的Java和JNI263

11.1.4 Settings中的WiFi設定265

11.1.5 WiFi工作流程實例265

11.2 藍牙部分267

11.2.1 藍牙基本架構268

11.2.2 藍牙用戶空間庫bluez269

11.2.3 bluez適配層272

11.2.4 藍牙的JNI和Java部分272

11.3 GPS和定位部分280

11.3.1 定位系統基本架構281

11.3.2 定位系統驅動層281

11.3.3 GPS本地實現282

11.3.4 GPS JNI實現283

11.3.5 定位系統Java實現284

第12章 Android的感測器系統286

12.1 感測器系統綜述286

12.2 感測器系統層次結構288

12.2.1 感測器系統的各個層次288

12.2.2 感測器系統的JNI288

12.2.3 感測器系統的Java代碼290

12.3 感測器系統的硬體抽象層291

12.3.1 感測器系統硬體抽象層的接口定義291

12.3.2 感測器系統硬體抽象層的示例實現293

12.3.3 感測器系統硬體抽象層的實現要點296

12.4 Sensor的使用296

第13章 Android應用程式概述及框架299

13.1 Android應用程式的開發方式299

13.2 Android應用程式的內容300

13.2.1 Android應用程式的概念性描述300

13.2.2 應用程式包含的各個檔案305

13.2.3 使用am工具啟動Android應用程式306

13.3 Android應用程式示例308

13.3.1 HelloActivity程式308

13.3.2 HelloActivity的原始碼結構308

13.3.3 HelloActivity的編譯結構(原始碼開發)312

13.3.4 HelloActivity的編譯結構(SDK開發)314

13.4 Android 套用層API參考文檔315

第14章 Android應用程式的主要方面317

14.1 套用的基本控制318

14.1.1 UI元素及其控制318

14.1.2 螢幕間的跳轉320

14.1.3 彈出對話框和選單324

14.1.4 樣式的設定328

14.1.5 使用服務331

14.1.6 使用廣播接收器337

14.2 各種UI元素的使用339

14.2.1 基本的UI元素340

14.2.2 視圖組的使用345

14.2.3 自定義的視圖353

14.2.4 滾動視圖的使用354

14.2.5 布局(Layout)355

14.2.6 格線(Grid)視圖組359

14.2.7 列表(List)視圖組360

14.2.8 使用Tab362

14.3 圖形API的使用363

14.3.1 2D圖形的API363

14.3.2 3D圖形的API366

第15章 Android應用程式的設計思想369

15.1 Android程式思想369

15.1.1 Java 源程式思想369

15.1.2 資源的思想373

15.1.3 工程描述檔案的思想375

15.1.4 三位一體的思想376

15.1.5 安全性和許可權378

15.1.6 App Widget的使用379

15.2 Android套用開發實例381

15.2.1 GUI依賴類的程式382

15.2.2 單獨模組類程式387

15.3 Android的設計理念393

相關詞條

相關搜尋

熱門詞條

聯絡我們