Android系統架構(圖解)

2021-02-14 RMOS

下圖是 Android 作業系統的架構,架構包括 4 層,由上到下依次是應用程式層、應用程式框架層、核心類庫和 Linux 內核。其中,核心類庫中包含系統庫及 Android 運行環境。


圖1  Android 作業系統的架構

應用程式層

Android 裝配了一個核心應用程式集合,包括 E-mail 客戶端、SMS 短消息程序、日曆、地圖、瀏覽器、聯繫人管理程序和其他程序,所有應用程式都是用 Java 程式語言編寫的。

用戶開發的 Android 應用程式和 Android 的核心應用程式是同一層次的,它們都是基於 Android 的系統 API 構建的。

應用程式框架層

應用程式的體系結構旨在簡化組件的重用,任何應用程式都能發布它的功能且任何其他應用程式都可以使用這些功能(需要服從框架執行的安全限制),這一機制允許用戶替換組件。

開發者完全可以訪問核心應用程式所使用的 API 框架。通過提供開放的開發平臺,Android 使開發者能夠編制極其豐富和新穎的應用程式。開發者可以自由地利用設備硬體優勢訪問位置信息、運行後臺服務、設置鬧鐘、向狀態欄添加通知等。

所有的應用程式都是由一系列的服務和系統組成的,主要包括以下幾種:

系統/服務英文名稱說明視圖View這裡的視圖指的是豐富的、可擴展的視圖集合,可用於構建一個應用程式,包括列表 (Lists)、網格 (Grids)、文本框 (TextBoxes)、按鈕 (Buttons),甚至是內嵌的 Web 瀏覽器。內容管理器Content Provider內容管理器使得應用程式可以訪問另一個應用程式的數據(如聯繫人資料庫)或者共享自己的數據。資源管理器Resource Manager資源管理器提供訪問非代碼資源,如本地字符串、圖形和分層文件 (layout files)。通知管理器Notification Manager通知管理器使得所有的應用程式都能夠在狀態欄顯示通知信息。活動管理器Activity  Manager在大多數情況下,每個 Android 應用程式都運行在自己的 Linux 進程中。當應用程式的某些代碼需要運行時,這個進程就被創建並一直運行下去,直到系統認為該進程不再有用為止,然後系統將回收該進程佔用的內存以便分配給其他的應用程式。活動管理器管理應用程式生命周期,並且提供通用的導航回退功能。系統庫

Android 本地框架是由 C/C++ 實現的,包含 C/C++ 庫,以供 Android 系統的各個組件使用。這些功能通過 Android 的應用程式框架為開發者提供服務。

這裡只介紹 C/C++ 庫中的一些核心庫:

名稱說明系統C語言庫標準C語言系統庫 (libc) 的 BSD 衍生,調整為基於嵌入式 Linux 設備。媒體庫基於 PacketVideo 的 OpenCORE,這些庫支持播放和錄製許多流行的音頻和視頻格式,以及靜態圖像文件,包括 MPEG4、H.264、MP3、AAC、AMR、JPG、PNG。界面管理管理訪問顯示子系統,並且為多個應用程式提供 2D 和 3D 圖層的無縫融合。LibWebCore 新式的 Web 瀏覽器引擎,支持 Android 瀏覽器和內嵌的 Web 視圖。SGL一個內置的 2D 圖形引擎。3D 庫基於 OpenGL ES 1.0 APIs 實現,該庫可以使用硬體 3D 加速或包含高度優化的 3D 軟體光柵。FreeType位圖和矢量字體顯示渲染。SQLiteSQLite 是一個所有應用程式都可以使用的強大且輕量級的關係資料庫引擎。Android 運行環境

Android 包含一個核心庫的集合,該核心庫提供了 Java 程式語言核心庫的大多數功能。幾乎每一個 Android 應用程式都在自己的進程中運行,都擁有一個獨立的 Dalvik 虛擬機實例。

Dalvik 是 Google 公司自己設計的用於 Android 平臺的 Java 虛擬機。Dalvik 虛擬機是 Google 等廠商合作開發的 Android 行動裝置平臺的核心組成部分之一,它可以支持已轉換為 .dex (Dalvik Executable) 格式的 Java 應用程式的運行。

.dex 格式是專為 Dalvik 設計的一種壓縮格式,適合內存和處理器速度有限的系統。

Dalvik 經過優化,允許在有限的內存中同時運行多個虛擬機的實例,並且每一個 Dalvik 應用作為一個獨立的 Linux 進程執行。Dalvik 虛擬機依賴 Linux 內核提供基本功能,如線程和底層內存管理。

Linux內核

Android 基於 Linux 提供核心系統服務,例如安全、內存管理、進程管理、網絡堆棧、驅動模型。除了標準的 Linux 內核外,Android 還增加了內核的驅動程序,如Binder (IPC) 驅動、顯示驅動、輸入設備驅動、音頻系統驅動、攝像頭驅動、WiFi驅動、藍牙驅動、電源管理。

Linux 內核也作為硬體和軟體之間的抽象層,它隱藏具體硬體細節而為上層提供統一的服務。

分層的好處就是使用下層提供的服務為上層提供統一的服務,屏蔽本層及以下層的差異,當本層及以下層發生了變化時,不會影響到上層,可以說是高內聚、低耦合。

相關焦點

  • 掌握 Android 系統架構,看這一篇就夠了!| 技術頭條
    雖然Android系統非常龐大且錯綜複雜,需要具備全面的技術棧,但整體架構設計清晰。Android底層內核空間以Linux Kernel作為基石,上層用戶空間由Native系統庫、虛擬機運行環境、框架層組成,通過系統調用(Syscall)連通系統的內核空間與用戶空間。
  • Android系統架構開篇
    一、引言本文作為Android系統架構的開篇,起到提綱挈領的作用,從系統整體架構角度概要講解Android系統的核心技術點,帶領大家初探Android系統全貌以及內部運作機制。雖然Android系統非常龐大且錯綜複雜,需要具備全面的技術棧,但整體架構設計清晰。
  • 徹底理解 Android Binder 通信架構
    引言1.1 Binder架構的思考Android內核是基於Linux系統, 而Linux現存多種進程間IPC方式:管道, 消息隊列, 共享內存, 套接字, 信號量, 信號. 為什麼Android非要用Binder來進行進程間通信呢.從我個人的理解角度, 曾嘗試著在知乎回答同樣一個問題 為什麼Android要採用Binder作為IPC機制?.
  • Android系統啟動流程
    前言今天說《Android體系架構》第一篇內容,關於Android系統啟動的過程。圖解之前我們說過Android系統的架構圖(圖片來自參考連結),這裡再貼一下:而我們的Android系統啟動的過程就是架構圖中從下往上運行加載的過程,這裡有一張關於Android系統啟動過程的總結圖(圖片來自參考連結gityuan.com),大家可以先看看:
  • Android系統架構-[Android取經之路]
    本文主要介紹Android的系統架構,Android使用linux內核(Marco kernel),但是Android的架構又與
  • 聊聊Android系統架構
    今天說點基礎內容——系統架構。
  • 圖解10大CNN網絡架構,通俗易懂!
    這些圖解展示了整個模型的精華,無需去逐個瀏覽那些 Softmax 層。除了這些示意圖,作者還提供了一些注釋,闡述了它們是如何不斷演變的——卷積層從 5 到 50 個、從普通的卷積層到卷積模塊、從 2~3 tower 到 32 tower 、卷積核從 7⨉7 到 5⨉5 。
  • 解密Android通信安全機制
    眾所周知,Android 系統是一個開源的智能設備系統,因為架構開放、移動計算和網絡互聯能力強大的 原因,很容易存在被攻擊的安全隱患。為了確保信息安全,Android 系統本身需要打造一個安全的架構規範 機制,並讓這個機制貫穿整個系統架構的內核、虛擬機、應用框架層以及應用層等各個環節中。只有這樣, 才能保證在 Android 平臺上保護用戶數據、應用程式、設備和網絡信息的安全性。本文將詳細講解 Android 系統安全機制的基本知識,為讀者學習 Android 後面的知識打下基礎。
  • Android系統啟動之init進程(二)-「Android取經之路」
    上一節主要講了Init進程的整體架構,以及Kernel啟動的部分內容。
  • 通用型系統架構設計(多圖)
    系統架構圖:系統採用四層架構設計一、展現層Web前端基於HTML/HTML5
  • 圖解 Android ImageView 的 scaleType 屬性
    ><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorAccent"&
  • 關於Android的.so文件你所需要知道的
    早期的Android系統幾乎只支持ARMv5的CPU架構,你知道現在它支持多少種嗎?7種!
  • 在VMware中安裝android-x86-9.0-r2
    android x86(https://www.android-x86.org/) 是一個自由而開源的項目,將谷歌製作的安卓系統從ARM架構移植到x86
  • 5G標準中文版(R16 23.742) 基於服務架構(SBA)的增強研究
    今天發布的是R16 23.742 中文版,英文原版是3GPP在2018年12月發布的,5G哥近期完成翻譯
  • Android 架構之 Jetpack ViewModel 解讀
    ><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http
  • Android用戶態啟動流程分析
    第一步,掛載文件系統。在 zygote.rc 中可以發現,只有 app_process64 進程指定了 --start-system-server,所以 system_server 只執行一個架構即可。
  • 在 Android 模擬器上運行 ARM 應用
    新的系統映像在執行 ARM 二進位文件方面取得了顯著的性能提升。此前,依賴 ARM 庫且無法構建 x86 版本應用的開發者只能使用完整的 ARM 模擬系統映像 (其速度遠低於在 x86 設備上運行 x86 系統映像) 或者實體機。Android 11 系統映像能夠在不影響整個系統的前提下,直接將 ARM 指令轉換成 x86 指令。
  • 探討Android6.0及以上系統APP保活實現
    然後Android系統會根據當前系統資源和進程oom_adj值來回收相應的進程,前臺進程一般不會被回收,空進程最容易被回收,這種管理規則就是"傳說中"的Low Memory Killer。為了更直觀的了解這套規則,我畫了個表:註:優先級1表示最高級,普通進程的oom_adj>=0,系統進程oom_adj<0,系統會根據相應的內存閥值對符合某段oom_adj值的進程進行回收。另外,oom_adj值也會隨著佔用物理內存越大而增大,系統進程絕對不會被系統殺死。1.
  • Android系統列印方案分析
    /training/printing/index.html列印功能作為一個feature,在一些定製的Android系統(包括Hikey960)上包括Android TV系統(包括小米盒子和Nvidia Shield),是被裁減掉的。
  • Android應用程式(APK)的編譯打包過程
    現在很多人想對Android工程的編譯和打包進行自動化,比如建立每日構建系統、自動生成發布文件等等。首先,我們假定你的系統(什麼系統都行,不限於Linux還是Windows系統,當然,我在這裡默認使用Linux系統來舉例子,但在 Windows中幾乎沒有什麼差別)已經安裝了JDK和Android SDK。