出版時(shí)間:2013-1 出版社:楊長(zhǎng)剛 電子工業(yè)出版社 (2013-01出版) 作者:楊長(zhǎng)剛
Tag標(biāo)簽:無(wú)
前言
為了讓讀者可以對(duì)Android系統(tǒng)進(jìn)行“有血有肉”的感知,而不是停留在抽象的原理和概念之上,本書(shū)對(duì)Android的代碼進(jìn)行了分析,進(jìn)而“提煉”出Android的全貌。又因?yàn)锳ndroid有著海量代碼,故只分析了Android系統(tǒng)的一些主要模塊和類,不對(duì)各個(gè)細(xì)節(jié)進(jìn)行全面分析,這樣可以在有限的篇幅中讓讀者了解Android的內(nèi)部結(jié)構(gòu)和運(yùn)行機(jī)制,同時(shí)避免讓讀者陷入海量代碼的云霧中而不得要領(lǐng)。由于Android系統(tǒng)升級(jí)較快,有些代碼變動(dòng)很大。對(duì)設(shè)計(jì)上有重大改變的一些模塊,筆者也兼顧提及了Android的2.x版本和4.0版本中的設(shè)計(jì),甚至個(gè)別模塊在未來(lái)的版本中的可能的演進(jìn)方向。現(xiàn)將本書(shū)各章內(nèi)容介紹如下:第1章介紹了智能指針。在Android的native層的C++代碼中,存在著大量形如sp和wp模板的運(yùn)用,它們都是智能指針模板。通過(guò)本章,讀者將掌握native層的類的對(duì)象的生命周期。第2章介紹了Android中消息隊(duì)列和線程處理機(jī)制。這涉及native層的Looper和Java層的Looper、Handler及Message等,讓讀者更好地理解Android中的代碼執(zhí)行流程場(chǎng)景和所在的線程上下文。第3章詳細(xì)介紹了Android中最重要的一種機(jī)制Binder IPC及其應(yīng)用。在Android中,一個(gè)簡(jiǎn)單的功能或上層API的一個(gè)簡(jiǎn)單調(diào)用,往往需要跨越多個(gè)進(jìn)程。一個(gè)子系統(tǒng)的功能也往往由各個(gè)進(jìn)程中的模塊來(lái)完成,這就要用到Android的核心機(jī)制Binder IPC。Binder IPC不僅位于native代碼中,也大量存在于Java層的代碼中,因此以Java層的播放服務(wù)(IMediaPlaybackService)和電話狀態(tài)監(jiān)聽(tīng)器(PhoneStateListener)為例,詳細(xì)分析了多個(gè)進(jìn)程之間的相互調(diào)用,尤其是后一個(gè)例子,雙向跨越了多個(gè)進(jìn)程。另外,為了避免大內(nèi)存數(shù)據(jù)傳輸,借助于Binder IPC機(jī)制,Android實(shí)現(xiàn)了大內(nèi)存塊的跨進(jìn)程共享。第4章介紹了HAL硬件抽象層,讓讀者了解到Android的框架系統(tǒng)如何利用其下面的抽象硬件。第5章介紹了Android的啟動(dòng)過(guò)程。內(nèi)容涉及Android初始化語(yǔ)言,Linux系統(tǒng)的第一個(gè)進(jìn)程init的啟動(dòng)過(guò)程,以及init進(jìn)程如何解析用Android初始化語(yǔ)言編寫(xiě)的.rc腳本文件。最后簡(jiǎn)要介紹了Android系統(tǒng)中的服務(wù)所駐留的宿主進(jìn)程system_server的啟動(dòng)過(guò)程。第6章介紹了Android輸入系統(tǒng),讓讀者對(duì)輸入系統(tǒng)的執(zhí)行過(guò)程有一定的了解。第7章介紹了Android系統(tǒng)中的大容量存儲(chǔ)(MassStorage)系統(tǒng),讓讀者熟悉Android存儲(chǔ)設(shè)備的管理機(jī)制。第8章介紹了Android中的傳感器(Sensor)系統(tǒng),讓讀者對(duì)傳感器有所了解。第9章介紹了RIL,包括C語(yǔ)言實(shí)現(xiàn)的RIL和與其通信的RILJ(Java類RIL)。通過(guò)閱讀本章,讀者將了解Java層上傳消息和下送命令的機(jī)制,它是Java層的電話功能通道。第10章介紹了Android系統(tǒng)中的phone進(jìn)程。首先簡(jiǎn)單介紹了層次狀態(tài)機(jī),有助于讀者了解層次狀態(tài)機(jī)的工作機(jī)制,以便于分析使用層次狀態(tài)機(jī)的代碼,如PS域的數(shù)據(jù)連接、Wi-Fi和藍(lán)牙的連接狀態(tài)等。接著,對(duì)Android電話功能的實(shí)現(xiàn)進(jìn)行了介紹。第11章對(duì)Android中的Graphic系統(tǒng)進(jìn)行了分析,其中包括SurfaceFlinger中新引入的VSync機(jī)制。第12章介紹了Android中的OpenGL ES軟件層次棧,讓讀者了解OpenGL ES的層次調(diào)用關(guān)系,以及如何通過(guò)鉤子(hook)將庫(kù)中的API關(guān)聯(lián)起來(lái)。第13章介紹了Android的多媒體系統(tǒng),主要介紹了播放和錄制的過(guò)程。通過(guò)閱讀本章,讀者將了解Java的SDK API層如何調(diào)用native層的Service服務(wù),以及Service如何向應(yīng)用程序發(fā)送消息通知。最后,介紹了Android中的Camera。讓讀者了解硬件抽象層的Camera如何向Java層發(fā)送采樣數(shù)據(jù)。第14章介紹了Audio系統(tǒng)的播放和錄音過(guò)程,讓讀者了解Android中的應(yīng)用程序進(jìn)程和AudioFlinger之間的數(shù)據(jù)傳輸關(guān)系。最后,介紹了AudioFlinger的工作機(jī)理、音效和音頻策略服務(wù)。通過(guò)閱讀本章,讀者將熟悉Android中的音頻系統(tǒng)的工作過(guò)程。第15章介紹了Android的多媒體框架Stagefright,并提及Android版本演進(jìn)過(guò)程中的不同設(shè)計(jì)理念下的視頻幀的渲染輸出原理。通過(guò)閱讀本章,讀者將進(jìn)一步熟悉多媒體系統(tǒng)的處理過(guò)程。第16章介紹了OMXCodec。這將有助于讀者了解Stagefright如何使用OMXCodec進(jìn)行編解碼,以及OMXCodec如何使用平臺(tái)廠家實(shí)現(xiàn)的OMX插件。第17章介紹了Android的GPS系統(tǒng),讓讀者了解GPS部分的工作機(jī)制。第18章介紹了Android中的NFC實(shí)現(xiàn),讓讀者了解Android中的NFC的工作機(jī)制。第19章介紹了Android對(duì)USB外設(shè)的處理過(guò)程。第20章簡(jiǎn)要介紹了Android中的藍(lán)牙和Wi-Fi的系統(tǒng)架構(gòu)。第21章介紹了用于生成tombstone調(diào)試文件的Debuggerd守護(hù)進(jìn)程。通過(guò)閱讀本章,讀者將獲悉Android如何記錄C/C++代碼崩潰時(shí)的場(chǎng)景信息,以讓開(kāi)發(fā)者獲取足夠多的調(diào)試信息。為了表示對(duì)他人勞動(dòng)成果的尊重和方便讀者進(jìn)行延伸閱讀,本書(shū)在頁(yè)腳注釋中給出了筆者參閱的文章、文檔和書(shū)籍的網(wǎng)絡(luò)鏈接和說(shuō)明。對(duì)于側(cè)重點(diǎn)不同的文章或書(shū)籍,筆者也給讀者做了閱讀推薦。由于筆者時(shí)間、精力和能力所限,書(shū)中涉及的內(nèi)容定會(huì)存在錯(cuò)誤之處,還請(qǐng)相關(guān)專家及讀者批評(píng)批正,不勝感激。在閱讀本書(shū)前,讀者需要具備C、C++、Java等編程語(yǔ)言和Android的基礎(chǔ)知識(shí)。讀者最好對(duì)Linux系統(tǒng)、Linux命令行和Shell腳本等有基本了解。若讀者對(duì)設(shè)計(jì)模式、Linux系統(tǒng)編程(推薦伽瑪?shù)鹊摹对O(shè)計(jì)模式——可復(fù)用面向?qū)ο筌浖幕A(chǔ)》,史蒂文斯和拉戈的《UNIX環(huán)境高級(jí)編程》)有所了解,再擁有書(shū)中相關(guān)子系統(tǒng)的背景知識(shí),那么閱讀本書(shū)和理解Android系統(tǒng)將是件十分輕松的事。
內(nèi)容概要
《深入剖析Android系統(tǒng)》以Android Jelly Bean(4.1)的代碼為藍(lán)本,對(duì)Android的部分關(guān)鍵代碼進(jìn)行了注釋分析,并輔以大量插圖,講述了Android大部分子系統(tǒng)中的模塊和類的靜態(tài)結(jié)構(gòu),讓讀者對(duì)Android系統(tǒng)的內(nèi)部靜態(tài)結(jié)構(gòu)有著“類”粒度這一層級(jí)上的認(rèn)識(shí)和了解。同時(shí),也對(duì)關(guān)鍵類和函數(shù)的代碼調(diào)用流程、運(yùn)行時(shí)刻所位于的進(jìn)程和線程上下文等動(dòng)態(tài)運(yùn)行場(chǎng)景進(jìn)行了分析講述,讓讀者深刻理解Android系統(tǒng)內(nèi)部是如何運(yùn)行的?!渡钊肫饰鯝ndroid系統(tǒng)》直接對(duì)Source Insight進(jìn)行截圖,保留了代碼的原始行號(hào)、英文注釋等信息并進(jìn)行了高亮顯示,方便讀者閱讀;代碼中同時(shí)添加了作者所做的中文注釋說(shuō)明。
作者簡(jiǎn)介
楊長(zhǎng)剛,2005年春畢業(yè)于西南交通大學(xué)計(jì)算機(jī)應(yīng)用技術(shù)專業(yè),獲碩士學(xué)位;后進(jìn)入手機(jī)行業(yè)從事Linux手機(jī)軟件開(kāi)發(fā)工作。目前在一家歐美企業(yè)從事Android方面的技術(shù)工作。
書(shū)籍目錄
第1章智能指針 1.1智能指針概述 1.2引用計(jì)數(shù)基類RefBase 1.3輕量級(jí)引用計(jì)數(shù)LightRefBase 1.4強(qiáng)指針 1.4.1 強(qiáng)指針變量的初始化與生命周期 1.4.2賦值操作與引用計(jì)數(shù)變化 1.5弱指針 第2章消息隊(duì)列與線程處理 2.1 消息隊(duì)列處理模型的設(shè)計(jì) 2.2消息隊(duì)列與線程處理的Java實(shí)現(xiàn) 2.2.1 Thread/Runnable 2.2.2 Message 2.2.3 MessageQueue概述 2.2.4 Handler 2.2.5 Looper 2.2.6再論Handler 2.2.7對(duì)同步消息的支持 2.3 native層的Looper與消息隊(duì)列處理 2.3.1 Looper中的睡眠等待與喚醒機(jī)制 2.3.2 Looper對(duì)文件描述符的監(jiān)控與處理 2.3.3 Looper中的消息隊(duì)列處理機(jī)制 2.3.4 Looper與線程執(zhí)行上下文 第3章Binder IPC及其應(yīng)用 3.2.1 例子IMediaPlaybackService 3.2.2例子PhoneStateListener 3.3大內(nèi)存塊的跨進(jìn)程共享 3.3.1 概述 3.3.2調(diào)用接口 3.3.3設(shè)備空間的映射 3_3.4 Server側(cè)的處理 第4章HAL硬件抽象層 4.1 HAL概述 4.2硬件模塊庫(kù)的通用寫(xiě)法 4.3硬件模塊庫(kù)的裝載與解析 4.4例子Lights 4.5例子Camera 4.6例子Power和Vibrator 第5章Android的啟動(dòng)過(guò)程 5.1 Android初始化語(yǔ)言及解析 5.1.1 Action 5.1.2觸發(fā)器trigger 5.1.3命令Command 5.1.4服務(wù)Service 5.1.5.rc文件的解析 5.2 BootChart 5.3 ueventd守護(hù)進(jìn)程 5.4 init進(jìn)程的啟動(dòng)過(guò)程 5.5 init.rc文件中的服務(wù)進(jìn)程 5.6 system server進(jìn)程 5.6.1 app orocess程序 5.6.2 system_server進(jìn)程 第6章輸入系統(tǒng) 6.1輸入系統(tǒng)概述 6.2讀線程 6.2.1 EventHub 6.2.2 InputReader 6.2.3 InputDevice 6.2.4 InputMapper 6.2.5 QueuedlnputListener …… 第7章MassStorage 第8章Sensor 第9章RIL 第10章com.android.phone進(jìn)程 第11章Graphic 第12章OpenGLES軟件層次棧 第13章Multimedia 第14章Audio 第15章Stagefright 第16章OMXCodec 第17章GPS 第18章NFC 第19章USB 第20章Bluetooth和Wi-Fi簡(jiǎn)析 第21章Debuggerd 后記
章節(jié)摘錄
版權(quán)頁(yè): 插圖:
編輯推薦
《深入剖析Android系統(tǒng)》基于Google發(fā)布的Jelly Bean原始代碼,講述Android系統(tǒng)的內(nèi)部靜態(tài)結(jié)構(gòu)關(guān)系和內(nèi)部運(yùn)行機(jī)制,為你呈現(xiàn)原汁原味的Android代碼分析大餐!
名人推薦
面對(duì)Android的海量代碼,我們的工程師同事們剛開(kāi)始總不知如何下手。有了本書(shū),它將引導(dǎo)大家進(jìn)入Android的內(nèi)部代碼世界?!\(chéng)邁科技(南京)有限公司 設(shè)備軟件事業(yè)部經(jīng)理 儲(chǔ)劉火本書(shū)匯聚作者多年的Android研發(fā)經(jīng)驗(yàn), 在作者的引導(dǎo)下, 您會(huì)逐漸理清Android的內(nèi)部運(yùn)行方式,作者在關(guān)鍵部分的注解,為您閱讀源代碼掃清障礙?!?lián)發(fā)博動(dòng)(北京)有限公司 高級(jí)工程師 潘鵬在Android與iOS分庭抗禮的移動(dòng)互聯(lián)時(shí)代,開(kāi)放的Android幾乎成為一種公眾語(yǔ)言,掌握它可以使我們與Google、與廠商平等對(duì)話,發(fā)出自己的聲音,讓我們?cè)诨ヂ?lián)終端設(shè)備領(lǐng)域馳騁無(wú)羈?!狽vidia 客戶經(jīng)理 申力茜這是一本讓你能貫穿Android手機(jī)系統(tǒng)的書(shū),它涵蓋了從中間框架到上層應(yīng)用的大部分內(nèi)容,是一本完全適合參與Android開(kāi)發(fā)的軟件工程師參考閱讀的書(shū)。作者以他在Android系統(tǒng)上堅(jiān)實(shí)的背景知識(shí)和工作經(jīng)驗(yàn),為我們講述了一個(gè)復(fù)雜系統(tǒng)的運(yùn)行過(guò)程,引領(lǐng)我們快速進(jìn)入Android的內(nèi)部世界。——Broadcom 高級(jí)應(yīng)用工程師 王文龍我是一個(gè)Android應(yīng)用開(kāi)發(fā)者,瘋狂地?zé)釔?ài)Android底層,我希望更深地了解Android SDK API背后的東西,以便我能更透徹地理解Android的官方文檔,我還希望利用Android中某些最新特性去開(kāi)發(fā)更酷功能更強(qiáng)的程序。這本書(shū)將給我很大的幫助?!?8同城 Android高級(jí)開(kāi)發(fā)工程師 章發(fā)明從事Android相關(guān)工作多年,讀這本書(shū)仍然對(duì)我有許多啟迪,尤其是其內(nèi)部結(jié)構(gòu)和運(yùn)行機(jī)制,我十分高興能讀到這本書(shū)!——聯(lián)想公司 高級(jí)系統(tǒng)工程師 朱慶友
圖書(shū)封面
圖書(shū)標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載
250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版