出版時間:2011-9 出版社:電子工業(yè) 作者:柯元旦 頁數(shù):595
Tag標(biāo)簽:無
內(nèi)容概要
本書內(nèi)容分別從基礎(chǔ)、內(nèi)核、系統(tǒng)、編譯以及硬件驅(qū)動幾個方面對Android內(nèi)核相關(guān)知識進(jìn)行深入剖析,詳細(xì)分析了Android內(nèi)核的內(nèi)部機(jī)制,包括窗口管理系統(tǒng)、Activity管理系統(tǒng)、輸入法框架、編譯系統(tǒng)等,為Android內(nèi)核定制以及高級應(yīng)用程序開發(fā)提供技術(shù)參考。
本書適合于所有Android相關(guān)的工程師以及產(chǎn)品經(jīng)理。
作者簡介
柯元旦,1981年生于陜西咸陽,2003年畢業(yè)于西安電子科技大學(xué)通信工程學(xué)院;2003~2006年,創(chuàng)立了一家設(shè)計公司,提供便攜式媒體播放器解決方案,基于TI
DSP芯片自主開發(fā)了一套操作系統(tǒng),包括任務(wù)管理與調(diào)度、文件系統(tǒng)及GUI(圖形用戶接口)等:2006~2009年,就職于聯(lián)想研究院,先后從事嵌入式系統(tǒng)設(shè)計以及互聯(lián)網(wǎng)應(yīng)用開發(fā);2009年至今,從事Android應(yīng)用程序開發(fā)和Framework內(nèi)核研究,對Android內(nèi)核有較深刻的理解。
書籍目錄
第1部分 基礎(chǔ)篇
第1章 Linux基礎(chǔ)
1.1 Linux文件系統(tǒng)概述
1.2 Linux啟動過程
1.3 常用Linux 命令
1.4 Shell腳本備忘
1.4.1 獲取輸入
1.4.2 變量定義
1.4.3 條件判斷
1.4.4 while []...do... done語句
1.4.5 for循環(huán)
1.4.6 函數(shù)
1.4.7 常用內(nèi)置符號常量
1.5 Make腳本備忘
1.5.1 一個簡單的Makefile文件
1.5.2 變量的定義與賦值
1.5.3 條件控制語句
1.5.4 宏(函數(shù))定義
1.5.5 內(nèi)置符號和變量
1.5.6 模板目標(biāo)(Pattern target)
1.5.7 目標(biāo)特定的變量賦值(Target-specific variable)
1.5.8 常用選項
第2章 Java基礎(chǔ)
2.1 類裝載器DexClassLoader
2.1.1 DexClassLoader的調(diào)用方法
2.1.2 基于類裝載器設(shè)計一種“插件”架構(gòu)
2.2 JNI調(diào)用機(jī)制
2.2.1 Java訪問C
2.2.2 C訪問Java
2.2.3 在C中使用持久對象
2.3 異步消息處理線程
2.3.1 實現(xiàn)異步線程的一般思路
2.3.2 Android中異步線程的實現(xiàn)方法
第3章 Android源碼下載及開發(fā)環(huán)境配置
3.1 Mac系統(tǒng)的配置
3.1.1 硬盤格式的配置
3.1.2 port的用法
3.2 在Linux中配置USB連接
3.3 在Eclipse中調(diào)試Framework
3.3.1 一段防止下載異常的腳本
3.3.2 調(diào)試Framework中的代碼
第4章 使用git
4.1 安裝git
4.2 git倉庫管理
4.2.1 倉庫的組成
4.2.2 創(chuàng)建倉庫
4.2.3 分支管理
4.3 git merge用法
4.4 git rebase用法
4.5 git cherry-pick用法
4.6 git reset用法
4.7 恢復(fù)到無引用提交
4.8 git remote用法
4.9 git 配置
4.9.1 基本信息配置
4.9.2 merge、diff工具配置
4.9.3 .gitignore配置
4.10 同時使用git和svn
4.11 其他git常用命令示例
4.11.1 git branch
4.11.2 git checkout
4.11.3 git log
4.11.4 git commit --amend
4.11.5 git cherry-pick sha-1
4.11.6 git merge-base
4.11.7 git diff master…dev
4.11.8 git revert
4.11.9 git diff
4.11.10 git rm
4.11.11 git tag
第2部分 內(nèi)核篇
第5章 Binder
5.1 Binder框架
5.2 設(shè)計Servier端
5.3 Binder客戶端設(shè)計
5.4 使用Service類
5.4.1 獲取Binder對象
5.4.2 保證包裹內(nèi)參數(shù)順序aidl工具的使用
5.5 系統(tǒng)服務(wù)中的Binder對象
5.5.1 ServiceManager管理的服務(wù)
5.5.2 理解Manager
第6章 Framework概述
6.1 Framework框架
6.1.1 服務(wù)端
6.1.2 客戶端
6.1.3 Linux驅(qū)動
6.2 APK程序的運(yùn)行過程
6.3 客戶端中的線程
6.4 幾個常見問題
6.4.1 Acitivity之間如何傳遞消息(數(shù)據(jù))
6.4.2 窗口相關(guān)的概念
第7章 理解Context
7.1 Context是什么
7.2 一個應(yīng)用程序中包含多少個Context對象
7.3 Context相關(guān)類的繼承關(guān)系
7.4 創(chuàng)建Context
7.4.1 Application對應(yīng)的Context
7.4.2 Activity對應(yīng)的Context
7.4.3 Service對應(yīng)的Context
7.4.4 Context之間的關(guān)系
第8章 創(chuàng)建窗口的過程
8.1 窗口的類型
8.2 token變量的含義
8.2.1 Activity中的mToken
8.2.2 Window中的mAppToken
8.2.3 WindowManager.LayoutParams中的token
8.2.4 View中的token
8.3 創(chuàng)建應(yīng)用窗口
8.4 創(chuàng)建子窗口
8.4.1 Dialog的創(chuàng)建
8.4.2 PopupWindow的創(chuàng)建
8.4.3 ContextMenu的創(chuàng)建
8.4.4 OptionMenu的創(chuàng)建
8.5 系統(tǒng)窗口Toast的創(chuàng)建
8.5.1 Toast調(diào)用流程
8.5.2 Toast添加窗口
8.6 創(chuàng)建窗口示例
第9章 Framework的啟動過程
9.1 Framework運(yùn)行環(huán)境綜述
9.2 Dalvik虛擬機(jī)相關(guān)的可執(zhí)行程序
9.2.1 dalvikvm
9.2.2 dvz
9.2.3 app_process
9.3 zygote的啟動
9.3.1 在init.rc中配置zygote啟動參數(shù)
9.3.2 啟動Socket服務(wù)端口
9.3.3 加載preload-classes
9.3.4 加載preload-resources
9.3.5 使用folk啟動新的進(jìn)程
9.4 SystemServer進(jìn)程的啟動
9.4.1 啟動各種系統(tǒng)服務(wù)線程
9.4.2 啟動第一個Activity
第10章 AmS內(nèi)部原理
10.1 Activity調(diào)度機(jī)制
10.1.1 幾個重要概念
10.1.2 AmS中的一些重要調(diào)度相關(guān)變量
10.1.3 startActivity()的流程
10.1.4 stopActivityLocked()停止Activity
10.1.5 按“Home”鍵回到桌面的過程
10.1.6 按“Back”鍵回到上一個Activity
10.1.7 長按“Home”鍵
10.1.8 Activity生命期的代碼含義
10.2 內(nèi)存管理
10.2.1 關(guān)閉而不退出
10.2.2 Android與Linux的配合
10.2.3 各種關(guān)閉程序的過程
10.2.4 釋放內(nèi)存詳解
10.3 對AmS中數(shù)據(jù)對象的理解
10.3.1 常見的對象操作
10.3.2 理解Activity
10.3.3 Android多進(jìn)程嗎,是同時在運(yùn)行多個應(yīng)用程序嗎
10.4 ActivityGroup的內(nèi)部機(jī)制
10.4.1 TabActivity使用時的類關(guān)系結(jié)構(gòu)
10.4.2 LocalActivityManager的內(nèi)部機(jī)制
10.4.3 ActivityGroup內(nèi)部的Activity生命期控制
第11章 從輸入設(shè)備中獲取消息
11.1 Android消息獲取過程概述
11.2 與消息處理相關(guān)的源碼文件分布
11.3 創(chuàng)建InputDispatcher線程
11.4 把窗口信息傳遞給InputDispatcher線程
11.5 創(chuàng)建InputChannel
11.6 在WmS中注冊InputChannel
11.7 在客戶進(jìn)程中注冊InputChannel
11.8 WmS中處理消息的時機(jī)
11.9 客戶窗口獲取消息的時機(jī)
第12章 屏幕繪圖基礎(chǔ)
12.1 繪制屏幕的軟件架構(gòu)
12.2 Java客戶端繪制調(diào)用過程
12.3 C客戶端繪制過程
12.4 Java客戶端繪制相關(guān)類的關(guān)系
第13章 View工作原理
13.1 導(dǎo)論
13.2 用戶消息類型
13.2.1 按鍵消息
13.2.2 觸摸消息
13.3 按鍵消息派發(fā)過程
13.3.1 KeyEvent.DispatcherState中的長按監(jiān)測
13.3.2 按鍵消息總體派發(fā)過程
13.3.3 根視圖內(nèi)部派發(fā)過程
13.3.4 Activity內(nèi)部派發(fā)過程
13.3.5 View類內(nèi)部的onKeyDown()和onKeyUp()
13.3.6 Activity中的onKeyDown()和onKeyUp()
13.3.7 PhoneWindow內(nèi)部消息派發(fā)過程
13.4 按鍵消息在WmS中的派發(fā)過程
13.5 觸摸消息派發(fā)過程
13.5.1 觸摸消息總體派發(fā)過程
13.5.2 根視圖內(nèi)部消息派發(fā)過程
13.5.3 ViewGroup內(nèi)部消息派發(fā)過程
13.5.4 各種消息監(jiān)測的基本實現(xiàn)方法
13.5.5 View內(nèi)默認(rèn)消息派發(fā)過程
13.6 導(dǎo)致View樹重新遍歷的時機(jī)
13.6.1 狀態(tài)的分類
13.6.2 導(dǎo)致View樹重新遍歷的總體誘因圖
13.6.3 refreshDrawableList()
13.6.4 onFocusedChanged()
13.6.5 ensureTouchMode()
13.6.6 setVisibility()
13.6.7 setEnable()
13.6.8 setSelected()
13.6.9 invalidate()
13.6.10 requestFocus()
13.6.11 requestLayout()
13.7 遍歷View樹performTraversals()的執(zhí)行過程
13.8 計算視圖大?。╩easure)的過程
13.8.1 measure內(nèi)部設(shè)計思路
13.8.2 ViewGroup中的measureChildWithMargins()
13.8.3 LinearLayout中的onMeasure()過程舉例
13.9 布局(layout)過程
13.9.1 layout過程的設(shè)計思路
13.9.2 LinearLayout中onLayout()內(nèi)部過程
13.9.3 TextView中g(shù)ravity與layout的關(guān)系
13.10 繪制(draw)過程
13.10.1 視圖中可繪制的元素
13.10.2 繪制過程的設(shè)計思路
13.10.3 ViewRoot中draw()的內(nèi)部流程
13.10.4 View類中draw()函數(shù)內(nèi)部流程
13.10.5 ViewGroup類中繪制子視圖dispatchDraw()內(nèi)部流程
13.10.6 ViewGroup類中drawChild()過程
13.10.7 繪制滾動條
13.11 動畫的繪制
13.11.1 動畫的設(shè)計思路
13.11.2 ViewGroup類中drawChild()函數(shù)中視圖動畫繪制過程
13.11.3 ViewGroup中dipsatchDraw()中布局動畫繪制流程
第14章 WmS工作原理
14.1 概述
14.1.1 窗口的定義
14.1.2 窗口管理要解決的核心問題
14.1.3 解決核心問題所使用的相關(guān)的變量列表
14.1.4 幾個操作的概念
14.1.5 什么是Policy,以及其與WmS的關(guān)系
14.1.6 WmS接口結(jié)構(gòu)
14.2 WmS主要內(nèi)部類
14.2.1 表示窗口的數(shù)據(jù)類
14.2.2 DimAnimator
14.2.3 FadeInOutAnimation
14.2.4 InputMonitor類
14.2.5 PolicyThread
14.2.6 Session
14.2.7 Watermark
14.2.8 WMThread
14.3 窗口的創(chuàng)建和刪除
14.3.1 創(chuàng)建窗口的時機(jī)和過程
14.3.2 assignLayersLocked()的執(zhí)行過程
14.3.3 addWindowToListInOrderLocked()的執(zhí)行過程
14.3.4 刪除窗口的時機(jī)
14.3.5 刪除窗口的過程
14.3.6 removeWindowInnerLocked()
14.4 計算窗口的大小
14.4.1 描述窗口尺寸的變量
14.4.2 窗口大小的變化過程
14.4.3 Policy中l(wèi)ayoutWindowLw()的執(zhí)行過程
14.4.4 輸入法窗口如何影響應(yīng)用窗口的大小
14.5 切換窗口
14.5.1 切換要解決的問題
14.5.2 InputManager和WmS的接口
14.5.3 AmS與WmS的接口
14.5.4 從A到B的切換
14.5.5 從B回到A的過程
14.5.6 A中長按“Home”鍵切換到B
14.5.7 setAppVisiblity()與銷毀Surface
14.5.8 computeFocusedWindowLocked()
14.6 perforLayoutAndPlaceSurfacesLockedInner()的執(zhí)行過程
14.6.1 總體過程
14.6.2 第一大步驟:計算窗口的大小
14.6.3 第二大步驟:計算窗口的可視狀態(tài)
14.6.4 第三大步驟:通知SurfaceFlinger進(jìn)行窗口重繪
14.7 窗口動畫
14.8 屏幕旋轉(zhuǎn)及Configuration的變化過程
第3部分 系統(tǒng)篇
第15章 資源訪問機(jī)制
15.1 定義資源
15.2 存儲資源
15.3 styleable、style、attr、theme的意義
15.4 AttributeSet與TypedArray類
15.5 獲取Resources的過程
15.5.1 通過Context獲取
15.5.2 通過PackageManager獲取
15.6 Framework資源
15.6.1 加載和讀取
15.6.2 添加
15.6.3 實現(xiàn)真正主題切換的兩種思路
第16章 程序包管理(Package Manager Service)
16.1 包管理概述
16.2 packages.xml文件格式
16.2.1 last-platform-version標(biāo)簽
16.2.2 permissions標(biāo)簽
16.2.3 cert標(biāo)簽
16.2.4 sigs標(biāo)簽
16.2.5 perms標(biāo)簽
16.2.6 package標(biāo)簽
16.2.7 shared-user標(biāo)簽
16.3 包管理服務(wù)的啟動過程
16.3.1 各主要功能類的關(guān)系
16.3.2 PmS主體啟動過程
16.3.3 readPermission()內(nèi)部過程
16.3.4 mSettings.readLP()
16.3.5 scanPackageLI()內(nèi)部過程
16.3.6 mSettings.writeLP()
16.4 應(yīng)用程序的安裝和卸載
16.4.1 各主要功能類關(guān)系
16.4.2 應(yīng)用程序安裝過程
16.4.3 應(yīng)用程序的卸載過程
16.5 intent匹配框架
16.5.1 主要功能類的關(guān)系
16.5.2 主體調(diào)用過程
第17章 輸入法框架
17.1 輸入法框架組成概述
17.2 輸入法中各Binder對象的創(chuàng)建過程
17.2.1 InputConnection
17.2.2 IInputMethodClient
17.2.3 InputMethodSession
17.2.4 InputMethod
17.3 輸入法主要操作過程
17.3.1 輸入法相關(guān)模塊的啟動過程
17.3.2 切換輸入法
17.3.3 啟動輸入法
17.3.4 顯示輸入法
17.3.5 輸入法操作過程中的重要變量總結(jié)
17.4 輸入法窗口內(nèi)部的顯示過程
17.4.1 IMS中的showWindow()的內(nèi)部執(zhí)行過程
17.4.2 標(biāo)準(zhǔn)布局的IMS
17.4.3 自定義布局的IMS
17.5 向編輯框傳遞字符
17.6 輸入法相關(guān)源碼清單
第4部分 編譯篇
第18章 Android編譯系統(tǒng)
18.1 Android源碼文件結(jié)構(gòu)
18.2 從調(diào)用make命令開始說起
18.2.1 編譯命令
18.2.2 編譯結(jié)構(gòu)猜想
18.3 編譯所需腳本文件之間的協(xié)同關(guān)系
18.3.1 編譯系統(tǒng)內(nèi)部功能模塊圖
18.3.2 腳本文件的包含關(guān)系
18.3.3 從子項目中提取編譯目標(biāo)
18.3.4 生成編譯規(guī)則
18.3.5 設(shè)置編譯輸出目錄
18.3.6 生成最終的Image文件
18.4 如何增加一個product
18.4.1 什么是一個product
18.4.2 如何增加一個product
18.5 如何增加一個項目
18.5.1 項目類別和項目路徑
18.5.2 添加一個C項目
18.5.3 添加一個APK項目
18.6 APK編譯過程
18.6.1 總體編譯過程概述
18.6.2 生成R.java
18.6.3 編譯aidl文件
18.6.4 包含Java靜態(tài)庫
18.6.5 編譯Java源文件生成Jar包
18.6.6 將Jar包轉(zhuǎn)換為dex文件
18.6.7 編譯資源文件生成APK包
18.6.8 將dex文件添加到APK包中
18.6.9 添加JNI所需的動態(tài)庫文件
18.6.10 對APK文件進(jìn)行簽名
18.6.11 使用zipalign優(yōu)化APK內(nèi)部存儲
18.7 Framework的編譯
18.7.1 總體編譯過程
18.7.2 framework/core/ext三個Jar文件的區(qū)別
18.8 編譯android.jar
18.8.1 資源文件
18.8.2 aidl文件
18.8.3 Java文件
18.9 編譯adt插件
18.10 總結(jié)
第19章 編譯自己的Rom
19.1 嵌入式系統(tǒng)的內(nèi)存地址空間
19.2 各種映像(Image)文件的作用
19.3 編譯Nexus S(NS)的Image文件
19.3.1 編譯Linux Kernel
19.3.2 提取NS的私有驅(qū)動文件
19.3.3 編譯system.img文件
19.3.4 創(chuàng)建ramdisk.img
19.3.5 創(chuàng)建boot.img文件
19.4 使用fastboot寫入Image文件
19.5 最后驗證
19.5.1 解決觸摸按鍵問題
19.5.2 解決音量和電源鍵
19.5.3 WIFI問題
19.5.4 安裝Google Mobile Service(GMS)
第5部分 硬件驅(qū)動篇
第20章 基于TI OMAP處理器的 Techshine 開發(fā)板介紹
20.1 Techv-35XX開發(fā)板概述
20.2 交叉編譯環(huán)境配置
20.3 x-loader編譯
20.4 u-boot編譯
20.5 Techv-35XX Linux驅(qū)動和內(nèi)核配置及編譯
20.5.1 Touchscreen驅(qū)動配置
20.5.2 KeyBoard驅(qū)動配置
20.5.3 Audio驅(qū)動配置
20.5.4 MMC/SD驅(qū)動配置
20.5.5 NandFlash驅(qū)動配置
20.5.6 LCD驅(qū)動配置
20.5.7 內(nèi)核編譯
20.6 Techv-35XX Android驅(qū)動編寫
20.7 Techv-35XX Android開發(fā)環(huán)境建立
20.8 編譯Android Donut
20.9 Android根文件系統(tǒng)的制作
20.10 相關(guān)Image文件的燒寫
20.11 Android 根文件系統(tǒng)安裝
編輯推薦
“內(nèi)核剖析”乍一聽起來挺嚇唬人的,但這個詞語存在兩個問題,第一個是什么才能稱為內(nèi)核?另一個是“誰”才有能力或者有機(jī)會寫一本“內(nèi)核剖析”的書? 由柯元旦編著的《Android內(nèi)核剖析》之所以在前言中提出這個問題,就是為了不嚇唬大家,并給大家一種信心,相信自己有能力理解本書的內(nèi)容。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載