日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

如何深入学习 Android Framework

發(fā)布時間:2024/1/8 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何深入学习 Android Framework 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為什么要學 Framework

為什么要學 Framework?最直接最功利的原因就是面試要問,比如:

  • Activity 的啟動過程,這個會涉及到 AMS/ATMS 和 WMS 的實現(xiàn)
  • Binder 如何通過一次拷貝完成 IPC
  • View 的繪制流程
  • SurfaceFlinger 的工作原理與流程
  • ......

對于應用開發(fā)來說,大部分類似的題目是沒有太大意義的。在2023年,面試的內(nèi)容已經(jīng)在 app 層挖掘完了,再想提高面試門檻就只能往深了挖。Framework 的內(nèi)容足夠多,應聘者不可能熟悉所有的源碼,只要面試官愿意,肯定能問倒應聘者的。

如果我們能系統(tǒng)科學地學習 Framework,掌握 Framework 中基礎的核心的內(nèi)容,以不變應萬變。當問到我們不熟悉的部分,大膽承認,說出該部分內(nèi)容會涉及到哪些基礎內(nèi)容,如何著手去分析,面試官大概率也會給過的。

Android 的應用非常廣泛,不僅是手機,可能汽車,手表,冰箱,微波爐,電視,機頂盒,空調(diào)的內(nèi)部都有一個 Android 系統(tǒng)。廣泛的應用促使了對 Framework 人才的大量需求,因為 Framework 學習門檻較高,導致企業(yè)招聘相對困難,薪資也比大部分 App 開發(fā)崗位高出不少。如果能系統(tǒng)地學習 Framework 并加入這類企業(yè),不論從經(jīng)濟上還是個人職業(yè)發(fā)展上都是非常不錯的選擇。

什么是 Android Framework

什么是 Android Framework? 我們先看一下 Android 的整體結(jié)構圖

圖片來自官網(wǎng)

從下往上依次是:

  • Linux kernel 層,很大一部分內(nèi)容是驅(qū)動程序
  • HAL 層,對下封裝驅(qū)動硬件操作,對上向 App 提供統(tǒng)一穩(wěn)定的驅(qū)動操作接口
  • Native層,主要是 C/C++ 庫以及 Java 虛擬機
  • Java 層,主要是 Java 庫,系統(tǒng)服務等
  • App 層,一些系統(tǒng)和三方APP

我們常說的 framework 大多數(shù)指的是中間三層的開發(fā),即 Java層、Native層、HAL層

以 Android 系統(tǒng)啟動過程為主線,以進程的視角來學習 Android 系統(tǒng)全貌,更為清晰明了:

圖片來自 gityuan

Android 系統(tǒng)啟動過程由上圖從下往上的一個過程是由 Boot Loader 引導開機,然后依次進入 -> Kernel -> Native -> Framework -> App

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

Framework 開發(fā)做什么

谷歌幾乎每年都會發(fā)布最新的 AOSP 原生代碼,AOSP 原生代碼只支持極少數(shù)幾款手機,比如 Pixel。

芯片廠商根據(jù)自己的芯片的特點修改 AOSP ,讓其可以在自己芯片上跑起來

方案廠商根據(jù)自己開發(fā)的設備特點(主要是外設 如wifi 藍牙 傳感器等),修改芯片廠提供的源碼,使得軟件能在方案廠商的開發(fā)板上跑起來

大部分做產(chǎn)品的廠商拿到的就是芯片廠商提供的開發(fā)板硬件和系統(tǒng)源碼,產(chǎn)品廠商主要工作就是:

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

方案廠商提供的系統(tǒng)源碼并不完美,App 中很多的 Bug 可能是 Framework 層導致的,產(chǎn)品在上市前需要針對系統(tǒng) App 和熱門三方 App 及游戲進行測試,解決掉 Framework 中存在的 bug。Framework 開發(fā)的主要工作就是解決這些 bug協(xié)助系統(tǒng) App 的開發(fā),同時可能要做一些新特性開發(fā)系統(tǒng)性能安全相關的工作。

Framework 中無窮無盡的 bug 也不能怪芯片廠商和方案廠商,因為 Android 打娘胎里出來就有數(shù)不清的 bug,在這里 可以查看 aosp 相關的 bug 信息。

Framework 學什么

從 Framework 的工作內(nèi)容和特點來看,我們應該花主要的精力學習基礎和核心模塊,然后在工作中學習涉及到的具體的模塊。

系統(tǒng)源碼非常的龐大與復雜,在學習過程中一定要有分層與黑盒的思想!

我總結(jié)了 11 個專題,逐個擊破 Framework 基礎核心內(nèi)容:

1. 基礎知識

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

  • C/C++
  • Java
  • JNI

其次我們對一些工具類的語言有一定的了解:

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

早期 Android 編譯系統(tǒng)使用 make 構建,后來逐步使用 Soong 進行替換,Android 的官方博客指出未來會使用 Bazel 來替換掉目前 make 和 Soong 混合的結(jié)構,鑒于 Android 代碼量龐大,這些替換都是部分的逐步開展的,所以三者都得有所了解

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

  • 熟悉 Linux 的基本使用,主要是常用的命令和常用服務搭建
  • 熟悉 Linux 系統(tǒng)編程,Native 層使用了很多系統(tǒng)編程接口,熟悉 Linux 系統(tǒng)編程是讀懂 Native 層的基礎
  • Linux 系統(tǒng)編程可能或多或少需要我們對 Linux 內(nèi)核有基本的了解

另外在 Linux 的學習工程中兼顧一下操作系統(tǒng)基礎的學習

2. AOSP 源碼上手

有了基礎知識以后,我們就可以上手玩一玩 AOSP 源碼了:

這里主要是一些實際操作,編譯好 AOSP,并添加一些功能。同時了解一下系統(tǒng)源碼的管理,掌握 repo 和 gerrit 的使用。

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

?

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

4. Hal與硬件服務

?

這里需要我們自己動手:

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

以上內(nèi)容使我們從整體上了解了外設軟件開發(fā)流程。

5. 基礎組件

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

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

6. Binder

?

Binder 是 Android 最核心的基礎,整個 Android 都是基于 Binder 搭建的,不夸張的講,不懂 Binder 就不懂 Android。

Binder 涉及了內(nèi)核驅(qū)動層,C 層,C++ 層,Java 層,涉及知識多,流程復雜,很多人學了一遍有一遍,還是沒有掌握。

這一次,我們從三個四的角度徹底搞懂 Binder !

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

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

圖片來自這里

重點掌握:

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

8. 應用層框架

?

主要搞懂:

  • AMS/ATMS
  • Handler 和 Looper
  • PackageManagerService

9. 顯示系統(tǒng)

?

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

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

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

輸入系統(tǒng)主要三個方面來具體學習:

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

11. 系統(tǒng)應用

對系統(tǒng)應用的開發(fā)要有所了解,主要學習一下幾個 App:

  • Calculator
  • Setting
  • Launcher
  • SystemUI

總結(jié)

在掌握了這 11 個專題后,不論是繼續(xù)研究 Framework 中其他模塊,或是參與 App 開發(fā),又或是研究內(nèi)核與驅(qū)動,我相信,你一定早已是是游刃有余了!

作者:阿豪元代碼
鏈接:https://juejin.cn/post/7195770700106776636
來源:稀土掘金
著作權歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權,非商業(yè)轉(zhuǎn)載請注明出處。

總結(jié)

以上是生活随笔為你收集整理的如何深入学习 Android Framework的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。