Android内核剖析
| -- |
Android內(nèi)核剖析?
柯元旦?編著
ISBN 978-7-121-14398-4 ?
2011年9月出版
定價:79.90元
16開
616頁
內(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)理。
前 言
“內(nèi)核剖析”乍一聽起來挺嚇唬人的,但這個詞語存在兩個問題,第一個是什么才能稱為內(nèi)核?另一個是“誰”才有能力或者有機(jī)會寫一本“內(nèi)核剖析”的書?
本書之所以在前言中提出這個問題,就是為了不嚇唬大家,并給大家一種信心,相信自己有能力理解本書的內(nèi)容。
首先來回答第一個問題,什么才能稱為內(nèi)核?大家都知道,Linux內(nèi)核的本質(zhì)包含了線程調(diào)度、內(nèi)存管理及輸入/輸出管理,那么請問Windows操作系統(tǒng)的內(nèi)核是什么呢?我們常說,蘋果的操作系統(tǒng)Mac OS X的內(nèi)核是基于UNIX的,那么可以說Mac OS的內(nèi)核是UNIX嗎?
如果僅從線程調(diào)度、內(nèi)存管理,以及輸入/輸出的角度來區(qū)分Windows和Mac OS系統(tǒng)的話,能很明顯地感覺到缺少點什么,那就是圖形用戶接口(GUI),Android、Windows、Mac OS三者的操作方式完全不同,因此,對于圖形操作系統(tǒng)而言,本人傾向于將GUI也劃歸到內(nèi)核的范疇,這也就是為什么本書使用“內(nèi)核”作為標(biāo)題的原因。本書所謂的“內(nèi)核剖析”的核心也正在于Android所設(shè)計的GUI框架的內(nèi)部原理。Android操作系統(tǒng)是基于Linux實現(xiàn)的,本書并不是去剖析Linux。
下面再來回答第二個問題,即“誰”才有能力或者有機(jī)會寫一本“內(nèi)核剖析”的書?如果有人告訴你,一個非微軟公司的技術(shù)人員寫了一本Windows操作系統(tǒng)內(nèi)核剖析的書,你信嗎?反正我不信,原因是,沒有閱讀過Windows內(nèi)核源碼的人是不可能寫出這樣的書的,幸運(yùn)的是Android的源碼是開放的。可是源碼開放就一定能寫這樣一本書嗎?
在本書截稿時,我未曾見過一本真正分析Android內(nèi)核的書,大多數(shù)書籍都是關(guān)于Android SDK應(yīng)用開發(fā)的。在過去的工作經(jīng)歷中,常常遇到一些同事,由于對Android內(nèi)核不了解,導(dǎo)致在應(yīng)用程序開發(fā)時遇到一些無法解決的問題。遺憾的是,IT類優(yōu)秀書籍本來就很少,中文原創(chuàng)的更少,Android領(lǐng)域的幾乎沒有,本人之前也寫過一本《Android程序設(shè)計》,坦白地講,當(dāng)我對Android內(nèi)核徹底剖析后,覺得那本書有“誤人子弟”的成分。因此,我才決定要將自己對Android的理解分享給更多的讀者。
那么,我有可能寫出一本真正的“內(nèi)核剖析”的書嗎?
我2003年畢業(yè)于西安電子科技大學(xué)通信工程學(xué)院,畢業(yè)后與兩名同學(xué)一起創(chuàng)業(yè),當(dāng)時我們的目標(biāo)是做一個“心情播放器”,其本質(zhì)是一個彩屏多媒體掌上設(shè)備,當(dāng)初想把它做成一個能夠根據(jù)人的心情自動播放音樂的設(shè)備,不談產(chǎn)品,僅從技術(shù)的角度來講,我們基于美國德州儀器(TI)公司的一款DSP處理器完成了“心情播放器”的設(shè)計,包括軟件和硬件,該軟件系統(tǒng)包括支持最多16個線程的多線程管理、內(nèi)存管理、FAT16文件系統(tǒng)、GUI子系統(tǒng),以及一套標(biāo)準(zhǔn)應(yīng)用程序開發(fā)框架、桌面程序等,在這里要再次感謝同宿舍的陳靜軍同學(xué),他是我到目前為止見過的寫代碼最優(yōu)秀的人,在這個項目中,靜軍設(shè)計了這個操作系統(tǒng)的內(nèi)核及GUI子系統(tǒng),而我設(shè)計了硬件主板、驅(qū)動、系統(tǒng)開發(fā)框架等,說到這里,如果靜軍來寫一本內(nèi)核剖析的書,肯定會比我寫得更好,在當(dāng)初設(shè)計操作系統(tǒng)前,由于靜軍還沒有加入到我們團(tuán)隊,我才花時間研究了嵌入式操作系統(tǒng),并設(shè)計了一些簡單的接口,而當(dāng)靜軍加入后,這些工作就由他完成了,因此,從嚴(yán)格意義上講,我并沒有實際編寫過操作系統(tǒng)內(nèi)核代碼,只不過從硬件、驅(qū)動、系統(tǒng)等不同層面設(shè)計了一個系統(tǒng)框架而已。
在這個項目中,一切只是從一顆處理器入手,沒有基于任何代碼,所有底層代碼都是我們編寫的,包括匯編和C語言程序設(shè)計,因此,在這個過程中,我徹底了解了C語言如何被編譯成匯編代碼,以及特定處理器如何影響上層的C程序。
當(dāng)然,這個故事是以失敗而告終的,后來我繼續(xù)從事嵌入式產(chǎn)品設(shè)計,包括使用TI高性能DSP處理器、x86處理器,ARM處理器等,不過,僅過了兩年時間,又去從事互聯(lián)網(wǎng)產(chǎn)品的設(shè)計,并開始使用Java、C++、PHP、JavaScript、Erlang等不同語言進(jìn)行軟件開發(fā),在使用各種語言時,我常常思考這些語言與底層系統(tǒng)的關(guān)系,并從編譯原理的角度來理解每一種語言,從而能夠理解不同語言的運(yùn)行環(huán)境和操作系統(tǒng)的關(guān)系。
直到Android的誕生,我當(dāng)時對Android的描述是,這是一個把嵌入式系統(tǒng)和互聯(lián)網(wǎng)應(yīng)用集合在一起的一個技術(shù)。幸運(yùn)的是這些我都還算熟悉,因此就開始了Android的開發(fā),最開始的時候僅僅是應(yīng)用程序的開發(fā),雖然也常常考慮Android底層的問題,但由于沒有源碼,所以也就沒有仔細(xì)研究,后來發(fā)現(xiàn),這也是一件好事,因為如果不熟悉上層的開發(fā)接口,則很難理解內(nèi)核的一些概念。
后來,應(yīng)用層積累得差不多了,源碼也開放了,于是我就迫不及待地開始了內(nèi)核之旅,所有的分析都是基于源碼的閱讀和測試,中間的過程的確是辛苦的,包括在Ubuntu及Mac OS上建立編譯環(huán)境、思考Android中的異步調(diào)度架構(gòu)、平衡工作和學(xué)習(xí)的時間等,早上坐地鐵也常常看Google groups中關(guān)于Android的各種問答。不過,每當(dāng)你明白一個大的架構(gòu)的關(guān)鍵之處時,也是一件很開心的事情。
談及以上履歷的目的在于啟發(fā)正在讀大學(xué)的朋友,一名電子工程師一定要理論、硬件、軟件及夢想同時具備,不要把自己區(qū)分為“硬件工程師”、“軟件工程師”,我們可以稱自己為電子工程師或者“夢想家”。另外,學(xué)習(xí)一定要循序漸進(jìn),如果你還不了解微機(jī)原理,那么就不要學(xué)習(xí)C語言,如果你還不了解數(shù)字電路,那么就不要學(xué)習(xí)微機(jī)原理,上層的軟件開發(fā)需要對底層基礎(chǔ)知識的理解,只有這樣才能成為一名創(chuàng)造者,并設(shè)計出卓越的產(chǎn)品。
多么希望我們中國的大學(xué)生在不久的將來也能創(chuàng)造出像Google、Microsoft、Facebook這樣著名的企業(yè)。
內(nèi)容介紹
本書內(nèi)容分為五大部分,分別如下:
第1部分,基礎(chǔ)篇。因為Android內(nèi)核研究必須基于Unix-Like的主機(jī)系統(tǒng)上,常見的有Ubuntu和Mac OS X,因此,該部分介紹Linux的一些基礎(chǔ)知識,以及在Linux上管理源碼的工具git。
第2部分,內(nèi)核篇。Android內(nèi)核的核心就是一套GUI系統(tǒng)。該部分主要包含視圖的內(nèi)部工作機(jī)制及視圖管理器(Window Manager Service)和Activity管理器(Activity Manager Service)的內(nèi)部工作機(jī)制。
第3部分,系統(tǒng)篇。內(nèi)核不等于操作系統(tǒng),Android是一個操作系統(tǒng),因此,除了內(nèi)核之外,還必須定義一套系統(tǒng)架構(gòu),比如應(yīng)用程序的格式定義,以及應(yīng)用程序如何被安裝和卸載、輸入法框架等,有時候這部分內(nèi)容也叫做外殼(Shell)。
第4部分,編譯篇。Android相關(guān)的源碼據(jù)說超過1000萬行,這套源碼由眾多的子項目組成,因此,聯(lián)合編譯這些子項目就是一個復(fù)雜的問題。Android源碼中定義了一套編譯框架,該框架可以方便地編譯不同類型的子項目,比如一個動態(tài)鏈接庫項目、Jar包項目等。了解該套編譯架構(gòu)后,就可以自由地在源碼中添加需要的子項目,并控制系統(tǒng)中已有子項目的編譯過程。
第5部分,硬件驅(qū)動篇。Android目前最成功的產(chǎn)品當(dāng)然就是智能手機(jī),但同時由于Android開源的特點,也就可以應(yīng)用于其他一些特定的產(chǎn)品,比如玩具、學(xué)習(xí)機(jī)、稅控機(jī)、門禁系統(tǒng)等,因此,該部分介紹了一款硬件開源的Android開發(fā)板卡。本來,該部分內(nèi)容還包括OpenGL框架、多媒體框架及Android硬件抽象層(HAL)三方面內(nèi)容,但由于出版時間原因,暫未包含,本書下一版將包含這些內(nèi)容。
讀者對象
本書適合于五類讀者。
第一類,開發(fā)過Android應(yīng)用程序的工程師。如果你剛開始接觸Android,那么這本書可能會很難理解,建議去Android官方網(wǎng)站用兩周的時間學(xué)習(xí)基本的Android應(yīng)用程序開發(fā),或者去看本人早期創(chuàng)作的《Android程序設(shè)計》一書,但要帶著懷疑的態(tài)度去讀。
第二類,Android技術(shù)相關(guān)的產(chǎn)品經(jīng)理。對于產(chǎn)品經(jīng)理而言,了解項目的技術(shù)難度及技術(shù)可行性,將有助于制定產(chǎn)品開發(fā)時間表。雖然產(chǎn)品經(jīng)理不需要詳細(xì)了解技術(shù)如何實現(xiàn),但起碼應(yīng)該知道產(chǎn)品技術(shù)的復(fù)雜度。
第三類,有扎實的開發(fā)經(jīng)驗,卻未曾接觸過Android的開發(fā)人員。系統(tǒng)框架的表面盡管各有千秋,但其內(nèi)涵卻不會差別太大,對于有扎實開發(fā)經(jīng)驗的朋友而言,只需要重新了解一下Android中的新概念,就能快速地將這些新概念與已有的知識融合起來,這樣,便可以節(jié)省大量的時間。
第四類,正在基于iOS開發(fā)的工程師。本人最近正在研究iOS的開發(fā),令人驚訝的是iOS和Android開發(fā)框架是如此相似。Object-C語言和Java語言的語法雖然差別較大,但其思想?yún)s很相似,包括單繼承、動態(tài)性、內(nèi)存回收機(jī)制等。iOS和Android的Framework也驚人相似,比如都使用sqlite進(jìn)行數(shù)據(jù)存儲,也使用Preference進(jìn)行參數(shù)存儲;視圖系統(tǒng)的API接口也類似的地方,都可以使用OpengGL進(jìn)行界面繪制。當(dāng)然,iOS和Android視圖系統(tǒng)還是有一定的差別,比如iOS中每一個View對象都有兩個Layer,從而可以方便地使用OpenGL繪制任何一個View對象,而Android卻只有一個,所以Android的動畫效果沒有iOS那樣靈活。遺憾的是iOS不是開源的,因此,我們沒有機(jī)會去了解iOS內(nèi)部的詳細(xì)機(jī)制,不過既然iOS和Android有這么多相似的地方,那么就可以通過了解Android的內(nèi)核機(jī)制去思考iOS的一些特性。
第五類,想要編寫一個GUI子系統(tǒng)的學(xué)生。Android雖然更多地用于手機(jī)產(chǎn)品,但其內(nèi)部的GUI子系統(tǒng)的實現(xiàn)卻是一種通用的思路,因此,可以完全拋開Android的系統(tǒng)特性,而僅僅去研究其GUI子系統(tǒng)的實現(xiàn)思路,有了這種思路就可以使用各種語言設(shè)計自己想要的GUI子系統(tǒng)。
歡迎朋友們與我進(jìn)行進(jìn)一步的交流,我的E-mail是yuandanke@gmail.com。
?
作? 者
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/broadview/archive/2011/09/23/2186439.html
總結(jié)
以上是生活随笔為你收集整理的Android内核剖析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一款货真价实的三防手机 用起来到底有多离
- 下一篇: Android游戏开发系统控件-Chec