Android软件架构
前言
本篇文章只是簡(jiǎn)單解答一下安卓的軟件架構(gòu),是我在學(xué)習(xí)中的一個(gè)筆記,如果有內(nèi)容錯(cuò)誤,歡迎評(píng)論指正,如果有更好的資料也歡迎大家一起分享~
正文
首先看一下Android軟件架構(gòu)的框圖,對(duì)于框圖中庫(kù)的作用都放進(jìn)去了,當(dāng)然庫(kù)可能不完整,可以下面這篇文章:代碼目錄https://blog.csdn.net/weixin_39723405/article/details/90199453https://blog.csdn.net/weixin_39723405/article/details/90199453當(dāng)然還包含了SOA的部分內(nèi)容,詳細(xì)可以看下面兩篇文章:SOAhttps://mp.weixin.qq.com/s/vFHw3U3ESJs_16x6e2kctghttps://mp.weixin.qq.com/s/vFHw3U3ESJs_16x6e2kctgSOA背景介紹https://mp.weixin.qq.com/s/rSgiu4tEzY9l6WDQHrqB5whttps://mp.weixin.qq.com/s/rSgiu4tEzY9l6WDQHrqB5w
Android軟件架構(gòu)如下:
?
?軟件架構(gòu)主要包含了五層,分別是應(yīng)用程序?qū)印?yīng)用程序框架層、運(yùn)行庫(kù)層、硬件抽象層和操作系統(tǒng)內(nèi)核層。
?針對(duì)其中幾個(gè)知識(shí)點(diǎn)做一個(gè)簡(jiǎn)要的說(shuō)明:
1、Framework 是在應(yīng)用層之下,用來(lái)支持應(yīng)用層,Framework層預(yù)制在設(shè)備上,開(kāi)發(fā)時(shí),可以隨意使用;
2、Android的運(yùn)行環(huán)境由系統(tǒng)庫(kù)(core libraries)和虛擬機(jī)組成,每個(gè)APP都運(yùn)行在一個(gè)系統(tǒng)進(jìn)程里,每個(gè)系統(tǒng)進(jìn)程都是一個(gè)虛擬機(jī),虛擬機(jī)運(yùn)行DEX文件,一般android會(huì)用dx工具把JVAV文件轉(zhuǎn)換為DEX文件;
3、Core libraries是源于Java的運(yùn)行庫(kù),在Java庫(kù)里重寫了Java的東西,組織架構(gòu);
4、HAL硬件抽象層一般是在用戶空間,規(guī)定了模塊的命名規(guī)范和動(dòng)態(tài)共享庫(kù)的存放路徑規(guī)范,抽象層不放在Linux內(nèi)核空間是因?yàn)橛脩艨臻g是可以不公開(kāi)源代碼,但Linux內(nèi)核是要公開(kāi)源代碼;
5、binder是IPC是進(jìn)程通信的一種,因?yàn)閮?nèi)核間的進(jìn)程是相互隔離的,需要通信,binder的IPC通信,拷貝只需1次,僅次于共享,該通信的框架明確穩(wěn)定,為每個(gè)APP分配UID,來(lái)識(shí)別進(jìn)程身份,更安全,防止各種APP偷窺數(shù)據(jù);
接下來(lái)是一些我自己不懂的知識(shí)點(diǎn)整理:
線程與進(jìn)程的區(qū)別?
1、每個(gè)APP運(yùn)行都會(huì)占用一個(gè)進(jìn)程,每個(gè)進(jìn)程中至少包括一個(gè)線程;
2、資源分配給進(jìn)程,同一個(gè)進(jìn)程的所有線程都會(huì)共享該進(jìn)程的所有資源;
3、真正在處理機(jī)上運(yùn)行的是線程,線程運(yùn)行中需要使用計(jì)算的內(nèi)存資源和CPU;
4、進(jìn)程間的通信方式(IPC):①管道(pipe);②信號(hào)(signal);③消息隊(duì)列(message queue);④共享內(nèi)存(shared memory);⑤信號(hào)量(semaphore);⑥套接字(socket);
5、多線程間的通信采用:①等待/通信機(jī)制(基于wait和notify方法);②Volatile(可見(jiàn)性讓線程間通信);③join方式(線程調(diào)用后按順序有序執(zhí)行);④threadLocal(單線程內(nèi)部通信)。
?
SOA理解?
1、SOA是基于AP(adaptive) AUTOSAR提出面向服務(wù)的中間層概念,這里需要說(shuō)一下AP與CP(classic)? AUTOSAR的區(qū)別:
芯片類型不同:AP:運(yùn)行在64bit的高性能處理器(MPU)、CPU等中,如瑞薩的H3,英偉達(dá)的Xavier等。除此之外,AP 也可以運(yùn)行在虛擬硬件上;CP運(yùn)行在8bit、16bit、32bit的微控制器(MCU)中,如英飛凌的TC3xx,瑞薩的RH850等;
芯片算力:AP:運(yùn)行算力高于20000DMIPs的芯片上,CP算力低于1000DMIPs;
OS:AP:是POSIX OS
POSIX OS說(shuō)明https://blog.csdn.net/weixin_33788244/article/details/86400142https://blog.csdn.net/weixin_33788244/article/details/86400142
CP:基于OSEK標(biāo)準(zhǔn)
OSEK OS 與CP Autosar OShttps://zhuanlan.zhihu.com/p/71005662https://zhuanlan.zhihu.com/p/71005662
通信方式:AP:支持以太網(wǎng)IPC、RPC等,CP:CAN、LIN、Flexray,CP也可以支持SOME/IP,但是CP中SOME/IP只不過(guò)是把Sender-Receiver的CAN通信轉(zhuǎn)換成了Client-Server的以太網(wǎng)通信,整個(gè)通信鏈路仍是靜態(tài)配置的,并不是真正的面向服務(wù)的通信,所以不會(huì)說(shuō)CP是SOA,而只說(shuō)AP是SOA;
安全等級(jí):AP可達(dá)到ASILB(但不局限于),CP可達(dá)到ASILD等級(jí);
OTA:AP可以進(jìn)行OTA,CP常用于ECU間的通信,用于靜態(tài)配置,自身無(wú)法進(jìn)行OTA,
傳輸速率:AP傳輸速率ms級(jí),CP傳輸速率達(dá)到μs級(jí);
應(yīng)用場(chǎng)景:AP應(yīng)用于對(duì)實(shí)時(shí)性有一定要求、對(duì)功能安全有一定要求,對(duì)算力要求較高的場(chǎng)景,如傳感器融合動(dòng)態(tài)實(shí)時(shí)更新,自動(dòng)駕駛中與云服務(wù)器,交融設(shè)備通信等,CP一般應(yīng)用在對(duì)實(shí)時(shí)性要求高、對(duì)功能安全要求高、對(duì)算力要求較低的場(chǎng)景中,如制動(dòng)系統(tǒng)等
總的來(lái)說(shuō),在軟件架構(gòu)中,AP是向上的接口,CP是向下的接口,兩者相互補(bǔ)充,共同作用。
2、SOA分為基礎(chǔ)中間層和專用中間層,基礎(chǔ)中間層是以原子服務(wù)封裝,并提供標(biāo)準(zhǔn)化接口,原子服務(wù)是基于功能定義的(并不是軟件或者硬件層級(jí)),原子服務(wù)是穩(wěn)定的,不易變的,原子服務(wù)要完成硬件端口、網(wǎng)絡(luò)信號(hào)還有外圍器件的抽象,原子服務(wù)可包括診斷信息(I/O、器件、信號(hào)等診斷),原子服務(wù)之間是低耦合的,例如門鎖開(kāi)服務(wù),門鎖關(guān)服務(wù),車窗關(guān)服務(wù),車窗開(kāi)服務(wù);
3、專用中間層是將原子服務(wù)進(jìn)行組合,且是獨(dú)立執(zhí)行的,如門鎖服務(wù),車窗服務(wù)等。
?
?Android runtime虛擬機(jī)?
1、虛擬機(jī)分為ART和Dalvki,其中Dalvki在Android4.4版本以下使用,ART(Android Runtime)在Android4.4版本以上使用;
2、Dalvki采用JIT(just in time Compiler)技術(shù),ART采用AOT(Ahead Of Time)技術(shù);
3、JIT就是即時(shí)編譯技術(shù),在Java開(kāi)發(fā)Android,編譯打包APK文件會(huì)經(jīng)歷以下流程:
?
?Dalvik虛擬機(jī)負(fù)責(zé)將DEX文件解碼為機(jī)器碼,即在每一次APP運(yùn)行時(shí),都需要進(jìn)行譯碼工作,使得運(yùn)行速度慢,Google是加入了JIT編譯器,編譯了運(yùn)行較多的DEX文件為本地機(jī)器碼;
4、AOT已經(jīng)徹底取代了JIT,在第一次安裝APK時(shí),字節(jié)碼會(huì)預(yù)先編譯成機(jī)器碼,將DEX文件編譯為oat文件,讓他變成本地應(yīng)用,在APP真正運(yùn)行時(shí),不再額外編譯,直接就讀取oat文件,提高運(yùn)行速度,但是這樣APK在安裝時(shí),需要更大的存儲(chǔ)空間,通常是代碼包的20%空間,安裝時(shí)間變長(zhǎng)。
結(jié)尾
多多指正,有好的資料期待你的分享。
總結(jié)
以上是生活随笔為你收集整理的Android软件架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 家庭内两家计算机怎样共享,如何设置局域网
- 下一篇: Android系统安全机制