本書的重點是Android Framework的Java層,對Java層有關的核心模組和服務深入且詳細的分析。透過本書,讀者不僅能對Android系統本身有更深入的了解,而且還能掌握分析大型複雜原始程式碼的能力。
全書以直接剖析原始程式的方式進行講解,旨在引領讀者一步步深入Android系統中相關模組的內部原理,去了解它們是如何實現、如何工作的。在分析過程中,筆者根據個人研究Android 程式的心得,採用了精簡流程和一個個擊破的方法。
同時,筆者還提出一些難度不大的基礎知識、相關的補充閱讀資料,甚至筆者在實際專案中遇到的開放式問題,留給讀者自行研究和探討。
適用:Android應用開發工程師、Android系統開發工程師、對Android系統執行原理有興趣的讀者。
作者序
前言
本書以直接剖析原始程式的方式進行講解,旨在引領讀者一步步深入於Android 系統中相關模組的內部原理,去了解它們是如何實現、如何工作的。在分析過程中,筆者根據個人研究Android 程式的心得,採用了精簡流程和一個個擊破的方法。同時,筆者還提出了一些難度不大的基礎知識、相關的補充閱讀資料,甚至筆者在實際專案中遇到的開放式問題,留給讀者自行研究和探討。總之,筆者希望讀者在閱讀完本書後,至少能有以下兩個收穫:
◎能從“以Android 並高於Android”為基礎的角度來看待和分析Android。
◎ 能初步具有大型複雜程式的分析能力。
適合讀者群
適合閱讀本書的讀者包含:
(1)Android 應用開發工程師
雖然應用開發工程師平常接觸的多是Android SDK,但是只有更深入地了解了Android 系統執行原理,才能寫出更穩固、更高效率的模組。
(2)Android 系統開發工程師
系統開發工程師常常需要深入了解系統的運轉過程, 而本書所有關的內容正是他們在工作和學習中最想了解的。那些對實際服務( 如ActivityManagerService、PackageManagerService)有興趣的讀者,也可以單刀直入,閱讀本書相關章節。
(3)對Android 系統執行原理有興趣的讀者這部分讀者需要具有基本的Android 開發知識基礎。
如何閱讀本書
本書是針對Android 原始程式進行分析的,而原始程式檔案所在的路徑一般都很長,例如,檔案AndroidRuntime.cpp 的真實路徑是frameworks/base/core/jni/AndroidRuntime.cpp。為了行文方便,在各章節開頭,均把本章有關的原始程式路徑全部列出,而在實際分析原始程式時,則只列出該原始程式的檔案名稱。例如:
[-->AndroidRuntime.cpp]
// 這裡是原始程式和一些註釋
另外,本書在描述類別之間的關係及函數呼叫流程上,使用了UML 的靜態類別圖及序列圖。UML 是一個強大的工具,但它的建模標準過於煩瑣,為更簡單清晰地描述事情的本質,本書並未完全遵循UML 的建模標準。
勘誤和支援
由於作者的水準有限,加之寫作時間倉促,書中難免會出現一些錯誤或不準確的地方,懇請讀者批評和指正。若有問題,可透過電子郵件或在部落格上留言與筆者共同討論。筆者的聯絡方式是:
電子郵件:fanping.deng@gmail.com
部落格:blog.csdn.net/innost、cnblogs.net/innost 和http://my.oschina.net/
innost/blog
前言
本書以直接剖析原始程式的方式進行講解,旨在引領讀者一步步深入於Android 系統中相關模組的內部原理,去了解它們是如何實現、如何工作的。在分析過程中,筆者根據個人研究Android 程式的心得,採用了精簡流程和一個個擊破的方法。同時,筆者還提出了一些難度不大的基礎知識、相關的補充閱讀資料,甚至筆者在實際專案中遇到的開放式問題,留給讀者自行研究和探討。總之,筆者希望讀者在閱讀完本書後,至少能有以下兩個收穫:
◎能從“以Android 並高於Android”為基礎的角度來看待和分析Android。
◎ 能初步具有大型複雜程式的分...
目錄
前言
第1章 架設Android 原始程式工作環境
1.1 Android 系統架構
1.2 架設開發環境
1.2.1 下載原始程式
1.2.2 編譯原始程式
1.2.3 利用Eclipse偵錯system_process
1.3 本章小結
第2章 深入了解Java Binder 和MessageQueue
2.1 概述
2.2 Java 層中的Binder 架構分析
2.2.1 Binder架構總覽
2.2.2 初始化Java層Binder框架
2.2.3 addService實例分析
2.2.4 Java層Binder架構歸納
2.3 心系兩界的MessageQueue
2.3.1 MessageQueue的建立
2.3.2 分析訊息
2.3.3 nativePollOnce函數分析
2.3.4 MessageQueue歸納
第3章 深入了解SystemServer
3.1 概述
3.2 SystemServer 分析
3.2.1 main函數分析
3.2.2 Service群英會
3.3 EntropyService 分析
3.4 DropBoxManagerService 分析
3.4.1 DBMS建構函數分析
3.4.2 dropbox記錄檔的增加
3.4.3 DBMS和settings資料庫
3.5 DiskStatsService 和DeviceStorageMonitorService 分析
3.5.1 DiskStatsService分析
3.5.2 DeviceStorageManagerService分析
3.6 SamplingProfilerService 分析
3.6.1 SamplingProfilerService建構函數分析
3.6.2 SamplingProfilerIntegration分析
3.7 ClipboardService 分析
3.7.1 複製資料到剪貼簿
3.7.2 從剪貼簿貼上資料
3.7.3 CBS中的許可權管理
3.8 本章小結
第4章 深入了解PackageManagerService
4.1 概述
4.2 初識PackageManagerService
4.3 PKMS 的main 函數分析
4.3.1 建構函數分析之前期準備工作
4.3.2 建構函數分析之掃描Package
4.3.3 建構函數分析之掃尾工作
4.3.4 PKMS建構函數歸納
4.4 APK Installation 分析
4.4.1 adb install分析
4.4.2 pm分析
4.4.3 installPackageWithVerification函數分析
4.4.4 APK 安裝流程歸納
4.4.5 Verification介紹
4.5 queryIntentActivities 分析
4.5.1 Intent及IntentFilter介紹
4.5.2 Activity資訊的管理
4.5.3 Intent 比對查詢分析
4.5.4 queryIntentActivities歸納
4.6 installd 及UserManager 介紹
4.6.1 installd介紹
4.6.2 UserManager介紹
4.7 本章學習重點
4.8 本章小結
第5章 深入了解PowerManagerService
5.1 概述
5.2 初識PowerManagerService
5.2.1 PMS建構函數分析
5.2.2 init分析
5.2.3 systemReady分析
5.2.4 BootComplete處理
5.2.5 初識PowerManagerService歸納
5.3 PMS WakeLock 分析
5.3.1 WakeLock用戶端分析
5.3.2 PMS acquireWakeLock分析 .
5.3.3 Power類別及LightService類別介紹
5.3.4 WakeLock歸納
5.4 userActivity 及Power 按鍵處理分析
5.4.1 userActivity分析
5.4.2 Power按鍵處理分析
5.5 BatteryService 及BatteryStatsService 分析
5.5.1 BatteryService分析
5.5.2 BatteryStatsService分析
5.5.3 BatteryService及BatteryStatsService歸納
5.6 本章學習重點
5.7 本章小結
第6章 深入了解ActivityManagerService
6.1 概述
6.2 初識ActivityManagerService
6.2.1 ActivityManagerService的main函數分析
6.2.2 AMS的 setSystemProcess分析
6.2.3 AMS的 installSystemProviders函數分析
6.2.4 AMS的 systemReady分析
6.2.5 初識ActivityManagerService歸納
6.3 startActivity 分析
6.3.1 從am說起
6.3.2 AMS的startActivityAndWait函數分析
6.3.3 startActivityLocked分析
6.4 Broadcast 和BroadcastReceiver 分析
6.4.1 registerReceiver流程分析
6.4.2 sendBroadcast流程分析
6.4.3 BROADCAST_INTENT_MSG訊息處理函數
6.4.4 應用處理程序處理廣播分析
6.4.5 廣播處理歸納
6.5 startService 之按圖索驥
6.5.1 Service知識介紹
6.5.2 startService流程圖
6.6 AMS 中的處理程序管理
6.6.1 Linux處理程序管理介紹
6.6.2 關於Android中的處理程序管理的介紹
6.6.3 AMS處理程序管理函數分析
6.6.4 AMS處理程序管理歸納
6.7 App 的 Crash 處理
6.7.1 應用處理程序的Crash處理
6.7.2 AMS的handleApplicationCrash分析
6.7.3 AppDeathRecipient binderDied分析
6.7.4 App的Crash處理歸納
6.8 本章學習重點
第7章 深入了解ContentProvider
7.1 概述
7.2 MediaProvider 的啟動及建立
7.2.1 Context的getContentResolver函數分析
7.2.2 MediaStore.Image.Media的query函數分析
7.2.3 MediaProvider的啟動及建立歸納
7.3 SQLite 建立資料庫分析
7.3.1 SQLite及SQLiteDatabase家族
7.3.2 MediaProvider建立資料庫分析
7.3.3 SQLiteDatabase建立資料庫的分析歸納
7.4 Cursor 的query 函數的實現分析
7.4.1 分析query關鍵點
7.4.2 MediaProvider 的query分析
7.4.3 query關鍵點分析
7.4.4 Cursor query實現分析歸納
7.5 Cursor close 函數實現分析
7.5.1 用戶端close的分析
7.5.2 服務端close的分析
7.5.3 finalize函數分析
7.5.4 Cursor close函數歸納
7.6 ContentResolver openAssetFileDescriptor 函數分析
7.6.1 openAssetFileDescriptor之用戶端呼叫分析
7.6.2 ContentProvider的 openTypedAssetFile函數分析
7.6.3 跨處理程序傳遞檔案描述符號的探討
7.6.4 openAssetFileDescriptor函數分析歸納
7.7 本章學習重點
7.8 本章小結
第8章 深入了解ContentService 和AccountManagerService
8.1 概述
8.2 資料更新通知機制分析
8.2.1 初識ContentService
8.2.2 ContentResovler 的registerContentObserver分析
8.2.3 ContentResolver的 notifyChange分析
8.2.4 資料更新通知機制歸納和深入探討
8.3 AccountManagerService 分析
8.3.1 初識AccountManagerService
8.3.2 AccountManager addAccount分析
8.3.3 AccountManagerService的分析歸納
8.4 資料同步管理SyncManager 分析
8.4.1 初識SyncManager
8.4.2 ContentResolver 的requestSync分析
8.4.3 資料同步管理SyncManager分析歸納
8.5 本章學習重點
8.6 本章小結
前言
第1章 架設Android 原始程式工作環境
1.1 Android 系統架構
1.2 架設開發環境
1.2.1 下載原始程式
1.2.2 編譯原始程式
1.2.3 利用Eclipse偵錯system_process
1.3 本章小結
第2章 深入了解Java Binder 和MessageQueue
2.1 概述
2.2 Java 層中的Binder 架構分析
2.2.1 Binder架構總覽
2.2.2 初始化Java層Binder框架
2.2.3 addService實例分析
2.2.4 Java層Binder架構歸納
2.3 心系兩界的MessageQueue
2.3.1 MessageQueue的建立
2.3.2 分析訊息
2.3.3 nativePollOnce函數分析
2....