《深入解析Android 5.0系統》是2016年人民郵電出版社出版的圖書,作者是劉超。
圖書信息,圖書簡介,目錄,
圖書信息
【作者】 劉超
【ISBN】 978-7-115-38456-0
圖書簡介
《深入解析Android 5.0系統》面向的讀者主要是進行系統開發的工程師,包括套用開發工程師、ROM開發工程師和各種使用Android作為開發平台的TV和可穿戴式設備(Wear)的開發工程師。本書也可以作為大專院校相關專業師生的學習用書及培訓學校教材。
目錄
第 1章 建立Android系統開發環境 1
1.1 安裝作業系統 1
1.1.1 安裝方式的選擇 1
1.1.2 下載和安裝Ubuntu 1
1.1.3 使用Ubuntu遇到的問題 2
1.2 安裝開發包 3
1.2.1 安裝JDK 1.6 3
1.2.2 安裝OpenJDK 1.7 4
1.2.3 安裝編譯需要的開發包 4
1.3 安裝一些有用的工具 4
1.3.1 安裝Android SDK 4
1.3.2 安裝Android Studio 4
1.3.3 安裝Source Insight 5
1.3.4 安裝比較工具Meld 5
1.4 下載源碼 5
1.4.1 Git and Repo簡介 5
1.4.2 源碼版本歷史 6
1.4.3 下載Android源碼 7
1.4.4 下載Kernel源碼 8
第 2章 Android的編譯環境——
Build系統 10
2.1 Android Build系統核心 10
2.1.1 編譯環境的建立 11
2.1.2 Build相關的環境變數 14
2.1.3 Build系統的層次關係 15
2.1.4 分析main.mk檔案 17
2.1.5 Build系統的編譯目標
介紹 20
2.1.6 分析config.mk檔案 22
2.1.7 分析product_config.mk
檔案 24
2.1.8 Android 5.0中的64位
編譯 26
2.2 Android的產品配置檔案 27
2.2.1 分析hammerhead的配置
檔案 27
2.2.2 編譯類型eng、user和
userdebug 31
2.2.3 產品的Image檔案 32
2.2.4 如何加快編譯速度 33
2.2.5 如何編譯Android的
模擬器 34
2.3 編譯Android的模組 34
2.3.1 模組編譯變數簡介 35
2.3.2 常用模組定義實例 36
2.3.3 預編譯模組的目標定義 37
2.3.4 常用“LOCAL_”變數 39
2.4 Android中的簽名 40
2.4.1 Android套用簽名方法 41
2.4.2 Android系統簽名介紹 43
2.4.3 Android簽名漏洞分析 44
第3章 連線Android和Linu核心的
橋樑——Android的Bionic 46
3.1 Bionic簡介 46
3.1.1 Bionic的特性 46
3.1.2 Bionic中的模組簡介 49
3.2 Bionic C庫中的系統調用 50
3.2.1 系統調用簡介 50
3.2.2 系統調用的實現方法 51
3.3 Bionic中的記憶體管理函式 52
3.3.1 系統調用brk和mmap 52
3.3.2 記憶體分配器——dlmalloc
簡介 53
3.3.3 dlmalloc函式用法指南 54
3.4 管道 57
3.4.1 匿名管道PIPE和命名
管道FIFO 57
3.4.2 匿名管道的使用方法 58
3.5 Bionic中的執行緒管理函式 59
3.5.1 Bionic執行緒函式的特性 59
3.5.2 創建執行緒和執行緒的屬性 59
3.5.3 退出執行緒的方法 61
3.5.4 執行緒本地存儲TLS 62
3.5.5 執行緒的互斥量(Mutex)
函式 63
3.5.6 執行緒的條件量(Condition)
函式 65
3.6 Futex同步機制 66
3.6.1 Futex的系統調用 66
3.6.2 Futex的用戶態操作 67
3.6.3 Mutex類使用Futex
實現同步 68
3.7 Android的 Log模組 68
3.7.1 Android Log系統的架構 69
3.7.2 Log系統的接口和用法 70
3.7.3 Log系統的實現分析 71
3.8 執行檔格式分析 75
3.8.1 ELF格式簡介 75
3.8.2 ELF檔案頭格式 76
3.8.3 程式頭部表 77
3.8.4 與重定位相關的“節區”的
信息——DYNAMIC段 79
3.8.5 函式的重定位過程 81
3.9 Bionic中的Linker模組 84
3.9.1 可執行程式的裝載 84
3.9.2 可執行程式的初始化 85
3.9.3 Linker裝載動態庫 87
3.10 調試器——Ptrace和Hook API 91
3.10.1 ptrace函式簡介 91
3.10.2 Hook API的原理 92
3.10.3 利用ptrace實現
Hook API 93
第4章 進程間通信——Android
的Binder 98
4.1 Binder簡介 98
4.1.1 Binder對象定義 98
4.1.2 Binder的架構 99
4.1.3 組件Service和匿名
Binder服務 100
4.1.4 Binder的層次 101
4.2 如何使用Binder 102
4.2.1 使用Binder服務 102
4.2.2 Binder的混合調用 102
4.2.3 用Jave開發Binder服務 103
4.2.4 用C++開發Binder服務 104
4.3 Binder套用層的核心類 106
4.3.1 IInterface中的兩個宏 106
4.3.2 Binder核心類的關係 107
4.3.3 函式asInterface的奧秘 109
4.3.4 Binder的“死亡通知” 110
4.3.5 Jave層的Binder類 111
4.4 Binder的實現原理 115
4.4.1 Binder的執行緒模型 115
4.4.2 Binder對象的傳遞 119
4.4.3 分析IPCThreadState類 122
4.5 Binder驅動 126
4.5.1 套用層和驅動的訊息
協定 126
4.5.2 Binder驅動分析 129
4.5.3 Binder的記憶體共享機制 130
4.5.4 驅動的ioctl操作 131
4.5.5 Binder調用過程 133
4.5.6 處理傳遞的Binder對象 138
4.6 解析名稱的模組——ServiceManager的作用 140
4.6.1 ServiceManager的架構 141
4.6.2 ServiceManger提供的服務 143
4.7 匿名共享記憶體ashmem 146
4.7.1 ashmem的作用和用法 146
4.7.2 ashmem驅動的實現原理 148
4.7.3 ashemem驅動的代碼分析 149
4.7.4 進程間傳遞檔案描述符 152
第5章 連線Java和C/C++層的關鍵——Android的JNI 154
5.1 JNI的作用 154
5.2 JNI用法介紹 154
5.2.1 從Java到C/C++ 154
5.2.2 從C/C++到Java的調用 158
5.3 JNI環境 160
5.3.1 結構體JNIEnv 160
5.3.2 JNIEnv的創建和初始化 162
5.3.3 JNI中的異常處理 163
5.3.4 JNI中的引用 164
5.3.5 指明錯誤位置——
“CheckJNI”的作用 165
5.4 ART帶來的JNI變化 165
5.4.1 垃圾回收的影響 165
5.4.2 錯誤處理的變化 166
5.4.3 堆疊可能引發的問題 166
第6章 Android的同步和訊息機制 167
6.1 原子操作 167
6.1.1 Android的原子操作函式 167
6.1.2 原子操作的實現原理 168
6.1.3 記憶體屏障和編譯屏障 169
6.2 Android native層的同步方法 171
6.2.1 互斥體Mutex和自動鎖Autolock 171
6.2.2 解決執行緒同步——條件類Condition 173
6.3 Android Java層的同步機制 174
6.3.1 同步關鍵字synchronized 174
6.3.2 Object類在同步中的作用 175
6.4 Android的訊息機制 176
6.4.1 訊息模型 177
6.4.2 理解Looper類 178
6.4.3 理解Handler類 180
6.4.4 訊息的同步——Message類的setAsynchronous()方法 181
6.4.5 分析MessageQueue類 182
6.5 進程間的訊息傳遞 186
6.5.1 理解Messenger類 187
6.5.2 建立通信通道——
AsyncChannel類的作用 187
第7章 第 一個用戶進程——Android的Init進程 192
7.1 Init進程的初始化過程 194
7.1.1 main函式的流程 194