Android系統原始碼分析團體專案BeesAndroid正式上線啦

蘇策發表於2019-03-03

嗨,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系統原始碼分析團體專案BeesAndroid正式上線啦

從上到下依次分為六層:

  • 應用框架層
  • 程式通訊層
  • 系統服務層
  • 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 邀請入群。

微信公眾平臺

Android系統原始碼分析團體專案BeesAndroid正式上線啦

QQ交流群

Android系統原始碼分析團體專案BeesAndroid正式上線啦

相關文章