書名: Android核心原理與系統級應用高效開發作者名: 韓超等本章字數: 3862字更新時間: 2018-12-30 05:22:09
技術經驗共享
經過數年的發展,Android 系統取得了巨大的進展。一方面,Android 設備層出不窮,逐代更新;另一方面,Android第三方應用也成為不同領域開發者的開發重點。從軟件系統的角度考慮,Android系統已經逐漸趨于成熟和穩定。Android 2.3.x版本的開源軟件廣泛應用于手機、電視等各種設備;Android 4.x作為開源的新版本,整合了手機和平板電腦兩方面的功能。
由于軟件系統的架構已經成熟,Android 開源版本的升級已經不再對框架層做出較大的更改,而是橫向增加外圍的功能。從軟件工程師的角度,深入 Android 系統開發已經到了比較適當的階段。
但是,目前從事 Android 各個方面開發的工程師大都很難達到深入了解系統級別的目的,在開發乃至學習中存在著較大的盲區和誤區。
Android開發者主要的問題集中在以下幾個方面。
(1)領域的交疊造成混亂。由于 Android 的開發者來自不同領域,很可能不了解其他方面的技術背景。龐大的 Android 軟件系統也涉及 Linux 開發、Java 開發,以及 Android系統本身各個方面的技術,因此只熟悉一個方面的技術很難深入Android系統的開發。
(2)開發者低估Android系統的復雜性。Android系統的結構、功能已經和桌面電腦相當,在某些方面甚至需要考慮更多內容。在 Android 系統實現一個模塊要涉及軟件系統的各個層次,很多時候已經超出了開發者的認知范疇。
(3)Android 應用開發者的局限。很多 Android 應用程序的開發者僅僅使用 Windows中的SDK開發環境。在實際操作中,此種環境并不足以開發Android應用程序,甚至只開發第三方應用程序也不能只使用此環境。這是由Android系統的內部結構決定的。
(4)系統級的軟件結構設計不成熟。Android設備的開發者為了實現某種功能、某個模塊,有時會使用權宜(Workaround)的方式。雖然暫時解決了問題,但是效率較低,事倍功半,還可能存在兼容性問題和安全漏洞。
(5)錯誤的理念,互相誤導。Android開發門檻較低,實際的難度卻較深。由于目前網絡交流比較方便,很多偏頗或者膚淺的開發經驗得以傳播。
在理想的狀態下,Android的高級開發者應該具有Linux開發經驗、熟悉C/C++和Java語言、具有GUI系統的經驗,具有大型軟件設計經驗。這不意味著開發者必須達到這個程度才能開發Android,但是開發者的確應當首先知道自己能做什么,不能做什么。不可一味拔高,做完全超出自己知識和技術能力外的開發工作。
關于本書的內容
本書的編寫團隊主要由各種崗位的開發人員組成,開發過程中的寶貴經驗是本書主要的內容來源。本書力求為廣大開發者提供一些寶貴的經驗,讓工程師的靈感得以傳播,讓各個不同領域的開發者都能夠以正確、高效的方式進行學習和開發。Android是一個實際的系統,能夠作為傳播的內容應該來自實際開發過程中歸納的經驗,而不應來自對代碼的閱讀,更不應來自道聽途說。這也是本書的核心理念。
本書主要由兩篇組成,分別側重于 Android 開發的不同方面。本書中 Android 系統的技術關系如下圖所示。

第1篇稱之為“Android核心框架層開發”。第1章介紹框架的基礎,第2章介紹編譯系統,第3章至第5章介紹本地框架層,第6章是Java運行環境,第7章至第9章介紹Java框架層內容,第10章介紹GUI系統和應用程序管理。本篇自下而上介紹Android核心的框架層次結構,并將開發的技巧和要點蘊含于其中。
第2篇稱之為“Android 系統級應用開發要點”,偏重系統級的應用層,關注 Android開發過程中的重點方面。用5章篇幅關注了系統的兼容性、安全性、預置應用層、定制、調試和測試幾個方面。
本書組織結構和特點
本書介紹 Android 系統中的通用內容,不依賴特定的硬件,使用仿真器的環境基本可以學習大部分的內容。
Android中具有多個子系統和模塊,其中某些部分的實現非常復雜。對于這些部件,本書主要給出它們的結構框圖和代碼路徑。至于它們內部的實現,不作為本書的重點。為了體現實用性,本書的重點是對于開發有所幫助的部分。
第1篇內容,重點在于Android軟件系統的中間兩個層次。Android是一個基于Linux的系統,其自下而上的軟件結構是本書第1篇的主線。本書采用了自本地層到Java層,最后介紹GUI系統的方式,完整展現Android框架層的結構。
在主線之外,本書第1篇還有三條次線:第一條是Android系統較為特殊的通信機制,包括屬性、套接字和 Binder;第二條是系統的運行流程;第三條是各個部分調試方法。除此之外,開發技巧和要點則位于每一章當中。本書第1篇盡量將分散的知識和經驗總結成一個串行的結構,可以保證自前而后的順序。當然也有部分前面的內容需要后面知識的情況,讀者可以對照閱讀。
第2篇內容,重點在于Android系統最上面的一個層次,本部分內容的復雜度不是很高。本篇在組織上的一個要點是應用程序包和框架層之間的關系。5 個章節相互獨立,也有所聯系。安全機制、NDK特殊程序結構、可定制部分、調試和測試手段等開發的實用方面位于各章當中。
在 Android 系統的相關開發中,有兩種不同方式:一種是快速的、表面化的開發,不追究系統原理,靠形式上的仿做來實現功能;另一種是在深厚的技術底蘊中,精研Android系統,以清晰思路進行最優化的開發。在本書作者看來,兩種方式并無優劣之分,為了實現開發成果,各種開發方式都可使用。本書的內容,既有對 Android 系統的精研,也有對快速開發的支持。
對于兩種方式的區別,本書關注幾個要點:第一,開發者可以在不深入研究系統的情況下,進行快速的表面開發,但要注意不能陷入開發的誤區,本書的編譯板級支持、NDK開發、預置應用、系統定制等幾個部分是這種類型;第二,有些核心模塊開發,必須在深入研究系統的情況下才能完成,不能以表層開發的方式開發核心模塊,本書的本地框架、Java框架、Java本地調用幾部分是這種類型;第三,精研系統的目的一般也是為了開發,應該避免“一葉障目,不見森林”,對片面和局部進行極端的深入研究往往效率低、難度大,因此本書核心部分的研究通常先給出整體框圖和各個部分的代碼路徑。
由于 Android 系統開源已經升級了若干個版本,以后還將進行升級。在開發過程中的經驗有些只適用某些版本,而不能適應所有版本。這也為 Android 系統的開發過程造成了一些困難。為了達到普遍的適應性,本書在編寫上考慮了版本升級的問題。首先,本書對照了從 Android 的歷史版本和最新發布之前,大多數的內容在各個版本的 Android 系統中都具有,并且基本相同的,穩定的部分顯然也是精華的內容;其次,對于Android 2.3.x之前版本不同的內容,本書會標注點明;最后,Android 4.x對核心框架改動的內容并不多,本書單獨構建一章予以介紹。
本書秉承實用理念,措辭精練,每一章、每一小節都為讀者提供知識和技術的要點。目的是在有限的篇幅內,為讀者展示更多的內容。本書在排版上吸收了各方面的經驗,采取了相當緊湊的方式。書中列出的結構圖以清晰的方式表示了各部分的結構,列出的代碼選取了最精華的片斷,并且增加了作者的注釋。
本書讀者
本書適合于一切在做或者準備做 Android 開發的技術人員。本書的內容涉及 Android系統的內部核心實現。本書作者沒有能力幫助讀者快速獲得十年的開發經驗,但是可以為讀者指明開發的方向,并加強讀者對技術的認識,更上一層樓。
Linux用戶空間中的C語言開發和Java語言開發是本書的技術基礎,也是Android系統技術最重要的兩個基礎。建議每個領域的讀者都應增強這兩個方面的知識。
Android系統級的開發需要Linux主機環境,通過閱讀本書學習Android系統的開發,最好具有此環境。在Windows中使用Source Insight等工具閱讀Android源代碼,并運行SDK中的仿真器是一種退而求其次的方式,這種方式也可以學習到很多知識。作者依然強烈建議讀者閱讀本書的時候可以對照 Android 源代碼,并可以在 Linux 環境通過編譯全部源代碼生成仿真器。
不同的知識結構、從事不同領域的讀者在閱讀本書的過程中,重點可能不同。
如果讀者希望全面了解Android系統,自前而后地閱讀本書是非常適合的。通過對第1篇的系統框架結構和啟動流程的學習,讀者會更深入地理解 Android 系統是什么,由什么組成,涉及了哪些方面。第2篇作為第1篇的補充,也可以為讀者提供大量較為實用的知識和技巧。
如果讀者從事Android設備的全面開發,則通常需要具有Linux和Java較全面的知識,閱讀要點如下所示:
● 第1篇的框架和系統結構部分是重點;
● 第1篇的編譯系統部分幫助讀者理解對系統的全局性配置;
● 第1篇通信部分和結構設計對于在系統中增加模塊有所幫助;
● 第1篇的調試部分可以輔助讀者的開發過程;
● 第2篇的系統定制有助于幫助讀者理解系統的一些細節;
● 第2篇的兼容性和安全系統幫助讀者了解和解決系統中深層次的問題。
如果讀者從事 Android 設備硬件移植方面的開發,通常要對 Linux 語言的開發有較深的了解,閱讀要點如下所示:
● 第1篇通信部分和具體硬件相關子系統結構相結合,了解一個硬件如何適配于Android系統;
● 第1篇的啟動流程部分為讀者提供了硬件優化方面的知識;
● 第1篇的GUI系統提供將Android系統適配于非手機設備的相關知識;
● 第2篇安全系統方面幫助讀者了解新增硬件的安全管理。
如果讀者從事Android應用程序的開發,則通常要對Java語言的開發有一定的理解,閱讀要點如下所示:
● 第1篇Java框架部分幫助讀者了解Android系統中的隱藏內容;
● 第2篇第10章幫助讀者了解SDK開發的局限性,第三方應用和預置應用的區別;
● 第1篇Java層調試部分,第2篇測試和調試部分有助于讀者深入調試應用;
● 第2篇預置應用部分幫助讀者了解Android中預置應用程序層的結構;
● 第1篇的JNI部分和第2篇的NDK部分會對讀者在應用程序中使用本地內容有所幫助。
本書作者
本書的編寫工作由國內 Linux 和 Android 領域資深的技術人員韓超領銜。本書也是韓超付出心血最多,編寫時間最長,親自執筆比例最大的一本書。參與本書編寫的還有來自Android開發領域的梁泉、崔海斌、馬若劼、于仕林等,機鋒網(www.gfan.com)的張宇、張超、趙家維、黃亮、沈楨、徐威特等,國軟時代(www.gredu.org.cn)的孫麗娜,以及楊鈺、曹道剛等。廣大社區開發者也對本書的成稿做出了貢獻。
本書的核心作者團隊大都來自開發一線,在工作之余完成本書。為了使本書盡早和讀者見面,編寫過程略顯倉促。雖然經過審校,可能依然存在一些錯誤,敬請讀者諒解。