1. 程式人生 > >Android系統層次結構是怎樣的?各個層之間關係是什麼?

Android系統層次結構是怎樣的?各個層之間關係是什麼?

Android = Linux Kernel + C/C++ Runtime Framework + Davik Virtual Machine + Java Runtime Framework + Java SDK。下面我們再以APK的開發、編譯、安裝和執行來說明這些層次之間的關係。

首先,我們是在PC上使用Android SDK提供的介面來開發APK,用的Java語言。開發完成之後,使用Java編譯器將原始碼編譯成Java位元組碼,也就是帶.class字尾的檔案。接下來這些.class再被Android SDK提供的dx工具轉化成Dex位元組碼,最後打包在APK裡面的classes.dex檔案中。

接著,APK檔案在手機上安裝時,Java Runtime Framework裡面的PacakgeManagerService就會對該APK檔案進行解析,並且通過Socket IPC通知C/C++ Runtime Framework裡面的installd守護程序對APK裡面的classes.dex檔案進行優化,得到另外一個classes.odex檔案。

APK安裝完成之後,就可以運行了。我們以APK從桌面Launcher啟動的過程為例說明它的執行過程。當我們從Launcher點選應用圖示的時候,Launcher向Java Runtime Framework裡面的ActivityManagerService傳送一個啟動應用的請求。ActivityManagerService又通過Socket IPC向C/C++ Runtime Framework裡面的zygote守護程序請求建立一個應用程式程序。這個應用程式程序包含有一個Dalvik虛擬機器。應用程式程序建立並且啟動起來之後,就會通過它裡面的Dalvik虛擬機器載入前面提到的classes.odex檔案。這樣我們的應用程式就執行起來了。

APK的執行過程是依賴於Dalvik虛擬機器的。我們可以將它看成是將classes.odex裡面的位元組碼解釋成本地機器指令執行。例如,我們在APK裡面通過FileInputStream或者FileOutputStream開啟一個檔案的時候,Dalvik虛擬機器就會找到C/C++ Runtime Framework裡面的C庫bionic提供的系統介面open,並且通過它來開啟指定的檔案。

我們再以應用程式介面的繪製和渲染過程來詳細說明各個層次的關係。首先是應用程式通過SDK提供的UI類向Java Runtime Framework裡面的WindowManagerService申請分配一塊圖形緩衝區。WindowManagerService又是通過Binder IPC向C/C++ Runtime Framework裡面的SurfaceFlinger申請分配圖形緩衝區的。圖形緩衝區實際上不是由SurfaceFlinger分配的,而是由顯示系統分配的,可能在視訊記憶體裡面,也有可能在GPU裡面。這時候SurfaceFlinger就要通過HAL層次Gralloc模組向Kernel裡面的顯示卡或者GPU驅動申請分配真正的圖形緩衝區。HAL層可以看作是執行在C/C++ Runtime Framework中。

應用程式得通過上述方式得到繪製UI所需要的圖形緩衝區之後,就開始繪製自己的UI了。假設應用程式使用的是硬體繪製方式,也就是通過C/C++ Runtime Framework裡面的OpenGL來繪製。這時候SDK的UI類的與繪製相關的函式呼叫通過Dalvik虛擬機器都轉化成了C/C++ Runtime Framework裡面的OpenGL操作。

應用程式UI繪製完成之後,結果就儲存上述的圖形緩衝區中。這時候如果要將該圖形緩衝區渲染到手機螢幕上,那麼還需要通過Binder IPC將該圖形緩衝區傳送給C/C++ Runtime Framework裡面的SurfaceFlinger。SurfaceFlinger通過使用OpenGL或者HWComposer將所有請求要渲染到手機螢幕上的圖形緩衝區合成之後,得到一個主圖形緩衝區。最後這個圖形緩衝區又會被SurfaceFlinger提交給Kernel的顯示卡驅動,並且在手機螢幕上進行顯示。

上面描述的就是Android系統各個層次的呼叫關係。總的來說,應用程式執行在Dalvik虛擬機器上,並且通過SDK使用Java Runtime Framework裡面的服務,而Java Runtime Framework裡面的服務又通過C/C++ Runtime Framework裡面的服務來實現自己的功能,最後C/C++ Runtime Framework裡面的服務又會在需要的時候請求Kernel裡面的模組或者驅動來為自己服務。

相關推薦

Android系統層次結構是怎樣的?各個之間關係是什麼?

Android = Linux Kernel + C/C++ Runtime Framework + Davik Virtual Machine + Java Runtime Framework + Java SDK。下面我們再以APK的開發、編譯、安裝和執行來說明這些層

Andorid基礎 Android系統層次框架結構

3) 系統執行庫  a)程式庫     Android包含一些C/C++庫,這些庫能被Android系統中不同的元件使用。它們通過Android應用程式框架為開發者提供服務。     以下是一些核心庫:     主要包括基本的C庫、以及多媒體庫以支援各種多媒體格式、點陣圖和向量字型、2D和3D圖形引擎、瀏覽器

Android 系統版本和API level的關係

Android 系統版本和API level的關係表 wiki: https://zh.wikipedia.org/wiki/Android%E6%AD%B7%E5%8F%B2%E7%89%88%E6%9C%AC google doc: https://developer.android.com/abou

Android系統目錄結構

app:存放系統應用,預設不能刪除 bin:Android中可執行的linux指令檔案 etc:host:主機名和ip地址的對映 fonts:Android中自帶的字型 framework:存放谷歌提供的java api lib:核心功能的類庫,C/C++檔案 media/audio:存放Android的音效

計算機系統層次結構

我們從計算機語言角度出發,把計算機系統劃分成多級層次結構,每一層以一種語言為特徵,如圖所示: L1:微程式機器級  這一級的機器語言是微指令集,使用者是計算機硬體的設計人員,編寫的微程式可以直接由計算機硬體/韌體解釋來實現 L2:傳統機器級 這一級的機器語言就是傳統的機器

Android系統版本與API等級對應關係

API Level is an integer value that uniquely identifies the framework API revision offered by a version of the Android platform. 轉

解析Android mdpi hdpi xhdpi xxhdpi xxxhdpi 之間關係

解析度對應DPIldpi  QVGA (240×320) mdpi  HVGA (320×480)hdpi  WVGA (480×800),FWVGA (480×854)xhdpi  720P(1280*720)xxhdpi 1080p(1920*1080 )xxxhdpi 4K(3840×2160)

Android系統體系結構

安卓體系框架 安卓四層體系架構思維導圖 應用程式層 平常大家所使用的Android應用程式都是在這一層上的,提供一些核心應用程式以及讓安卓開發者可以用java開發自己的安卓應用。 應用程式框架層 這層為開發人員提供了可以完全訪問核心應用程式

android檔案系統system-ramdisk-userdata三者之間關係

android原始碼編譯後得到system.img,ramdisk.img,userdata.img映像檔案。 其中, ramdisk.img是emulator的檔案系統, system.img包括了主要的包、庫等檔案。 userdata.img包括了一些使用者資料。 em

Android系統體系結構詳解

開門見山,先上圖 很明顯四層:接下來一一講解: Java應用程式層: Android會同一系列核心應用程式包一起釋出,該應用程式包包括客戶端,SMS短訊息程式,日曆,地圖,瀏覽器,聯絡人管理程式等。所有的應用程式都是使用JAVA語言編寫的。

Android系統硬體抽象原理與實現之WIFI

http://m.blog.csdn.net/linux_zkf/article/details/7492720 整個WIFIHAL實現都很簡單,都是對wpa_supplicant的操作和使用,如果需要自己實現 WIFI HAL可以參考wifi.c來實現wifi.h中所定義的

資料庫管理系統層次結構

根據處理物件的不同,資料庫管理系統的層次結構由高階到低階依次為應用層、語言翻譯處理層、資料存取層、資料儲存層、作業系統。   (1)應用層。應用層是DBMS與終端使用者和應用程式的介面層,處理的物件是各種各樣的資料庫應用。   (2)語言翻譯處理層。語言翻譯處理層是對資料庫語言的各類語句進行語法分析、檢視

易學筆記-系統分析師考試-第6章 系統配置與效能評價/6.1 計算機層次結構/6.1.3 計算機系統結構的分類

儲存程式結構 馮諾依曼結構:1946年6月提出的 特點 計算機的組成是由: 控制器 運算器 儲存器 輸入裝置 輸出裝置

易學筆記-系統分析師考試-第6章 系統配置與效能評價/6.1 計算機層次結構/6.1.2 計算機軟體分類

軟體:泛指各類程式和檔案 系統軟體 概念:用於實現計算機系統的管理、排程、監視和服務 分類 作業系統:是使用者和計算機之間的介面,是系統軟體的核心 語言處理程式 概念:將使用者編寫的源程式轉換成機器能識別的語言 組成 編譯程式:將高階語言編寫的程式轉換為目

易學筆記-系統分析師考試-第6章 系統配置與效能評價/6.1 計算機層次結構/6.1.1 計算機硬體的組成

計算機效能評價 評價目的 選擇:從眾多的系統方案中選擇一套最適合需要的方案,重點考慮價格、價效比等因素 改進:對已有系統的效能缺陷和瓶頸進行改進優化 設計:對未來的系統進行效能預測,在效能成本方面實現最佳設計或配置 影響效能的

深入理解計算機系統 第六章 儲存器層次結構

  為什麼要學習儲存器的層次結構? 如果我們理解了系統是如何將資料在儲存器層次結構中上上下下移動的,那麼我們就可以編寫自己的應用程式,使得它們的資料項儲存在層次結構較高的地方,在那裡 CPU 能更快地訪問到它們。   區域性性原理 計算機程式傾向於引用臨近於其他最近引用過的資料項

iOS crash追蹤(二)各個地址之間關係

先來看一個蘋果的官方crash日誌: Incident Identifier: 98A2A094-C241-4B57-9657-B08414AD0791 CrashReporter Key: 204677b9cf9adcc44e75f93963265d8edc78315

QT中圖表類QChart系列之(1)-基本用法,畫折線圖、各個之間關係

首先要注意3點: (1)在.pro檔案中新增:QT       += charts。 (2)用到QChart的檔案中新增:QT_CHARTS_USE_NAMESPACE,或者:using namespace QtCharts; 在ui介面中拖入一個graphicsVi

Android】【系統Android檔案目錄結構

system/app:存放系統軟體 system/data:存放系統軟體的資料 data/app:存放使用者安裝的軟體 data/data:存放使用者軟體的資料 storage/emulated/0:儲存卡 storage/sdcard:虛擬路徑,快捷方式,實際

Android系統架構圖及各介紹

 Android的系統架構採用了分層架構的思想,如圖1所示。從上層到底層共包括四層,分別是應用程式程式層、應用框架層、系統庫和Android執行時和Linux核心。 圖1:Android系統架構圖       每層功能簡要介紹如下:       一 應用程式層