Android 系統源代碼情景分析, 3/e Android系统源代码情景分析(第三版)

羅升陽

  • 出版商: 電子工業
  • 出版日期: 2017-10-01
  • 定價: $774
  • 售價: 8.5$658
  • 語言: 簡體中文
  • 頁數: 838
  • 裝訂: 平裝
  • ISBN: 7121325217
  • ISBN-13: 9787121325212
  • 相關分類: Android

下單後立即進貨 (約4週~6週)

買這商品的人也買了...

商品描述

在內容上,本書結合使用情景,全面、深入、細致地分析Android系統的源代碼,涉及到Linux內核層、硬件抽象層(HAL)、運行時庫層(Runtime)、應用程序框架層(Application Framework)以及應用程序層(Application)。在組織上,本書將上述內容劃分為初識Android系統、Android專用驅動系統和Android應用程序框架三大篇章。初識Android系統篇介紹了參考書籍、基礎知識以及實驗環境搭建;Android專用驅動系統篇介紹了Logger日誌驅動程序、Binder進程間通信驅動程序以及Ashmem匿名共享內存驅動程序;Android應用程序框架篇從組件、進程、消息以及安裝四個維度來對Android應用程序的框架進行了深入的剖析。通過上述內容及其組織,本書能使讀者既能從整體上把握Android系統的層次結構,又能從細節上去掌握每一個層次的要點。

作者簡介

2007年畢業於浙江大學計算機系,取得學士學位,2010年畢業於上海交通大學計算機系,取得碩士學位。
畢業後一直從事互聯網軟件開發,並且致力於移動平台的研究,特別是對Android平台有深入的理解和研究。

在國內知名IT技術社區CSDN上發表了數十篇高質量的Android系統原創性文章,並且開設博客專欄——《老羅的Android之旅》,積極與網友互動,深受大家的喜愛,訪問量一直居於前茅。

目錄大綱

目錄

第1篇初識Android系統

第1章準備知識2 
1.1 Linux內核參考書籍2 
1.2 Android應用程序參考書籍3 
1.3下載、編譯和運行Android源代碼3 
1.3.1下載Android源代碼5 
1.3.2編譯Android源代碼6 
1.3.3運行Android模擬器7 
1.4下載、編譯和運行Android內核源代碼8 
1.4.1下載Android內核源代碼8 
1.4.2編譯Android內核源代碼8 
1.4.3運行Android模擬器9 
1.5開發第一個Android應用程序10 
1.6單獨編譯和打包Android應用程序模塊12 
1.6.1導入單獨編譯模塊的mmm命令12 
1.6.2單獨編譯Android應用程序模塊13 
1.6.3重新打包Android系統鏡像文件13 
1.7為真機編譯ROM14 
1.7.1下載LineageOS16 
1.7.2下載設備開源代碼16 
1.7.3下載設備私有文件17 
1.7.4編譯ROM17 
1.7.5刷入TWRP17 
1.7.6刷入ROM19 

第2章硬件抽象層21 
2.1開發Android硬件驅動程序22
2.1.1實現內核驅動程序模塊22 
2.1.2修改內核Kconfig文件29 
2.1.3修改內核Makefile文件30 
2.1.4編譯內核驅動程序模塊30 
2.1.5驗證內核驅動程序模塊31 
2.2開發C可執行程序驗證Android硬件驅動程序32 
2.3開發Android硬件抽象層模塊34 
2.3.1硬件抽象層模塊編寫規範34 
2.3.2編寫硬件抽象層模塊接口37 
2.3.3硬件抽象層模塊的加載過程41 
2.3.4處理硬件設備訪問權限問題44 
2.4開發Android硬件訪問服務46 
2.4.1定義硬件訪問服務接口46 
2.4.2實現硬件訪問服務47 
2.4.3實現硬件訪問服務的JNI方法48 
2.4.4啟動硬件訪問服務51 
2.5開發Android應用程序來使用硬件訪問服務52 

第3章智能指針57 
3.1輕量級指針58 
3.1.1實現原理分析58 
3.1.2應用實例分析61 
3.2強指針和弱指針62 
3.2.1強指針的實現原理分析63 
3.2.2弱指針的實現原理分析69 
3.2.3應用實例分析75 

第2篇Android專用驅動系統

第4章Logger日誌系統82
4.1 Logger日誌格式83 
4.2 Logger日誌驅動程序84 
4.2.1基礎數據結構85 
4.2.2日誌設備的初始化過程86 
4.2.3日誌設備文件的打開過程91 
4.2.4日誌記錄的讀取過程92 
4.2.5日誌記錄的寫入過程96 
4.3運行時庫層日誌庫101 
4.4 C/C++日誌寫入接口108 
4.5 Java日誌寫入接口112 
4.6 Logcat工具分析118 
4.6.1基礎數據結構119 
4.6.2初始化過程123 
4.6 .3日誌記錄的讀取過程135 
4.6.4日誌記錄的輸出過程140 

第5章Binder進程間通信系統152 
5.1 Binder驅動程序153 
5.1.1基礎數據結構154 
5.1.2 Binder設備的初始化過程172 
5.1. 3 Binder設備文件的打開過程173 
5.1.4 Binder設備文件的內存映射過程174 
5.1.5內核緩衝區管理181 
5.2 Binder進程間通信庫191 
5.3 Binder進程間通信應用實例196 
5.4 Binder對象引用計數技術204 
5.4 .1 Binder本地對象的生命週期205 
5.4.2 Binder實體對象的生命週期209
5.4.3 Binder引用對象的生命週期212 
5.4.4 Binder代理對象的生命週期217 
5.5 Binder對象死亡通知機制220 
5.5.1註冊死亡接收通知221 
5.5.2發送死亡接收通知224 
5.5.3註銷死亡接收通知229 
5.6 Service Manager的啟動過程232 
5.6.1打開和映射Binder設備文件234 
5.6.2註冊為Binder上下文管理者235 
5.6.3循環等待Client進程請求239 
5.7 Service Manager代理對象的獲取過程246 
5.8 Service組件的啟動過程252 
5.8.1註冊Service組件253 
5.8.2啟動Binder線程池297 
5.9 Service代理對象的獲取過程299 
5.10 Binder進程間通信機制的Java接口308 
5.10.1 Service Manager的Java代理對象的獲取過程308 
5.10 .2 Java服務接口的定義和解析318 
5.10.3 Java服務的啟動過程321 
5.10.4 Java服務代理對象的獲取過程328 
5.10.5 Java服務的調用過程331 

第6章Ashmem匿名共享內存系統335 
6.1 Ashmem驅動程序336 
6.1.1基礎數據結構336
6.1.2匿名共享內存設備的初始化過程338 
6.1.3匿名共享內存設備文件的打開過程340 
6.1.4匿名共享內存設備文件的內存映射過程342 
6.1.5匿名共享內存塊的鎖定和解鎖過程344 
6.1 .6匿名共享內存塊的回收過程352 
6.2運行時庫cutils的匿名共享內存訪問接口353 
6.3匿名共享內存的C++訪問接口357 
6.3.1 MemoryHeapBase357 
6.3.2 MemoryBase367 
6.3.3應用實例372 
6.4匿名共享內存的Java訪問接口378 
6.4.1 MemoryFile378 
6.4.2應用實例383 
6.5匿名共享內存的共享原理394 

第3篇Android應用程序框架

第7章Activity組件的啟動過程400 
7.1 Activity組件應用實例400 
7.2根Activity組件的啟動過程406 
7.3子Activity組件在進程內的啟動過程440 
7.4子Activity組件在新進程中的啟動過程448 

第8章Service組件的啟動過程451 
8.1 Service組件應用實例451 
8.2 Service組件在新進程中的啟動過程459 
8.3 Service組件在進程內的綁定過程471

第9章Android系統廣播機制494 
9.1廣播機制應用實例495 
9.2廣播接收者的註冊過程501 
9.3廣播的發送過程509 

第10章Content Provider組件的實現原理532 
10.1 Content Provider組件應用實例533 
10.1.1 ArticlesProvider533 
10.1 .2 Article543 
10.2 Content Provider組件的啟動過程558 
10.3 Content Provider組件的數據共享原理581 
10.3.1數據共享模型581 
10.3.2數據傳輸過程584 
10.4 Content Provider組件的數據更新通知機制604 
10.4.1註冊內容觀察者605 
10.4.2發送數據更新通知611 

第11章Zygote和System進程的啟動過程619 
11.1 Zygote進程的啟動腳本619 
11.2 Zygote進程的啟動過程622 
11.3 System進程的啟動過程630 

第12章Android應用程序進程的啟動過程638 
12.1應用程序進程的創建過程638 
12.2 Binder線程池的啟動過程647 
12.3消息循環的創建過程649 

第13章Android應用程序的消息處理機制653
13.1創建線程消息隊列653 
13.2線程消息循環過程658 
13.3線程消息發送過程663 
13.4線程消息處理過程668 

第14章Android應用程序的鍵盤消息處理機制675 
14.1鍵盤消息處理模型675 
14.2 InputManager的啟動過程678 
14.2. 1創建InputManager678 
14.2.2啟動InputManager681 
14.2.3啟動InputDispatcher683 
14.2.4啟動InputReader685 
14.3 InputChannel的註冊過程696 
14.3.1創建InputChannel697 
14.3.2註冊Server端InputChannel705 
14.3.3註冊系統當前激活的應用程序窗口709 
14.3. 4註冊Client端InputChannel714 
14.4鍵盤消息的分發過程717 
14.4.1 InputReader獲得鍵盤事件718 
14.4.2 InputDispatcher分發鍵盤事件725 
14.4.3系統當前激活的應用程序窗口獲得鍵盤消息735 
14.4.4 InputDispatcher獲得鍵盤事件處理完成通知751 
14.5 InputChannel的註銷過程754 
14.5.1銷毀應用程序窗口755
14.5.2註銷Client端InputChannel764 
14.5.3註銷Server端InputChannel766 

第15章Android應用程序線程的消息循環模型772 
15.1應用程序主線程消息循環模型773 
15.2與界面無關的應用程序子線程消息循環模型774 
15.3與界面相關的應用程序子線程消息循環模型777
 
第16章Android應用程序的安裝和顯示過程786 
16.1應用程序的安裝過程786 
16.2應用程序的顯示過程822