作者第一本書『Android系統原理深入解析』得到讀者的高度評價,在Android開發者社群內備受關注。本書不僅承繼第一本的優點,更強調從系統設計者的角度去分析Android系統中各個模組內部的實現原理和工作機制。
本書的重點是Android Framework的Java層,對Java層有關的核心模組和服務深入
且詳細的分析。透過本書,讀者不僅能對Android系統本身有更深入的了解,而且還能掌握分析大型複雜原始程式碼的能力。
全書以直接剖析原始程式的方式進行講解,旨在引領讀者一步步深入Android系統中相關模組的內部原理,去了解它們是如何實現、如何工作的。在分析過程中,筆者根據個人研究Android 程式的心得,採用了精簡流程和一個一個擊破的方法。同時,筆者還提出一些難度不大的基礎知識、相關的補充閱讀資料,甚至筆者在實際專案中遇到的開放式問題,留給讀者自行研究和探討。總之,筆者希望讀者在閱讀完本書後,至少能有以下兩個收穫:
能從「以Android 並高於Android」為基礎的角度來看待和分析Android。
能初步具有大型複雜程式的分析能力。
Android應用開發工程師、Android系統開發工程師、對Android系統執行原理有興趣的讀者。
第1章,介紹閱讀本書需要的準備工作,包含Android 4.0原始程式的下載和編譯、Eclipse開發環境的架設,以及Android系統執行緒(system_process)的偵錯等。
第2章,介紹Java Binder和MessageQueue的實現。
第3章,介紹SystemServer,並分析服務的工作原理。這些服務包含ntropyService、DropBoxManagerService、DiskStatsService、DeviceStorageMonitorService、SamplingProfilerService和ClipboardService。
第4章,分析PackageManagerService,負責Android系統中的Package資訊查詢和APK安裝、移除、更新等方面的工作。
第5章,講解PowerManagerService,它是Android中電源管理的核心服務。本章對其中的WakeLock、Power按鍵處理、BatteryStatsService和BatteryService都做了一番較為深入的分析。
第6章,以ActivityManagerService為分析重點,該服務是Android 的核心服務。本章對ActivityManagerService的啟動、Activity的建立和啟動、BroadcastReceiver的工作原理、Android中的執行緒管理等內容較為深入的研究。
第7章,對ContentProvider的建立和啟動、SQLite相關知識、Cursor query和close的實現等較為深入的分析。
第8章,以ContentService和AccountManagerService為分析物件,介紹了資料更新通知機制的實現、帳戶管理和資料同步等方面的知識。
目錄
前言
第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.2 實戰ext3grep恢復檔案
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函數分析
...