嗨,BeesAndroid開源技術小組正式成立啦,Bees,即蜜蜂,取義分享、合作與奉獻的意思,這也是BeesAndroid小組的宗旨,我們第一個團體專案BeesAndroid也於2018年3月6日同步上線,該專案的前
身是android-open-source-project-analysis,這個專案提供了一系列的Android系統原始碼分析文章,收到了良好的反饋。
但是一個人的力量是有限的,因此將其推成團體專案BeesAndroid,專案採用GPL協議,在保護作者智慧財產權的基礎上,最大化的做到開源與開放,如果有什麼問題和意見歡迎提交issue,也歡迎大家參與
到本專案中來。
BeesAndroid專案旨在通過提供一系列的工具與方法,降低閱讀系統原始碼的門檻,幫助更多的Android工程師理解Andriod系統,掌握Android系統。
我們會在GitBook上同步repo,後續會匯出pdf、mobi等格式的文件供大家閱讀。另外關於專案的基礎框架已經建好,大家可以先預覽一下,針對文章目錄、Issue規範、PR規範、文件規範等問題可以直接提交issue來討論。尤其是在文章目錄方面,原來的專案內容是偏Java層的,後續我們希望更多的向底層進行擴充套件,大家也可以考慮一下自己希望新增哪些內容進去。當前的文章目錄只是初稿,後續會根據大家的需求增加相應的內容。
歷史文章在do目錄下,這些文章都會重新修改、校對才會再次釋出出來。如果大家想提前閱讀這些內容,可以去android-open-source-project-analysis專案。
本專案使用的原始碼版本雖然是android-7.1.1_r28,但是文章的內容並不會針對某個特定的版本,文章著重分析原始碼設計思想,也不會在文章中大篇幅的貼原始碼,統一原始碼版本只是為了方便協作。
android-open-source-project-analysis專案從釋出以後,收到了良好的讀者反饋,但是一個人的精力是有限的,我們希望BeesAndroid這個團體專案的文章質量再上升一個層次。
程式碼版本
- 細分版本:N6F26U
- 分支:android-7.1.1_r28
- 版本:Nougat
- 支援裝置:Nexus 6
分析思路
Android是一個龐大的系統,Android Framework只是對系統的一個封裝,裡面還牽扯到JNI、C++、Java虛擬機器、Linux系統核心、指令集等。面對如此龐大的系統,我們得有一定的
章法去閱讀原始碼,否則就會只見樹木不見森林,陷入卷帙浩繁的細節與瑣碎之中。
- 不要去記錄那些API呼叫鏈,繪製一個序列圖理清思路即可,Android Framework中有很多複雜的API呼叫鏈,你去關注這些東西,用處不大。你需要學會的是跟蹤呼叫鏈和梳理流程的
技巧,思考一下作者是怎麼找到關鍵入口的,核心的實現在什麼地方。 - 要善於思考,要多問為什麼,面對一個模組,你要去思考這個模組解決了什麼問題,這個問題的本質是什麼,為什麼這麼解決,如果讓我來寫,我會怎麼設計。事實上不管是是計算機還是
手機,從CPU、到記憶體、到作業系統、到應用層,看似紛繁複雜,但問題的本質無非就是這麼幾種:時間片怎麼分配?執行緒/程式怎麼排程?通訊的機制是什麼?只是在不同的場景下加了具體
的優化,但問題的本質沒有改變,我們要善於抓住本質。 - 要善於去粗存精,Android Framework也是人寫的,有精華也有糟粕,並不是每行程式碼你都需要問個為什麼,很多時候沒有那麼多為什麼,只是當時那種情況下就那樣設計了。但是
對於關鍵函式我們要去深究它的實現細節。
寫作風格
和大家一樣,筆者也是在前人的書籍和部落格的基礎上開始學習Android的底層實現的,站在前人的肩膀上會看的更遠。但是這些書籍和部落格有個問題在於,文章中羅列了大量的程式碼,這樣
很容易把初學者帶入到瑣碎的細節之中,所以本系列文章在行文中更多的會以圖文並茂和提綱總結的方式來分析問題,關鍵的地方才會去解析原始碼,力求讓大家從巨集觀上理解Android的底
層實現。另外,基本上一個主題對應一篇文章,所以文章會比較長,但是文章會有詳細的標題劃分和提綱總結,可以有的放矢,閱讀自己需要的內容。
Android系統架構圖
Android系統架構圖
從上到下依次分為六層:
- 應用框架層
- 程式通訊層
- 系統服務層
- Android執行時層
- 硬體抽象層
- Linux核心層
在正式閱讀本系列文章之前,請先閱讀導讀相關內容,這會幫助你更加快捷的理解文章內容。
歡迎提交Issue與PR,為幫助我們更好的維護此專案,請先閱讀wiki裡的相關規範。
原理篇
應用框架層
Android檢視系統
文章 | 作者 | 校對 |
---|---|---|
Android檢視系統:Android檢視系統概述 | ||
Android檢視系統:Android應用檢視管理者Window | ||
Android檢視系統:Android應用檢視載體View | ||
Android檢視系統:Android應用檢視容器ViewGroup | ||
Android檢視系統:Android幀佈局控制元件FrameLayout | ||
Android檢視系統:Android線性佈局控制元件LinearLayout | ||
Android檢視系統:Android相對佈局控制元件RelativeLayout | ||
Android檢視系統:Android協調佈局控制元件CoordinatorLayout | ||
Android檢視系統:Android下拉重新整理控制元件SwipeRefreshLayout | ||
Android檢視系統:Android滑動控制元件ViewPager | ||
Android檢視系統:Android滾動控制元件ScrollView | ||
Android檢視系統:Android列表控制元件RecyclerView | ||
Android檢視系統:Android進度條控制元件ProgressBar | ||
Android檢視系統:Android圖片控制元件ImageView | ||
Android檢視系統:Android文字控制元件TextView | ||
Android檢視系統:Android編輯框控制元件EditView | ||
Android檢視系統:Android圖片控制元件Dialog |
Android元件系統
文章 | 作者 | 校對 |
---|---|---|
Android元件系統:Android元件系統概述 | ||
Android元件系統:Android檢視容器Activity | ||
Android元件系統:Android檢視片段Fragment | ||
Android元件系統:Android後臺服務Service | ||
Android元件系統:Android內容提供者ContentProvider | ||
Android元件系統:Android廣播接收者BroadcastReceiver | ||
Android元件系統:Android應用上下文Context |
Android資源系統
文章 | 作者 | 校對 |
---|---|---|
Android資源系統:Android資源系統概述 | ||
Android資源系統:應用資源Resouces | ||
Android資源系統:資源管理器AssetManager |
Android包系統
文章 | 作者 | 校對 |
---|---|---|
Android包系統:Android包系統概述 | ||
Android包系統:APK解析器PackageParser | ||
Android包系統:APK的打包流程 | ||
Android包系統:APK的安裝流程 | ||
Android包系統:APK的載入流程 |
Android應用通訊系統
文章 | 作者 | 校對 |
---|---|---|
Android應用通訊系統:Android應用通訊系統概述 | ||
Android應用通訊系統:Android執行緒通訊橋樑Handler |
Android動畫系統
文章 | 作者 | 校對 |
---|---|---|
Android動畫系統:Android動畫系統概述 |
Android多媒體系統
文章 | 作者 | 校對 |
---|---|---|
Android多媒體系統:Android多媒體系統概述 |
Android資料庫系統
文章 | 作者 | 校對 |
---|---|---|
Android資料庫系統:Android資料庫系統概述 |
程式通訊層
Binder程式通訊框架
文章 | 作者 | 校對 |
---|---|---|
Binder程式通訊框架:服務管理器ServiceManager | ||
Binder程式通訊框架:BpBinder與BBinder | ||
Binder程式通訊框架:Binder驅動 |
Socket程式通訊框架
文章 | 作者 | 校對 |
---|---|---|
Socket程式通訊框架:Socket |
系統服務層
Android元件管理服務
文章 | 作者 | 校對 |
---|---|---|
Android元件管理服務:ActivityServiceManager |
Android視窗管理服務
文章 | 作者 | 校對 |
---|---|---|
Android視窗管理服務:WindowServiceManager |
Android圖形繪製服務
文章 | 作者 | 校對 |
---|---|---|
Android圖形繪製服務:SurfaceFlinger | ||
Android圖形繪製服務:Android佈局解析器LayoutInflater |
Android包管理服務
文章 | 作者 | 校對 |
---|---|---|
Android視窗管理服務:PackageServiceManager |
Android反饋管理服務
文章 | 作者 | 校對 |
---|---|---|
Android反饋管理服務:AccessibilityManagerService |
Android桌布管理服務
文章 | 作者 | 校對 |
---|---|---|
Android桌布管理服務:WallpaperManagerService |
Android搜尋管理服務
文章 | 作者 | 校對 |
---|---|---|
Android搜尋管理服務:SearchManagerService |
Android通知管理服務
文章 | 作者 | 校對 |
---|---|---|
Android通知管理服務:NotificationManagerService |
Android定位管理服務
文章 | 作者 | 校對 |
---|---|---|
Android定位管理服務:LocationManagerService |
Android輸入法管理服務
文章 | 作者 | 校對 |
---|---|---|
Android輸入法管理服務:InputMethodManagerService |
Android電源管理服務
文章 | 作者 | 校對 |
---|---|---|
Android電源管理服務:PowerManagerService |
Android鬧鐘管理服務
文章 | 作者 | 校對 |
---|---|---|
Android鬧鐘管理服務:AlarmManagerService |
Android網路管理服務
文章 | 作者 | 校對 |
---|---|---|
Android鬧鐘管理服務:NetworkManagementService |
Android賬戶管理服務
文章 | 作者 | 校對 |
---|---|---|
Android賬戶管理服務:AccountManagerService |
Android裝置儲存管理服務
文章 | 作者 | 校對 |
---|---|---|
Android裝置儲存管理服務:DeviceStorageMonitorService |
Android備份管理服務
文章 | 作者 | 校對 |
---|---|---|
Android備份管理服務:BackupManagerService |
執行時層
JVM虛擬機器
文章 | 作者 | 校對 |
---|---|---|
JVM虛擬機器:Java虛擬機器概述 | ||
JVM虛擬機器:Java類載入機制 |
ART虛擬機器
文章 | 作者 | 校對 |
---|---|---|
ART虛擬機器:Android ART虛擬機器概述 |
硬體抽象層
核心層
Android程式系統
文章 | 作者 | 校對 |
---|---|---|
Android程式系統:程式的建立、啟動與排程流程 | ||
Android程式系統:執行緒與執行緒池 |
Android記憶體系統
文章 | 作者 | 校對 |
---|---|---|
Android記憶體系統:記憶體管理系統 | ||
Android記憶體系統:Ashmem匿名共享記憶體系統 |
實踐篇
Android工程化實踐
文章 | 作者 | 校對 |
---|---|---|
Android工程化實踐:專案架構 | ||
Android工程化實踐:編譯系統 | ||
Android工程化實踐:外掛化 | ||
Android工程化實踐:熱修復 | ||
Android工程化實踐:模組化 | ||
Android工程化實踐:VCS工作流 | ||
Android工程化實踐:持續整合 | ||
Android工程化實踐:編碼規範 | ||
Android工程化實踐:自動化測試 | ||
Android工程化實踐:自動化埋點與資料採集 |
Android應用優化
文章 | 作者 | 校對 |
---|---|---|
Android應用優化:優化概述 | ||
Android應用優化:啟動優化 | ||
Android應用優化:介面優化 | ||
Android應用優化:記憶體優化 | ||
Android應用優化:影像優化 | ||
Android應用優化:網路優化 | ||
Android應用優化:併發優化 | ||
Android應用優化:優化工具 |
Android介面開發
文章 | 作者 | 校對 |
---|---|---|
Android介面開發:View自定義概述 | ||
Android介面開發:View自定義佈局篇 | ||
Android介面開發:View自定義繪製篇 | ||
Android介面開發:View自定義互動篇 |
Android多媒體開發
文章 | 作者 | 校對 |
---|---|---|
Android多媒體開發:Bitmap實踐指南 | ||
Android多媒體開發:Camera實踐指南 |
Android網路程式設計
文章 | 作者 | 校對 |
---|---|---|
Android網路程式設計:網路程式設計實踐 |
Android混合程式設計
文章 | 作者 | 校對 |
---|---|---|
Android混合程式設計:WebView實踐 |
歡迎關注我們的微信公眾號,新文章會第一時間釋出到掘金部落格與微信公眾平臺,我們也有自己的交流群,下方是QQ交流群,微信群已滿,可以加我微信 allenwells 邀請入群。
微信公眾平臺
QQ交流群