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