Android源碼分析實錄 ( 簡體 字) |
作者:李忠良 | 類別:1. -> 程式設計 -> 手機程式 -> Android |
譯者: |
出版社:清華大學出版社 | 3dWoo書號: 41277 詢問書籍請說出此書號!【缺書】 NT售價: 445 元 |
出版日:3/23/2015 |
頁數:730 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787302393290 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:Android(中文譯名為安卓)是IT界巨頭Google(谷歌)公司于2007年11月5日推出的一款智能操作系統,最初被應用于智能手機,后來隨著版本的更新和發展,也被廣泛應用于平板電腦、智能電視、可穿戴設備和健康設備中。Android是一款基于Linux平臺的開源操作系統的名稱,根據國際數據公司(IDC)公布的數據,Android在智能手機操作系統中的市場占有率已經達到75%。 高份額的市場占有率使得更多的開發人員把目光投入這款神奇的系統,很多初學者也紛紛涌入Android的學習行列中,配合這些需求,Android的各種應用類圖書不斷涌現并廣受歡迎。但美中不足的是,深入源碼分析的書籍屈指可數。而源碼分析正是通往Android殿堂、躋身為高手的階梯。 為了讓廣大初學者可以對Android系統實現“靈與肉”的感知,而不是停留在抽象的原理和概念上,本書對Android系統的源碼進行細致的分析,這樣做的目的,是提煉出Android系統埋藏于深處的本質和精華的東西,以展示這款神奇的系統究竟是怎樣實現的。 1.本書內容 Android系統升級較快,有些代碼變動很大。系統自2007年發布第一個版本1.1以來,截至2013年7月發布版本4.3,中間一共存在十多個版本。但據官方統計,到2013年5月5日,占據前三位的版本分別是Android 4.2,Android 4.1和Android 4.3,其實這三個版本的區別并不是很大,只是在某領域的細節上進行了更新。因此,在本書中,我們選擇本書最初寫作時的最新版本Android 4.3系統的實現。 本書共分15章,依次為走進Android世界、硬件抽象層詳解、分析JNI(Java本地接口)層、Android內存系統分析、Android虛擬機系統詳解、IPC通信機制詳解、Zygote進程/System進程和應用程序進程、分析Activity組件、Content Provider數據存儲、Broadcast(廣播)系統詳解、多媒體系統詳解、電源管理系統詳解、輸入系統驅動應用、藍牙系統詳解、網絡系統詳解。 本書幾乎涵蓋Android源碼中的所有核心系統的內容,全書通俗易懂,特別有利于初學者學習和消化。 2.本書特色 本書內容十分豐富,分析細致、全面。我們的目標是通過一本圖書,提供多本圖書的價值,讀者可以根據自己的需要,有選擇地閱讀。 在內容的編寫上,本書具有以下特色。 (1) 結構合理 從用戶的實際需要出發,科學安排知識結構。全書詳細地講解與Android應用開發有關的源碼,內容循序漸進,由淺入深。 (2) 易學易懂 本書條理清晰、語言簡潔,可幫助讀者快速掌握每個知識點,使讀者既可以按照本書編排的章節順序進行學習,也可以根據自己的需求,對某一章節進行有針對性的學習。 (3) 實用性強 本書徹底摒棄枯燥的理論知識羅列,注重實用性和可操作性,通過細膩的筆法,逐步講解各個知識點的基本知識。 (4) 內容全面 本書是如今市面上“內容最全的Android源碼分析書”,無論是獲取源碼,還是各個常用、常見的模塊系統,在本書中您都能找到解決問題的答案。 3.讀者對象 本書適合下列人員閱讀和學習: 初學Android編程的自學者。 Android源碼分析人員。 Android底層開發人員。 Android系統開發人員。 相關培訓機構的教師和學員。 從事Android開發的程序員。 4.作者支持 在編寫此書的過程中,得到了清華大學出版社工作人員的大力支持,正是由于各位編輯的求實態度、耐心的工作和奉獻精神,才使得本書能夠快速出版。 另外也十分感謝我的家人在我寫作的時候給予的巨大支持。 由于作者水平有限,本書的疏漏之處在所難免,懇請讀者提出意見或建議,以便再版時修訂并使之更臻完善。我們提供了售后支持QQ(號碼為1727069718),讀者如有疑問可以通過QQ提出,將會得到滿意的答復。 編 者
|
內容簡介: Android是一款服務于智能手機和平板電腦等設備的操作系統,截止作者撰寫此書時為止,Android在智能手機操作系統市場中已經占有75%的份額。為了讓廣大讀者充分了解這款神奇的操作系統的架構原理,本書循序漸進地分析了Android系統核心源碼的基本知識。 本書共分為15章,主要內容包括走進Android世界、硬件抽象層詳解、分析JNI(Java本地接口)層、Android內存系統分析、Android虛擬機系統詳解、IPC通信機制詳解、Zygote進程/System進程和應用程序進程、分析Activity組件、Content Provider數據存儲、Broadcast(廣播)系統詳解、多媒體系統詳解、電源管理系統詳解、輸入系統驅動應用、藍牙系統詳解、網絡系統詳解等。 本書幾乎涵蓋了Android源碼中的所有核心系統的內容,全書內容通俗易懂,適合Android初學者、Android愛好者、Android底層開發人員、Android應用開發人員閱讀和學習,也可以作為相關培訓學校和大專院校相關專業的教學用書。 |
目錄:第1章 走進Android世界 1 1.1 Android系統的優勢 2 1.1.1 開源 2 1.1.2 強大的開發團隊的支持 2 1.1.3 開發人員的支持 2 1.2 Android系統架構介紹 3 1.2.1 底層操作系統層(Linux內核層) 4 1.2.2 庫(Libraries)和運行環境(Runtime) 4 1.2.3 應用程序框架(ApplicationFramework) 5 1.2.4 頂層應用程序(Application) 5 1.3 核心組件 5 1.3.1 Activity的界面表現 5 1.3.2 Intent和IntentFilters界面切換 6 1.3.3 Service服務 6 1.3.4 用Broadcast IntentReceiver廣播 7 1.3.5 用Content Provider存儲 7 1.4 進程和線程 7 1.4.1 什么是進程 7 1.4.2 什么是線程 8 1.5 獲取Android 4.3源碼 8 1.5.1 在Linux系統中獲取Android源碼 8 1.5.2 在Windows平臺上獲取Android源碼 9 1.6 Android源碼結構分析 14 1.6.1 Android源碼的目錄結構 15 1.6.2 應用程序 16 1.6.3 應用程序框架 18 1.6.4 系統服務 19 1.6.5 系統程序庫 21 1.6.6 系統運行庫 24 1.6.7 硬件抽象層 25 1.7 編譯Android源碼 26 1.7.1 搭建編譯環境 27 1.7.2 開始編譯 27 1.7.3 在模擬器中運行 29 1.7.4 編譯源碼生成SDK 30 第2章 硬件抽象層詳解 35 2.1 什么是HAL層 36 2.1.1 為什么把對硬件的支持劃分為兩層來實現 36 2.1.2 HAL層的位置結構 36 2.2 分析HAL Module架構 38 2.2.1 hw_module_t 39 2.2.2 hw_module_methods_t 40 2.2.3 hw_device_t 40 2.3 分析文件hardware.c 41 2.3.1 函數hw_get_module 41 2.3.2 數組variant_keys 41 2.3.3 載入相應的庫 42 2.3.4 打開相應庫并獲得hw_module_t結構體 43 2.4 分析硬件抽象層的加載過程 44 2.5 分析硬件訪問服務 48 2.5.1 定義硬件訪問服務接口 48 2.5.2 實現硬件訪問服務 49 2.6 分析mokoid工程 50 2.6.1 直接調用Service方法實現 51 2.6.2 通過Manager調用Service實現 56 2.7 分析HAL層的具體實現(以Sensor系統為例) 59 2.7.1 傳感器系統的基礎知識 59 2.7.2 HAL層的Sensor代碼 60 2.7.3 Sensor編程的流程 61 第3章 分析JNI(Java本地接口)層 63 3.1 JNI基礎 64 3.1.1 JNI的層次結構 64 3.1.2 JNI的本質 64 3.1.3 與JNI相關的文件 65 3.2 分析Java層 66 3.2.1 加載JNI庫 66 3.2.2 實現掃描工作 68 3.2.3 讀取并保存信息 69 3.2.4 刪除不是SD卡中的文件信息 72 3.2.5 直接轉向JNI 72 3.2.6 掃描函數scanFile 73 3.2.7 異常處理 73 3.3 分析MediaScanner的JNI層 74 3.3.1 將Native對象的指針保存到Java對象 75 3.3.2 創建Native層的MediaScanner對象 75 3.4 分析MediaScanner的Native層 76 3.4.1 注冊JNI函數 76 3.4.2 完成注冊工作 78 3.4.3 動態注冊 80 3.4.4 處理路徑參數 82 3.4.5 掃描文件 83 3.4.6 添加TAG信息 83 3.4.7 JNIEnv接口 85 3.4.8 JNI中的環境變量 86 3.5 JNI實例分析(基于Camera系統) 87 3.5.1 Java層預覽接口 87 3.5.2 注冊預覽的JNI函數 89 3.5.3 C/C++層的預覽函數 92 第4章 Android內存系統分析 95 4.1 Android的進程通信機制 96 4.1.1 Android的進程間通信(IPC)機制Binder 96 4.1.2 Service Manager是Binder機制的上下文管理者 97 4.2 分析Ashmem驅動程序 98 4.2.1 基礎數據結構 98 4.2.2 初始化處理 99 4.2.3 打開匿名共享內存設備文件 101 4.2.4 內存映射 104 4.2.5 讀寫操作 105 4.2.6 鎖定和解鎖 107 4.2.7 回收內存塊 113 4.3 分析C++訪問接口層 115 4.3.1 接口MemoryHeapBase 115 4.3.2 接口MemoryBase 125 4.4 分析Java訪問接口層 128 4.5 內存優化機制 132 4.5.1 sp和wp簡析 132 4.5.2 詳解智能指針 134 4.5.3 輕量級指針 136 4.5.4 強指針 139 4.5.5 弱指針 153 第5章 Android虛擬機系統詳解 159 5.1 Android虛擬機基礎 160 5.1.1 Android虛擬機源碼目錄 160 5.1.2 Dalvik的架構 161 5.1.3 Dalvik虛擬機的主要特征 163 5.1.4 Dalvik的進程管理 163 5.1.5 Android的初始化流程 163 5.2 分析Dalvik的運作流程 164 5.2.1 Dalvik虛擬機相關的可執行程序 164 5.2.2 初始化Dalvik虛擬機 167 5.2.3 啟動Zygote 186 5.2.4 啟動SystemServer進程 190 5.2.5 加載class類文件 193 5.3 Dalvik VM的內存系統 197 5.3.1 如何分配內存 197 5.3.2 分析內存管理機制的源碼 199 5.4 分析Dalvik VM的啟動過程 211 5.4.1 創建一個Dalvik VM實例 211 5.4.2 指定控制選項 212 5.4.3 創建并初始化Dalvik VM實例 220 5.4.4 創建JNIEnvExt對象 223 5.4.5 設置當前進程 229 5.4.6 注冊Android核心類的JNI方法 229 5.4.7 使用線程創建javaCreateThreadEtc鉤子 233 5.5 創建Dalvik VM進程 233 5.5.1 分析底層啟動過程 234 5.5.2 創建Dalvik VM進程 234 5.5.3 初始化運行的Dalvik VM 238 第6章 IPC通信機制詳解 241 6.1 Binder機制概述 242 6.2 分析Binder驅動程序 243 6.2.1 分析數據結構 243 6.2.2 分析設備初始化 255 6.2.3 打開Binder設備文件 257 6.2.4 內存映射 258 6.2.5 釋放物理頁面 264 6.2.6 分配內核緩沖區 264 6.2.7 釋放內核緩沖區 267 6.2.8 查詢內核緩沖區 269 6.3 Binder封裝庫 270 6.3.1 Binder庫的實現層次 270 6.3.2 類BBinder 271 6.3.3 類BpRefBase 274 6.3.4 類IPCThreadState 275 6.4 初始化Java層Binder框架 279 第7章 Zygote進程、System進程和應用程序進程 283 7.1 Zygote(孕育)進程詳解 284 7.1.1 Zygote基礎 284 7.1.2 分析Zygote的啟動過程 285 7.2 System進程詳解 303 7.2.1 啟動System進程前的準備工作 303 7.2.2 分析SystemServer 304 7.2.3 分析EntropyService 308 7.2.4 分析DropBoxManagerService 310 7.2.5 分析DiskStatsService 318 7.2.6 分析DeviceStorageManagerService 323 7.2.7 分析SamplingProfilerService 326 7.3 應用程序進程詳解 336 7.3.1 創建應用程序 336 7.3.2 啟動線程池 347 7.3.3 創建信息循環 348 第8章 分析Activity組件 351 8.1 Activity基礎 352 8.1.1 Activity的狀態 352 8.1.2 Activity的主要函數 353 8.2 啟動Activity 355 8.2.1 Launcher啟動應用程序 356 8.2.2 返回ActivityManagerService的遠程接口 358 8.2.3 解析intent的內容 359 8.2.4 分析檢查機制 363 8.2.5 執行Activity組件的操作 378 8.2.6 將Launcher推入Paused狀態 386 8.2.7 處理消息 388 8.2.8 報告暫停 389 8.2.9 建立雙向連接 394 8.2.10 啟動新的Activity 400 8.2.11 發送通知信息 403 第9章 Content Provider數據存儲 405 9.1 Content Provider基礎 406 9.1.1 Content Provider在應用程序中的架構 406 9.1.2 Content Provider的常用接口 407 9.2 啟動Content Provider 408 9.2.1 獲得對象接口 408 9.2.2 存在校驗 410 9.2.3 啟動Android應用程序 416 9.2.4 根據進程啟動Content Provider 416 9.2.5 處理消息 422 9.2.6 具體啟動 423 9.3 Content Provider數據共享 427 9.3.1 獲取接口 427 9.3.2 創建CursorWindow對象 430 9.3.3 數據傳遞 433 9.3.4 處理進程通信的請求 436 9.3.5 數據操作 442 第10章 Broadcast(廣播)系統詳解 447 10.1 Broadcast基礎 448 10.2 發送廣播信息 448 10.2.1 intent描述指示 449 10.2.2 傳遞廣播信息 449 10.2.3 封裝傳遞 450 10.2.4 處理發送請求 451 10.2.5 查找廣播接收者 451 10.2.6 處理廣播信息 455 10.2.7 檢查權限 464 10.2.8 處理的進程通信請求 466 10.3 分析BroadcastReceiver 469 10.3.1 MainActivity的調用 470 10.3.2 注冊廣播接收者 470 10.3.3 獲取接口對象 471 10.3.4 處理進程間的通信請求 474 第11章 多媒體系統詳解 479 11.1 Android多媒體系統介紹 480 11.2 OpenMAX框架詳解 481 11.2.1 分析OpenMAX框架構成 482 11.2.2 實現OpenMAX IL層接口 486 11.3 分析OpenCore框架 495 11.3.1 OpenCore的層次結構 495 11.3.2 OpenCore的代碼結構 496 11.3.3 OpenCore的編譯結構 497 11.3.4 操作系統兼容庫 501 11.3.5 實現OpenCore中的OpenMAX部分 503 11.3.6 OpenCore擴展詳解 517 11.4 Stagefright框架詳解 523 11.4.1 Stagefright代碼結構 523 11.4.2 Stagefright實現OpenMAX接口 524 11.4.3 分析Video Buffer的傳輸流程 528 第12章 電源管理系統詳解 533 12.1 Android Power Management基礎 534 12.2 分析Framework層 535 12.2.1 文件PowerManager.java 535 12.2.2 文件PowerManagerService.java 536 12.3 分析JNI層 560 12.3.1 文件android_os_Power.cpp 560 12.3.2 文件power.c 561 12.4 分析Kernel(內核)層 562 12.4.1 文件power.c 562 12.4.2 文件earlysuspend.c 565 12.4.3 文件wakelock.c 566 12.4.4 文件resume.c 568 12.4.5 文件suspend.c 568 12.4.6 文件main.c 570 12.4.7 proc文件 570 12.5 wakelock和early_suspend 571 12.5.1 wakelock的原理 571 12.5.2 early_suspend的原理 572 12.5.3 Android休眠 572 12.5.4 Android喚醒 575 第13章 輸入系統驅動應用 577 13.1 輸入系統介紹 578 13.2 分析Input(輸入)系統驅動 580 13.2.1 分析頭文件 580 13.2.2 分析核心文件input.c 584 13.2.3 分析event機制 600 13.3 分析硬件抽象層 603 13.3.1 分析文件KeycodeLabels.h 603 13.3.2 分析文件KeyCharacterMap.h 608 13.3.3 分析Kl格式的文件 609 13.3.4 分析kcm格式文件 610 13.3.5 分析文件EventHub.cpp 611 13.4 分析驅動的具體實現 615 13.4.1 分析內置模擬器中的輸入驅動實現 615 13.4.2 MSM高通處理器中的輸入驅動實現 616 13.4.3 OMAP高通處理器中的輸入驅動實現 625 第14章 藍牙系統詳解 627 14.1 Android系統中的藍牙模塊 628 14.2 分析藍牙模塊的源碼 630 14.2.1 初始化藍牙芯片 630 14.2.2 藍牙服務 630 14.2.3 管理藍牙電源 631 14.3 與藍牙相關的類 632 14.3.1 BluetoothSocket類 632 14.3.2 BluetoothServerSocket類 633 14.3.3 BluetoothAdapter類 634 14.3.4 BluetoothClass.Service類 641 14.3.5 BluetoothClass.Device類 641 14.4 低功耗藍牙協議棧詳解 642 14.4.1 低功耗藍牙協議棧基礎 642 14.4.2 低功耗藍牙API詳解 643 14.5 Android中的BlueDroid 644 14.5.1 Android系統中BlueDroid的架構 644 14.5.2 Application Framework層分析 645 14.5.3 分析Bluetooth SystemService層 653 14.5.4 分析JNI層 654 14.5.5 分析HAL層 659 14.6 Android藍牙模塊的運作流程 659 14.6.1 打開藍牙設備 659 14.6.2 搜索藍牙 665 14.6.3 傳輸OPP文件 671 第15章 網絡系統詳解 679 15.1 使用WebKit瀏覽網頁 680 15.1.1 WebKit的Java層框架 681 15.1.2 C/C++層框架 685 15.1.3 分析WebKit的操作過程 688 15.1.4 WebView詳解 692 15.1.5 WebViewCore詳解 693 15.2 Wi-Fi系統應用 700 15.2.1 Wi-Fi概述 700 15.2.2 Wi-Fi系統的層次結構 701 15.2.3 與Linux的差異 703 15.2.4 分析本地部分的源碼 703 15.2.5 分析JNI部分的源碼 706 15.2.6 分析Java Framework部分的源碼 708 15.2.7 分析Setting中的設置部分的源碼 721 |
序: |