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