Android Framework 教程1 --如何開(kāi)始學(xué)習(xí)Framework

寫(xiě)在最前

學(xué)習(xí)Framework有什么意義?

來(lái)到2023年,App開(kāi)發(fā)崗位已經(jīng)越來(lái)越少,做App開(kāi)發(fā)的門(mén)檻越來(lái)越低,但目前市場(chǎng)的產(chǎn)業(yè)轉(zhuǎn)型,Android的開(kāi)發(fā)需求都轉(zhuǎn)向了Framework的開(kāi)發(fā)。因此今年開(kāi)始Android的工程師又會(huì)有一大堆人嘗試要越過(guò)Framework開(kāi)發(fā)這道坎了。

Framework 的學(xué)習(xí)內(nèi)容足夠龐大,因此日后的工作面試,只要面試官愿意問(wèn),肯定能找到讓你思考半天的。

Android Framework 涉及的行業(yè)相當(dāng)廣泛,可以是手機(jī),汽車(chē),手表,冰箱,微波爐,電視,機(jī)頂盒,空調(diào)等等設(shè)備。

Framework 學(xué)習(xí)門(mén)檻也較高,薪資也比大部分 App 開(kāi)發(fā)崗位高出不少。如果能系統(tǒng)地學(xué)習(xí) Framework ,不論從經(jīng)濟(jì)上還是個(gè)人職業(yè)發(fā)展上都是非常不錯(cuò)的選擇。

這是一張經(jīng)典的架構(gòu)圖

架構(gòu)圖
  • Linux kernel 層,驅(qū)動(dòng)程序
  • HAL 層,封裝驅(qū)動(dòng)硬件操作,向 App 提供統(tǒng)一穩(wěn)定的驅(qū)動(dòng)操作接口
  • Native層,C/C++ 庫(kù)以及 Java 虛擬機(jī)
  • Java 層, Java 庫(kù),系統(tǒng)服務(wù)等
  • App 層,系統(tǒng)和三方APP
    framework 大多數(shù)指的是中間三層的開(kāi)發(fā),即 Java層、Native層、HAL層

Android 系統(tǒng)啟動(dòng)過(guò)程

1.由 Boot Loader 引導(dǎo)開(kāi)機(jī)
2.進(jìn)入 -> Kernel
3.進(jìn)入 -> Native
4.進(jìn)入-> Framework
5.進(jìn)入 -> App

  • kernel 層主要向上提供了驅(qū)動(dòng),Hal 層加以封裝后,向上提供驅(qū)動(dòng)程序功能
  • Native 層通過(guò) init 進(jìn)程啟動(dòng)了很多守護(hù)進(jìn)程用于支持系統(tǒng)的運(yùn)轉(zhuǎn)
  • Java 層通過(guò) Zygote 孵化了 Java 守護(hù)進(jìn)程,用于支持系統(tǒng)的運(yùn)行和 App 的運(yùn)行

Framework 能開(kāi)發(fā)什么

  • 添加自己的硬件、驅(qū)動(dòng)、HAL和硬件系統(tǒng)服務(wù),硬件的提供商可能會(huì)提供相應(yīng)軟件支持
  • 定制系統(tǒng) App,比如 Launcher Setting System UI Message Camera 等
  • 開(kāi)發(fā)廠(chǎng)商自己的系統(tǒng) App,比如 音視頻播放器 應(yīng)用商店 主題 紅外遙控等
  • 個(gè)性化功能開(kāi)發(fā),比如軟件多開(kāi),手機(jī)分身,語(yǔ)音變聲,錄屏,雙卡雙待等等
  • 集成一些常用三方應(yīng)用,比如 微信 淘寶 愛(ài)奇藝等
  • 系統(tǒng)穩(wěn)定性 性能 安全相關(guān)優(yōu)化
  • 系統(tǒng)裁剪

Framework 怎么學(xué)--學(xué)習(xí)路線(xiàn)分析

1. 基礎(chǔ)知識(shí)

編程語(yǔ)言方面我們需要掌握:

  • C/C++
  • Java
  • JNI

對(duì)一些工具類(lèi)的語(yǔ)言有一定的了解:

  • Python:源碼下載工具 repo 使用 python 對(duì) git 操作做了封裝,以適應(yīng)多個(gè) git 倉(cāng)庫(kù)的操作
  • Shell 編程:Android 編譯系統(tǒng)包含了大量的 Shell 腳本
  • go 語(yǔ)言,Android 編譯系統(tǒng)中部分腳本使用 go 語(yǔ)言編寫(xiě)

早期 Android 編譯系統(tǒng)使用 make 構(gòu)建,后來(lái)逐步使用 Soong 進(jìn)行替換,Android 的官方博客指出未來(lái)會(huì)使用 Bazel 來(lái)替換掉目前 make 和 Soong 混合的結(jié)構(gòu),鑒于 Android 代碼量龐大,這些替換都是部分的逐步開(kāi)展的。

對(duì)于 Linux 需要掌握三個(gè)方面:

  • 熟悉 Linux 的基本使用,主要是常用的命令和常用服務(wù)搭建
  • 熟悉 Linux 系統(tǒng)編程,Native 層使用了很多系統(tǒng)編程接口,熟悉 Linux 系統(tǒng)編程是讀懂 Native 層的基礎(chǔ)
  • Linux 系統(tǒng)編程可能或多或少需要我們對(duì) Linux 內(nèi)核有基本的了解
    另外在 Linux 的學(xué)習(xí)工程中兼顧一下操作系統(tǒng)基礎(chǔ)的學(xué)習(xí)

2. AOSP 源碼學(xué)習(xí)


了解一下系統(tǒng)源碼的管理,掌握 repo 和 gerrit 的使用。

3. AOSP 源碼編譯系統(tǒng)


在上手了 AOSP 源碼后,我們需要知道,我們的系統(tǒng)是怎么編譯的,怎么燒錄到手機(jī)上的。

4. Hal與硬件服務(wù)

image.png
  • 完成一個(gè)簡(jiǎn)單字符驅(qū)動(dòng)程序的編寫(xiě)
  • 完成 Hal 層編寫(xiě),首先掌握傳統(tǒng)方式,再學(xué)習(xí)基于 HwBinder 的現(xiàn)代方式
  • 最后就是在系統(tǒng)中添加硬件服務(wù),寫(xiě)個(gè)簡(jiǎn)單的 App 訪(fǎng)問(wèn)我們的硬件服務(wù)

5. 基礎(chǔ)組件

基礎(chǔ)組件就是被使用的比較多的組件,主要包含了:

  • Android 智能指針
  • Android 屬性系統(tǒng)
  • Android 日志系統(tǒng)
  • SeAndroid
  • Android 權(quán)限系統(tǒng)
  • 匿名共享內(nèi)存

6. Binder


Binder 是 Android 最核心的基礎(chǔ),整個(gè) Android 都是基于 Binder 搭建的,不夸張的講,不懂 Binder 就不懂 Android。
Binder 涉及了內(nèi)核驅(qū)動(dòng)層,C 層,C++ 層,Java 層,涉及知識(shí)多,流程復(fù)雜,很多人學(xué)了一遍有一遍,還是沒(méi)有掌握。

7. 系統(tǒng)啟動(dòng)過(guò)程分析

主要熟悉整個(gè)系統(tǒng)啟動(dòng)的流程:



重點(diǎn)掌握:

  • init 的實(shí)現(xiàn)細(xì)節(jié)
  • Zygote 的具體實(shí)現(xiàn)
  • SystemServer 的內(nèi)部實(shí)現(xiàn)

8. 應(yīng)用層框架


主要搞懂:

  • AMS/ATMS
  • Handler 和 Looper
  • PackageManagerService

9. 顯示系統(tǒng)


在掌握了 Android 顯示系統(tǒng)整體框架后,再逐步學(xué)習(xí)一下內(nèi)容:

  • Hal 層的 Gralloc 和 Hwcomposer
  • Surfaceflinger
  • WMS
  • View 系統(tǒng)

10. Android 輸入系統(tǒng)

輸入系統(tǒng)主要三個(gè)方面來(lái)具體學(xué)習(xí):

  • 讀取事件
  • 分發(fā)事件
  • 處理事件

11. 系統(tǒng)應(yīng)用

對(duì)系統(tǒng)應(yīng)用的開(kāi)發(fā)要有所了解,主要學(xué)習(xí)一下幾個(gè) App:

  • Calculator
  • Setting
  • Launcher
  • SystemUI
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容