首頁 / 文章導讀 / 讀Android系統原理深入解析

讀Android系統原理深入解析

Android系統原理深入解析ㄚ琪最近借來看得一本書,博客來這樣簡介:

本書全面、系統、深入地講解了Android 系統中的幾大重要組成部分的工作原理,旨在透過直接剖析原始程式碼的方式,引領讀者一步步深入於諸如Binder、Zygote、Audio、Surface、Vold、Rild 等模組的內部,去理解它們是如何實現的,以及如何工作的。筆者根據研究Android 代碼的心得,在本書中嘗試性地採用了精簡流程、逐個擊破的方法進行講解,希望這樣做能幫助讀者更快、更準確地把握各模組的工作流程及其本質。

全書共有10 章,其中一些重要章節中還安排了“延伸思考”部分。主要內容為:

第1章介紹了閱讀本書所需要做的一些準備工作,包括對Android 整個系統架構的認識,以及Android 開發環境和原始碼閱讀環境的搭建等。

第2章透過Android 原始碼中的一處實例深入地介紹了JNI 技術。

第3章圍繞init 進程, 介紹了如何解析init.rc 以啟動Zygote 和屬性服務(property service)的工作原理。

第4章剖析了zygote 和system_server 進程的工作原理。本章的延伸思考部分討論了Andorid 的啟動速度、虛擬機器heapsize 的大小調整問題以及“看門狗”的工作原理。

第5章講解了Android 原始碼中常用的類別,如sp、wp、RefBase、Thread 類別、同步類別、Java 中的Handler 類別以及Looper 類別。這些類別都是Android 中最常用和最基本的,只有掌握這些類別的知識,才能在分析後續的代碼時游刃有餘。

第6章以MediaServer 為切入點,對Binder 進行了較為全面的分析。本章延伸思考部分討論了與Binder 有關的三個問題,它們分別是Binder 和執行緒的關係、死亡通知以及匿名Service。筆者希望,透過本章的學習,大家能更深入地認識Binder的本質。

第7章闡述了Audio 系統中的三位重要成員AudioTrack、AudioFlinger和AudioPolicyService 的工作原理。本章延伸思考部分分析了AudioFlinger 中DuplicatingThread 的工作原理,並且和讀者一道探討了單元測試、ALSA、Desktopcheck 等問題。透過對本章的學習,相信讀者會對Audio 系統有更深的理解。

第8章以Surface 系統為主, 分析了Activity 和Surface 的關係、Surface 和SurfaceFlinger 的關係以及SurfaceFlinger 的工作原理。本章的延伸思考部分分析了Surface 系統中資料傳輸控制物件的工作原理、有關ViewRoot 的一些疑問,最後講解了LayerBuffer 的工作流程。這是全書中難度較大的一章,建議大家反覆閱讀和思考,這樣才能進一步深入理解Surface 系統。

第9章分析了Vold 和Rild,其中Vold 負責Android 平臺中外部存放裝置的管理,而Rild 負責與射頻通信有關的工作。本章的延伸思考部分介紹了嵌入式系統中與儲存有關的知識,還探討了Rild 和Phone 設計優化方面的問題。

第10章分析了多媒體系統中MediaScanner 的工作原理。在本章的延伸思考部分,筆者提出了幾個問題,旨在激發讀者深入思考和學習Android 的欲望。

目錄這樣寫:

Chapter 1 閱讀前的準備工作
1.1 系統架構
1.1.1 Android 系統架構
1.1.2 本書的架構
1.2 搭建開發環境
1.2.1 下載原始碼
1.2.2 編譯原始碼
1.3 工具介紹
1.3.1 Source Insight 介紹
1.3.3 Busybox 的使用
1.4 本章小結

Chapter 2 深入理解JNI
2.1 JNI 概述
2.2 學習JNI 的實例:MediaScanner
2.3 Java 層的MediaScanner 分析
2.3.1 載入JNI 庫
2.3.2 Java 的native 函數和總結
2.4 JNI 層MediaScanner 的分析
2.4.1 註冊JNI 函數
2.4.2 資料類型轉換
2.4.3 JNIEnv 介紹
2.4.4 通過JNIEnv 操作jobject
2.4.5 jstring 介紹
2.4.6 JNI 類型簽名介紹
2.4.7 垃圾回收
2.4.8 JNI 中的異常處理
2.5 本章小結

Chapter 3 深入理解init
3.1 概述
3.2 init 分析
3.2.1 解析配置文件
3.2.2 解析service
3.2.3 init 控制service
3.2.4 屬性服務
3.3 本章小結

Chapter 4 深入理解zygote
4.1 概述
4.2 zygote 分析
4.2.1 AppRuntime 分析
4.2.2 Welcome to Java World
4.2.3 關於zygote 的總結
4.3 SystemServer 分析
4.3.1 SystemServer 的誕生
4.3.2 SystemServer 的重要使命
4.3.3 關於 SystemServer 的總結
4.4 zygote 的分裂
4.4.1 ActivityManagerService 發送請求
4.4.2 有求必應之響應請求
4.4.3  關於zygote 分裂的總結
4.5 延伸思考
4.5.1 虛擬機heapsize 的限制
4.5.2 開機速度優化
4.5.3 Watchdog 分析
4.6 本章小結

Chapter 5 深入理解常見類別
5.1 概述
5.2 以” 三板斧” 揭秘RefBase、sp 和wp
5.2.1 第一板斧—初識影子物件
5.2.2 第二板斧—由弱生強
5.2.3 第三板斧—破解生死魔咒
5.2.4 輕量級的引用計數控制類別LightRefBase
5.2.5 題外話—三板斧的來歷
5.3 Thread 類別及常用同步類別分析
5.3.1 一個變數引發的思考
5.3.2 常用同步類別
5.4 Looper 和Handler 類別分析
5.4.1 Looper 類別分析
5.4.2 Handler 分析
5.4.3 Looper 和Handler 的同步關係
5.4.4 HandlerThread 介紹
5.5 本章小結

Chapter 6 深入理解Binder
6.1 概述
6.2 庖丁解MediaServer
6.2.1 MediaServer 的入口函數
6.2.2 獨一無二的ProcessState
6.2.3 時空穿越魔術—defaultServiceManager
6.2.4 註冊MediaPlayerService
6.2.5 秋風掃落葉—StartThread Pool 和joinThread Pool 分析
6.2.6 你徹底明白了嗎
6.3 服務總管ServiceManager
6.3.1 ServiceManager 的原理
6.3.2 服務的註冊
6.3.3 ServiceManager 存在的意義
6.4 MediaPlayerService 和它的Client
6.4.1 查詢ServiceManager
6.4.2 子承父業
6.5 延伸思考
6.5.1 Binder 和線程的關係
6.5.2 有人情味的訃告
6.5.3 匿名Service
6.6 學以致用
6.6.1 純Native 的Service
6.6.2 扶得起的” 阿斗”(aidl)
6.7 本章小結

Chapter 7 深入理解Audio 系統
7.1 概述
7.2 AudioTrack 的破解
7.2.1 用例介紹
7.2.2 AudioTrack(Java 空間)分析
7.2.3 AudioTrack(Native 空間)分析
7.2.4 關於AudioTrack 的總結
7.3 AudioFlinger 的破解
7.3.1 AudioFlinger 的誕生
7.3.2 透過流程分析AudioFlinger
7.3.3 audio_track_cblk_t 分析
7.3.4 關於AudioFlinger 的總結
7.4 AudioPolicyService 的破解
7.4.1 AudioPolicyService 的新增
7.4.2 重回AudioTrack
7.4.3 聲音路由切換實體分析
7.4.4 關於AudioPolicy 的總結
7.5 延伸思考
7.5.1 DuplicatingThread 破解
7.5.2 題外話
7.6 本章小結

Chapter 8 深入理解Surface 系統
8.1 概述
8.2 一個Activity 的顯示
8.2.1 Activity 的新增
8.2.2 Activity 的UI 繪製
8.2.3 關於Activity 的總結
8.3 初識Surface
8.3.1 和Surface 有關的流程總結
8.3.2 Surface 之乾坤大挪移
8.3.3 乾坤大挪移的JNI 層分析
8.3.4 Surface 和繪圖
8.3.5 初識Surface 小結
8.4 深入分析Surface
8.4.1 與Surface 相關的基礎知識介紹
8.4.2 SurfaceComposerClient 分析
8.4.3 SurfaceControl 分析
8.4.4 writeToParcel 和Surface 物件的新增
8.4.5 lockCanvas 和unlockCanvasAndPost 分析
8.4.6 GraphicBuffer 介紹
8.4.7 深入分析Surface 的總結
8.5 SurfaceFlinger 分析
8.5.1 SurfaceFlinger 的誕生
8.5.2 SF 工作線程分析
8.5.3 Transaction 分析
8.5.4 關於SurfaceFlinger 的總結
8.6 延伸思考
8.6.1 Surface 系統的CB 物件分析
8.6.2 ViewRoot 的你問我答
8.6.3 LayerBuffer 分析
8.7 本章小結

Chapter 9 深入理解Vold 和Rild
9.1 概述
9.2 Vold 的原理與機制分析
9.2.1 Netlink 和Uevent 介紹
9.2.2 初識Vold
9.2.3 NetlinkManager 模組分析
9.2.4 VolumeManager 模組分析
9.2.5 CommandListener 模組分析
9.2.6 Vold 實體分析
9.2.7 關於Vold 的總結
9.3 Rild 的原理與機制分析
9.3.1 初識Rild
9.3.2 RIL_startEventLoop 分析
9.3.3 RIL_Init 分析
9.3.4 RIL_register 分析
9.3.5 關於Rild main 函數的總結
9.3.6 Rild 實體分析
9.3.7 關於Rild 的總結
9.4 延伸思考
9.4.1 嵌入式系統的儲存知識介紹
9.4.2 Rild 和Phone 的改進探討
9.5 本章小結

Chapter 10 深入理解MediaScanner
10.1 概述
10.2 android
10.2.1 MSR 模組分析
10.2.2 MSS 模組分析
10.2.3 android流程總結 .
10.3 MediaScanner 分析
10.3.1 Java 層分析
10.3.2 JNI 層分析
10.3.3 PVMediaScanner 分析
10.3.4 關於MediaScanner 的總結
10.4 延伸思考
10.4.1 MediaScannerConnection 介紹
10.4.2 我問你答
10.5 本章小結

ㄚ琪試閱第三章看看,發現3.2馬上就進來一支C程式,看來我們可需要繼續加強C的能力才行啊,不然就會看不懂了。

Print Friendly, PDF & Email
馬上成為工作達人的Fans

About ㄚ琪

工作達人Fun Taiwan的創辦者及總編,可以在這裡更認識他。

發表迴響

你的電子郵件位址並不會被公開。 Required fields are marked *

*

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

Scroll To Top