Android Framework - 學習啓動篇

首先明確一下前提條件:

  1. 有 C/C++ 基礎,能夠閱讀 C/C++ 的代碼;
  2. 有 Linux 系統內核基礎;
  3. 有 Android 開發相關的工作經驗(1-3年);
  4. 有 UML 建模基礎。

如果大家是從事 Android 系統開發的,那麼閱讀系統源碼是必修課程。如果想成爲高級 App 開發工程師,那麼閱讀系統源碼也是必修課程,只是這必修課程裏面有選修內容,後面我想講的就是必修課程裏面的選修內容。如果你是剛剛入門,建議先打好基礎,千萬不要一上看來就看源碼,如果大家沒有 C/C++ 和 Linux 內核基礎,需要看看我之前的文章,記住一定要循序漸進。

這裏我們還是反覆強調一下閱讀源碼的重要性,僅僅代表個人的一些觀點和看法。我們在開發過程中遇到的 100% 問題都能通過源碼分析解決,在 Buggly 上遇到的 100% 問題也能通過源碼分析解決,能夠幫我們徹底的做好性能優化,我們能從源碼裏面學到很多的設計思想和設計理念,能夠做一些常人看似無法實現的功能,總之源碼是我目前爲止見過的最好的教學資料。

在真正開始學習 Android FrameWorker 前,我們先來了解一下 Android 的前世今生以及幾個關鍵性的人物,希望能給我們一些啓發。80年代有“大哥大”,90年代有諾基亞,到後來的 iOS 和 Android,今天回過頭去看大概是 30 年左右差不多是人的半輩子。Android 系統一開始並不是直接由 Google 研發出來的,它的前生是 AndyRubin 創建的公司 Android 研發的,這個操作系統也因此和 Android 公司同名。Google 在2005年以4000萬美元收購了剛建立22個月的高科技企業 Android,Android 的負責人兼 CEO AndyRubin 也隨之成爲 Google 的工程部副總裁,並繼續進行 Android 項目的開發。2008年9月22號,第一款搭載 Android 操作系統的手機誕生,它就是 HTC Dream(T-Mobile G1),並於次日正式發佈了 Android 1.0。2009年發佈 Android 1.1,在 Google 內部被稱爲 “Petit four”,這是一種法式的甜點,後來以 Android 1.5 Cupcake ”(紙杯蛋糕)開始的版本都以甜點的方式命名版本,寓意是 Android 是美味、人見人愛的操作系統。另外 Google 設計師 Irina Blok 還設計了一個綠色的小機器人,作爲 Android 的卡通形象,我來一張圖大家感受一下:

圖片來源於網絡

Andy Rubin:Android 之父也就是 Android 的創始人,1989年進入蘋果工作,1997年去了微軟,谷歌於 2005 年收購了 Android ,在中國這就相當於 BAT 都幹過。
Dianne Hackborn:原來 Android framework 的大部分都是她寫的,我們沒有看錯是個女漢子,Android 中最核心的驅動 Binder 就是她寫的,關於 Binder 驅動其實也有它的前世今生,這裏我就不用文字敘述了。

接下來進入正題,爲了能讓大家整體上大致瞭解 Android 系統涉及的知識層面,我從官方找來了一張詳細的架構圖,從我們最熟悉開始往下看依次分爲 App 應用層、Java 框架層、Android 運行時環境、系統 Native 庫、HAL 和 Linux 內核這5層架構。

圖片來源 google developer

從上面這張圖來看,想要全面學習 Android 系統,似乎並不簡單而且有些難度,但我們作爲應用開發者來講,如果只是瞭解一些選修內容還是沒那麼難,雖然 Android 系統非常龐大且錯綜複雜,但整體架構設計還是很清晰的。後面我們大概從以下幾個方面入手:

  1. 閱讀 Java 和 C/C++ 層的代碼;(選修內容)
  2. 學習 Frameworke 的設計思想;
  3. 帶着疑問去分析一些開發中常見的問題;
  4. 動手實戰一些開發中常用的 SDK。

最後再囉嗦一下,大家需要下載一份 6.0 的系統源碼,我在看源碼的同時,大家跟着我一起打開源碼文件,因爲我貼出來的代碼是經過篩選的,如果大家只是走馬觀花那沒有任何意義,我們學不到什麼東西。還需準備一個翻牆軟件,當我們需要開發一些高級功能時,我們需要去閱讀各個版本之間的差異,比如我們後面要動手實戰一些開發中常用的 SDK,舉個例子動態修復線上 so 庫文件,那這時候我們就需要閱讀 5.0 、6.0、7.0、8.0 的源碼了,如果都下載下來那大家電腦裝不下,那時我們就只能在線上看了。整個過程肯定會有一些痛苦,因爲我就是這麼過來的,但只要能熬過去便能更上一層樓。

01. Android Framework - 學習啓動篇
02. Android Framework - 開機啓動 Init 進程
03. Android Framework - 開機啓動 Zygote 進程
04. Android Framework - 開機啓動 SystemServer 進程
05. Android Binder 驅動 - Media 服務的添加過程
06. Android Binder 驅動 - 啓動 ServiceManager 進程
07. Android Binder 驅動 - 內核驅動層源碼分析
08. Android Binder 驅動 - 從驅動層來分析服務的添加過程
09. Android Binder 驅動 - 從 Java 層來跟蹤服務的查找過程
10. Android Binder 驅動 - 徹底理解驅動層的通信流程
11. Android 系統服務 - AMS 的啓動過程
12. Android 系統服務 - PMS 的啓動過程
11. Android 系統應用 - 普通應用的安裝過程
14. Android 系統應用 - Launcher 的啓動過程
15. Android 四大組件 - 進程的 fork 創建過程
16. Android 四大組件 - startActivity 的啓動過程
17. Android 四大組件 - startService 與 bindService
18. Android 四大組件 - bindService 的通信過程
19. Android 四大組件 - 廣播接收者處理流程
20. Android 四大組件 - ContentProvider 的通信原理

後面每分析一個小點,我都會把鏈接補齊,未完待續~

推薦學習資料:

1. 老羅的 Android 之旅
2. Gityuan博客 | 袁輝輝的技術博客
3. android 官網(科學上網)

推薦視頻資料:
https://pan.baidu.com/s/1KUEHkH5CMvrRe1rH0vzT2A

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章