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

寫在最前

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

來到2023年,App開發(fā)崗位已經(jīng)越來越少省咨,做App開發(fā)的門檻越來越低肃弟,但目前市場的產(chǎn)業(yè)轉(zhuǎn)型,Android的開發(fā)需求都轉(zhuǎn)向了Framework的開發(fā)零蓉。因此今年開始Android的工程師又會有一大堆人嘗試要越過Framework開發(fā)這道坎了笤受。

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

Android Framework 涉及的行業(yè)相當(dāng)廣泛紊册,可以是手機比肄,汽車,手表囊陡,冰箱,微波爐掀亥,電視撞反,機頂盒,空調(diào)等等設(shè)備搪花。

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

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

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

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

1.由 Boot Loader 引導(dǎo)開機
2.進入 -> Kernel
3.進入 -> Native
4.進入-> Framework
5.進入 -> App

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

Framework 能開發(fā)什么

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

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

1. 基礎(chǔ)知識

編程語言方面我們需要掌握:

  • C/C++
  • Java
  • JNI

對一些工具類的語言有一定的了解:

  • Python:源碼下載工具 repo 使用 python 對 git 操作做了封裝离例,以適應(yīng)多個 git 倉庫的操作
  • Shell 編程:Android 編譯系統(tǒng)包含了大量的 Shell 腳本
  • go 語言换团,Android 編譯系統(tǒng)中部分腳本使用 go 語言編寫

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

對于 Linux 需要掌握三個方面:

  • 熟悉 Linux 的基本使用想虎,主要是常用的命令和常用服務(wù)搭建
  • 熟悉 Linux 系統(tǒng)編程,Native 層使用了很多系統(tǒng)編程接口叛拷,熟悉 Linux 系統(tǒng)編程是讀懂 Native 層的基礎(chǔ)
  • Linux 系統(tǒng)編程可能或多或少需要我們對 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)是怎么編譯的,怎么燒錄到手機上的署浩。

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

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

5. 基礎(chǔ)組件

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

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

6. Binder


Binder 是 Android 最核心的基礎(chǔ)炊汤,整個 Android 都是基于 Binder 搭建的,不夸張的講,不懂 Binder 就不懂 Android婿崭。
Binder 涉及了內(nèi)核驅(qū)動層拨拓,C 層,C++ 層氓栈,Java 層渣磷,涉及知識多,流程復(fù)雜授瘦,很多人學(xué)了一遍有一遍醋界,還是沒有掌握。

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

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



重點掌握:

  • init 的實現(xiàn)細節(jié)
  • Zygote 的具體實現(xiàn)
  • SystemServer 的內(nèi)部實現(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)主要三個方面來具體學(xué)習(xí):

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

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

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

  • Calculator
  • Setting
  • Launcher
  • SystemUI
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者徒欣。
  • 序言:七十年代末逐样,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子打肝,更是在濱河造成了極大的恐慌脂新,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粗梭,死亡現(xiàn)場離奇詭異争便,居然都是意外死亡,警方通過查閱死者的電腦和手機断医,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門滞乙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鉴嗤,你說我怎么就攤上這事斩启。” “怎么了躬窜?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵浇垦,是天一觀的道長。 經(jīng)常有香客問我荣挨,道長,這世上最難降的妖魔是什么朴摊? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任默垄,我火速辦了婚禮,結(jié)果婚禮上甚纲,老公的妹妹穿的比我還像新娘口锭。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布鹃操。 她就那樣靜靜地躺著韭寸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荆隘。 梳的紋絲不亂的頭發(fā)上恩伺,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音椰拒,去河邊找鬼晶渠。 笑死,一個胖子當(dāng)著我的面吹牛燃观,可吹牛的內(nèi)容都是我干的褒脯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼缆毁,長吁一口氣:“原來是場噩夢啊……” “哼番川!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起脊框,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤颁督,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缚陷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體适篙,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年箫爷,在試婚紗的時候發(fā)現(xiàn)自己被綠了嚷节。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡虎锚,死狀恐怖硫痰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窜护,我是刑警寧澤效斑,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站柱徙,受9級特大地震影響缓屠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜护侮,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一敌完、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧羊初,春花似錦滨溉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闽撤。三九已至,卻和暖如春脯颜,著一層夾襖步出監(jiān)牢的瞬間哟旗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工伐脖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留热幔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓讼庇,卻偏偏與公主長得像绎巨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蠕啄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容