做拼貨商城網(wǎng)站國際婚戀網(wǎng)站排名
前言
部分內(nèi)容參考《Android進(jìn)階解密》 – 劉望舒
1. Android版本
官方鏈接:https://developer.android.com/studio/releases/platforms
里面有各個(gè)版本的官方文檔,有些新功能的用法在這里面。
現(xiàn)在做安卓11,有時(shí)候需要向下兼容
2. AOSP 和 ATV
Android系統(tǒng)根據(jù)是否需要認(rèn)證分為AOSP系統(tǒng)和ATV系統(tǒng)。
- AOSP: Android開源系統(tǒng),全稱為Android Open Source Project
- ATV: 產(chǎn)品依照 Android TV 制式標(biāo)準(zhǔn)提供統(tǒng)一的操作體驗(yàn),并且通過Google 認(rèn)證。
2.1 AOSP
定義:AOSP是指Android開源項(xiàng)目,它是由Google發(fā)起并維護(hù)的一個(gè)開源軟件項(xiàng)目,旨在提供一個(gè)開放、自由、可定制的移動(dòng)操作系統(tǒng)。
特點(diǎn):AOSP是Android的原始代碼庫,包括Android操作系統(tǒng)的核心代碼、應(yīng)用程序框架、系統(tǒng)應(yīng)用和工具等。它是開放源代碼的,任何人都可以訪問、查看和下載AOSP的源代碼,并根據(jù)需要進(jìn)行修改和定制。
用途:AOSP作為Android操作系統(tǒng)的基礎(chǔ),被廣泛用于移動(dòng)設(shè)備、平板電腦、智能手表、智能電視、汽車娛樂系統(tǒng)等各種設(shè)備。開發(fā)者可以基于AOSP構(gòu)建自己的Android發(fā)行版,或者為特定設(shè)備進(jìn)行定制開發(fā)。
更多解釋:
- AOSP是安卓開源項(xiàng)目,是一個(gè)由Google收購并開源的手機(jī)操作系統(tǒng)項(xiàng)目(主要協(xié)議是Apache 2.0),基于Linux內(nèi)核核心代碼,截至目前大量安卓陣型的手機(jī)廠商以及上下游供應(yīng)商參與了安卓項(xiàng)目的開發(fā),主要包括華為、索尼、三星、Intel、高通等,其中華為是安卓項(xiàng)目代碼貢獻(xiàn)全球前三名的廠商。
- AOSP是手機(jī)操作系統(tǒng)的核心代碼,但不是全部。手機(jī)操作系統(tǒng)需要在AOSP基礎(chǔ)上,增加各種硬件驅(qū)動(dòng)、軟件框架層、以及各類系統(tǒng)應(yīng)用,才能成為我們通常所說的手機(jī)操作系統(tǒng)。所以,AOSP通常是指安卓手機(jī)操作系統(tǒng)的“內(nèi)核”。在安卓手機(jī)的系統(tǒng)描述中,通常有一個(gè)“內(nèi)核版本”,即為AOSP。
- 安卓系統(tǒng)通常即為AOSP,安卓手機(jī)描述的Powered by Android,這里的Android即是AOSP。由谷歌定期牽頭發(fā)布的安卓大版本也是指AOSP。AOSP是免費(fèi)提供給所有手機(jī)廠商使用的。
- 目前安卓陣營各廠商(除了華為)并不只是使用了免費(fèi)的AOSP,還使用了谷 歌發(fā)布的收費(fèi)的GMS(谷歌服務(wù)框架)以及谷歌的各類APP(等等)。雖然國內(nèi)手機(jī)可以不使用谷歌app,但是由于早期GMS屬于AOSP,因此大量的安卓App依賴了GMS的許多功能接口,隨著后期谷歌把大批GMS代碼從AOSP項(xiàng)目移出轉(zhuǎn)為收費(fèi)GMS(這段歷史也是促使華為啟動(dòng)自研鴻蒙的重要原因之一),所以谷歌幾乎控制了整個(gè)安卓生態(tài)。這也是為什么安卓標(biāo)榜是免費(fèi)開源項(xiàng)目而所有廠商都離不開谷歌的核心原因。
- 所以,一般意義上的“安卓”是指:AOSP + GMS,這兩者構(gòu)成了安卓開發(fā)者使用的基礎(chǔ)SDK,也是幾乎所有安卓App的基礎(chǔ)。其中,AOSP開源免費(fèi),GMS商用收費(fèi)。
- 鴻蒙(HarmonyOS)是由華為開發(fā)的開源手機(jī)操作系統(tǒng)項(xiàng)目,對(duì)標(biāo)的是AOSP,同樣基于Linux內(nèi)核核心庫,并使用了AOSP部分開源代碼用于安卓app兼容(符合Apache開源協(xié)議)。由于鴻蒙并沒有直接使用AOSP軟件,因此這是一個(gè)獨(dú)立開源項(xiàng)目,最直接而言不需要Powered by Android。類比Linux也使用了Minix的部分代碼,AOSP也使用了Linux部分代碼,但他們都是一個(gè)新的獨(dú)立項(xiàng)目一個(gè)道理。
- 華為手機(jī)操作系統(tǒng)包括HarmonyOS + HMS,后者是對(duì)標(biāo)谷歌GMS的商業(yè)產(chǎn)品,用于支持開發(fā)者為華為手機(jī)開發(fā)App。由于HMS是后來者,因此HMS許多接口設(shè)計(jì)也是盡量兼容GMS,跟鴻蒙兼容AOSP一個(gè)道理。如果鴻蒙只是Fork AOSP,拉個(gè)分支的話,在開源圈子里就沒有前途了。鴻蒙目前主打的是整體架構(gòu)上與AOSP不同(是微內(nèi)核架構(gòu),AOSP是宏內(nèi)核),以及集成了分布式計(jì)算框架(用于手機(jī)與其他設(shè)備的互聯(lián),典型如手表、車、家電、耳機(jī)等),這也是鴻蒙1+8+N大生態(tài)的技術(shù)基礎(chǔ)。而谷歌也在研發(fā)一個(gè)類似的終端操作系統(tǒng)(內(nèi)部被稱為安卓第二)Fushia。
- 由于手機(jī)應(yīng)用生態(tài)很大程度依賴GMS,為了海外市場,所以小米、OPPO、Vivo、一加等廠不大可能全部使用HMS,很大一部分可能,中低端使用鴻蒙系統(tǒng),高端繼續(xù)使用安卓,差異化競爭。當(dāng)然,如果鴻蒙用戶反饋很好的話,不排除高端機(jī)也使用鴻蒙的可能性。畢竟鴻蒙的目標(biāo)主要是在“萬物互聯(lián)”的智慧生活。所以,家電、車、可穿戴設(shè)備、運(yùn)動(dòng)健康等方面才是鴻蒙系統(tǒng)的目標(biāo)。鴻蒙不只是個(gè)手機(jī)操作系統(tǒng),而是個(gè)“大終端”操作系統(tǒng)。是未來的大趨勢。
2.2 ATV
定義:Android TV是一種Android操作系統(tǒng)的變種,專門設(shè)計(jì)用于智能電視和媒體播放器。它是AOSP的一個(gè)派生版本,經(jīng)過了針對(duì)大屏幕電視的定制和優(yōu)化。
特點(diǎn):Android TV保留了Android操作系統(tǒng)的核心特性,如Android應(yīng)用程序生態(tài)系統(tǒng)、多媒體播放功能、網(wǎng)絡(luò)連接和互聯(lián)網(wǎng)訪問等。但它還具有專門針對(duì)電視觀看體驗(yàn)的用戶界面和交互方式,包括遙控器支持、大屏幕適配、焦點(diǎn)導(dǎo)航等。
用途:Android TV被廣泛應(yīng)用于智能電視、電視機(jī)頂盒、媒體播放器和游戲機(jī)等娛樂設(shè)備。用戶可以通過Android TV訪問各種應(yīng)用程序,觀看視頻內(nèi)容、播放游戲、瀏覽互聯(lián)網(wǎng)等,從而將智能功能引入電視屏幕。
3. Android機(jī)頂盒硬件原理框圖及Android機(jī)頂盒不支持的功能
- 主控,EMMC,DDR,GPIO,USB,HDMI,Tuner,網(wǎng)口,WiFi,藍(lán)牙,紅外等
- 不支持的功能:觸摸屏,電話,相機(jī),NFC,GPS等移動(dòng)功能
第一章 Android系統(tǒng)架構(gòu)
1.1 Android平臺(tái)架構(gòu)
官方文檔:https://developer.android.com/guide/platform
Android系統(tǒng)架構(gòu)分為五層:從上到下依次是應(yīng)用層、應(yīng)用架構(gòu)層、系統(tǒng)運(yùn)行庫層、硬件抽象層和Linux內(nèi)核層,如圖:
1.1.1 應(yīng)用層(System Apps)
系統(tǒng)內(nèi)置的應(yīng)用程序以及非系統(tǒng)級(jí)的應(yīng)用程序都屬于應(yīng)用層,負(fù)責(zé)與用戶進(jìn)行直接交互,通常都是用Java進(jìn)行開發(fā)的。
1.1.2 應(yīng)用框架層(Java API Framework)
API (Application Programming Interface)
應(yīng)用框架層為開發(fā)人員提供了開發(fā)應(yīng)用程序所需要的API,我們平常開發(fā)應(yīng)用程序都是調(diào)用這一層所提供的API,當(dāng)然也包括系統(tǒng)應(yīng)用。這一層是由Java代碼編寫的,可以稱為Java Framework。下面來看這一層所提供的主要組件:
1.1.3 系統(tǒng)運(yùn)行庫層
從Android系統(tǒng)框架圖上可以看出,系統(tǒng)運(yùn)行庫層分為兩部分,分別是 C/C++ 程序庫和 Android 運(yùn)行時(shí)庫,下面分別進(jìn)行介紹:
(1)原生C/C++程序庫
(2)Android運(yùn)行時(shí)庫
運(yùn)行時(shí)庫又分為核心庫和ART(5.0系統(tǒng)之后,Dalvik虛擬機(jī)被ART取代)。核心庫提供了Java語言核心庫的大多數(shù)功能,這樣開發(fā)者可以使用Java語言來編寫Android應(yīng)用。相較于JVM,Dalvik虛擬機(jī)是專門為移動(dòng)設(shè)備定制的,允許在有限的內(nèi)存中同時(shí)運(yùn)行多個(gè)虛擬機(jī)的實(shí)例,并且每一個(gè)Dalvik 應(yīng)用作為一個(gè)獨(dú)立的Linux 進(jìn)程執(zhí)行。獨(dú)立的進(jìn)程可以防止在虛擬機(jī)崩潰的時(shí)候所有程序都被關(guān)閉。而替代Dalvik虛擬機(jī)的ART 的機(jī)制與Dalvik 不同。在Dalvik下,應(yīng)用每次運(yùn)行的時(shí)候,字節(jié)碼都需要通過即時(shí)編譯器轉(zhuǎn)換為機(jī)器碼,這會(huì)拖慢應(yīng)用的運(yùn)行效率,而在ART 環(huán)境中,應(yīng)用在第一次安裝的時(shí)候,字節(jié)碼就會(huì)預(yù)先編譯成機(jī)器碼,使其成為真正的本地應(yīng)用。
1.1.4 硬件抽象層(HAL / HIDL)
硬件抽象層是位于操作系統(tǒng)內(nèi)核與硬件電路之間的接口層,其目的在于將硬件抽象化,為了保護(hù)硬件廠商的知識(shí)產(chǎn)權(quán),它隱藏了特定平臺(tái)的硬件接口細(xì)節(jié),為操作系統(tǒng)提供虛擬硬件平臺(tái),使其具有硬件無關(guān)性,可在多種平臺(tái)上進(jìn)行移植。 從軟硬件測試的角度來看,軟硬件的測試工作都可分別基于硬件抽象層來完成,使得軟硬件測試工作的并行進(jìn)行成為可能。通俗來講,就是將控制硬件的動(dòng)作放在硬件抽象層中。
1.1.5 Linux內(nèi)核層
Android 的核心系統(tǒng)服務(wù)基于Linux 內(nèi)核,在此基礎(chǔ)上添加了部分Android專用的驅(qū)動(dòng)。系統(tǒng)的安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型等都依賴于該內(nèi)核。
Android系統(tǒng)的五層架構(gòu)就講到這,了解以上的知識(shí)對(duì)以后分析系統(tǒng)源碼有很大的幫助。
1.2 Android系統(tǒng)源碼目錄
學(xué)習(xí)Android系統(tǒng)源碼,需要掌握系統(tǒng)源碼目錄。可以訪問下面的連接來閱讀系統(tǒng)源碼
https://android.googlesource.com/
至于Android系統(tǒng)源碼目錄可以參考:
Android系統(tǒng)五層架構(gòu)
1.2.1 整體結(jié)構(gòu)
各個(gè)版本的源碼目錄基本是類似的,如果是編譯后的源碼目錄,會(huì)多一個(gè)out文件夾,用來存儲(chǔ)編譯產(chǎn)生的文件。Android 11 的系統(tǒng)目錄如下:
可以看出,系統(tǒng)源碼分類清晰,并且內(nèi)容龐大且復(fù)雜。接下來分析packages中的內(nèi)容,也就是應(yīng)用層部分
1.2.2 應(yīng)用層部分
應(yīng)用層位于整個(gè)Android系統(tǒng)的最上層,開發(fā)者開發(fā)的應(yīng)用程序以及系統(tǒng)內(nèi)置的應(yīng)用程序都是在應(yīng)用層。源碼根目錄中的packages目錄對(duì)應(yīng)著系統(tǒng)應(yīng)用層。它的目錄結(jié)構(gòu)如表
暫時(shí)無法在飛書文檔外展示此內(nèi)容
從目錄結(jié)構(gòu)可以發(fā)現(xiàn),packages目錄存放著系統(tǒng)核心應(yīng)用程序、第三方的應(yīng)用程序和輸入法等等,這些應(yīng)用都是運(yùn)行在系統(tǒng)應(yīng)用層的,因此packages目錄對(duì)應(yīng)著系統(tǒng)的應(yīng)用層。
1.2.3 應(yīng)用框架層部分
應(yīng)用框架層是系統(tǒng)的核心部分,一方面向上提供接口給應(yīng)用層調(diào)用,另一方面向下與C/C++程序庫以及硬件抽象層等進(jìn)行銜接。 應(yīng)用框架層的主要實(shí)現(xiàn)代碼在/frameworks/base和/frameworks/av目錄下,其中/frameworks/base目錄結(jié)構(gòu)如表
1.2.4 C/C++程序庫部分
系統(tǒng)運(yùn)行庫層(Native)中的 C/C++程序庫的類型繁多,功能強(qiáng)大,C/C++程序庫并不完全在一個(gè)目錄中,這里給出幾個(gè)常用且比較重要的C/C++程序庫所在的目錄位置。
講完 C/C++程序庫部分,剩下的部分我們已經(jīng)給出:Android運(yùn)行時(shí)庫的代碼放在art/目錄中。硬件抽象層的代碼在hardware/目錄中,這一部分是手機(jī)廠商改動(dòng)最大的一部分,根據(jù)手機(jī)終端所采用的硬件平臺(tái)會(huì)有不同的實(shí)現(xiàn)。
1.3 源碼閱讀
這里有Android10 的源碼:https://www.androidos.net.cn/android/10.0.0_r6/xref
Android 7.1 到 Android 13 的系統(tǒng)源碼:http://aospxref.com
下載源碼:https://source.android.google.cn/docs/setup/download?hl=zh-cn
源碼提交:https://android.googlesource.com/platform/manifest
https://blog.csdn.net/cjohn1994/article/details/127467165