Android進階加密-第1章-Android系統架構-讀書筆記

第 1 章 Android 系統架構

1.1 Android 系統架構

  Android 系統架構分爲五層,從上到下依次是應用層、應用框架層、系統運行庫層、硬件抽象層和 Linux 內核層。

  1. 應用層(System Apps)
      系統內置的應用程序以及非系統級的應用程序都屬於應用層,負責與用戶進行直接交互,通常都是用 Java 進行開發的。

  2. 應用框架層(Java API Framework)
      應用框架層爲開發人員提供了開發應用程序所需要的 API,我們平常開發應用程序都是調用這一層所提供的 API,當然也包括系統應用。這一層是由 Java 代碼編寫的,可以稱爲 Java Framework。

名稱功能描述
Activity Manager(活動管理器) 管理各個應用程序生命週期,以及常用的導航回退功能
Location Manager(位置管理器) 提供地理位置及定位功能服務
Package Manager(包管理器) 管理所有安裝在 Android 系統中的應用程序
Notification Manager(通知管理器) 使得應用程序可以在狀態欄中顯示自定義的提示信息
Resource Manager(資源管理器) 提供應用程序使用的各種非代碼資源,如本地化字符串、圖片、佈局文件、顏色文件等
Telephony Manager(電話管理器) 管理所有的移動設備功能
Window Manager(窗口管理器) 管理所有開啓的窗口程序
Content Provider(內容提供者) 使得不同應用程序之間可以共享數據
View System(視圖系統) 構建應用程序的基本組件
  1. 系統運行庫層(Native)
      系統運行庫層分爲兩部分,分別是 C/C+ + 程序庫和 Android 運行時庫。
    1) C/C+ + 程序庫
      C/C+ + 程序庫能被 Android 系統中的不同組件所使用,並通過應用程序框架爲開發者提供服務。

主要的 C/C+ + 程序表

名稱功能描述
OpenGL ES 3D 繪圖函數庫
Libc 從 BSD 繼承來的標準 C 系統函數庫,專門爲基於嵌入式 Linux 的設備定製
Media Framework 多媒體庫,支持多種常用的音頻、視頻格式錄製和回放
SQLite 輕型的關係型數據庫引擎
SGL 底層的 2D 圖形渲染引擎
SSL 安全套接層,是一種爲網絡通信提供安全及數據完整性的安全協議
FreeType 可移植的字體引擎,它提供統一的接口來訪問多種字體格式文件

2)Android 運行時庫
  運行時庫又分爲核心庫和 ART (Android 5.0 系統之後,Dalvik 虛擬機被 ART 取代)。核心庫提供了 Java 語言核心庫的大多數功能,這樣開發者可以使用 Java 語言來編寫 Android 應用。與 JVM 相比,Dalvik 虛擬機(DVM)是專門爲移動設備定製的,允許在有限的內存中同時運行多個虛擬機的實例,並且每一個 Dalvik 應用作爲一個獨立的 Linux 進程執行。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉。而替代 DVM 的 ART 的機制與 DVM 不同,DVM 中的應用每次運行時,自己嗎都需要通過即時編譯器(Just In Time,JIT)轉換爲機器碼,這會使得應用的運行效率降低。而在 ART 中,系統在安裝應用時會進行一次預編譯(Android Of Time,AOT),將字節碼預先編譯成機器碼並存儲在本地,這樣應用每次運行時就不需要執行編譯了,運行效率也大大提高。

  1. 硬件抽象層(HAL)
      硬件抽象層是位於操作系統內核與硬件電路之間的接口層,其目的在於將硬件抽象化,爲了保護硬件廠商的知識產權,它隱藏了特定平臺的硬件接口細節,爲操作系統提供虛擬硬件平臺,使其具有硬件無慣性,可在多種平臺上進行移植。從軟硬件測試的角度來看,軟硬件的測試工作都可分別基於硬件抽象層來完成,使得軟硬件測試工作的並行進行稱爲可能。通俗來講,就是將控制硬件的動作放在硬件抽象層中。

  2. Linux 內核層(Linux Kernal)
      Android 的核心繫統服務基於 Linux 內核,在此基礎上添加了部分 Android 專用的驅動。系統的安全性、內存管理、進程管理、網絡協議棧和驅動模型等都依賴於該內核。

1.2 Android 系統源碼目錄

  可以訪問 http://androidxref.com 來閱讀系統源碼。推薦使用百度網盤地址 http://pan.baidu.com/s/lngsZa 進行下載。

1.2.1 整體結構

  如果是編譯後的源碼目錄,會多一個 out 文件夾,用來存儲編譯產生的文件。

Android 8.0.0 的系統根目錄結構說明

Android 源碼根目錄描述
art 全新的 ART 運行環境
bionic 系統 C 庫
bootable 啓動引導相關代碼
build 存放系統編譯規則及 generic 等基礎開發包配置
cts Android 兼容性測試套件標準
dalvik Dalvik 虛擬機
developers 開發者目錄
development 與應用程序開發相關
device 設備相關配置
docs 參考文檔目錄
external 開源模組相關文件
frameworks 應用程序框架,Android 系統核心部分,由 Java 和 C++ 編寫
hardware 主要是硬件抽象層的代碼
libcore 核心庫相關文件
libnativehelper 動態庫,實現 JNI 庫的基礎
out 編譯完成後代碼在此目錄輸出
pdk Plug Development Kit 的縮寫,本地開發套件
platform_testing 平臺測試
prebuilts X86 和 ARM 架構下預編譯的一些資源
sdk SDK 和模擬器
packages 應用程序包
system 底層文件系統庫、應用和組件
toolchain 工具鏈文件
tools 工具文件
makefile 全局 Makefile 文件,用來定義編譯規則

1.2.2 應用層部分

  應用層位於整個 Android 系統的最上層,開發者開發的應用程序以及系統內置的應用程序都在應用層。源碼根目錄中的 packages 目錄對應着系統應用層。

  packages 目錄結構

packages 目錄描述
apps 核心應用程序
experimental 第三方應用程序
inputmethods 輸入法目錄
providers 內容提供者目錄
screensavers 屏幕保護
services 通信服務
wallpapers 牆紙

1.2.3 應用框架部分

  應用框架層是系統的核心部分,一方面向上提供接口給應用層調用,另一方面向下與 C/C++ 程序庫及硬件抽象層等進行銜接。應用框架層的主要實現代碼在 framework/base 和 frameworks/av 目錄下。

  frameworks/base 目錄

frameworks/base 目錄描述frameworks/base 目錄描述
api 定義 API cmds 重要命令:am、app_proce 等
core 核心庫 data 字體和聲音等數據文件
docs 文檔 graphics 與圖形圖像相關
include 頭文件 keystore 與數據簽名證書相關
libs location 地理位置相關庫
media 多媒體相關庫 native 本地庫
nfc-extras 與 NFC 相關 obex 藍牙傳輸
opengl 2D/3D 圖形 API packages 設置、TTS、VPN 程序
sax XML 解析器 services 系統服務
telephony 電話通信管理 test-runner 測試工具相關
tests 與測試相關 tools 工具
vr 與 VR 相關 wifi Wi-Fi 無限網絡

1.2.4 C/C++ 程序庫部分

  系統運行庫層(Native)中的 C/C 程序庫的類型繁多,功能強大,C/C 程序庫並不完全在一個目錄中。

  C/C++ 程序庫所在的目錄位置

目錄位置描述
bionic Google 開發的系統 C 庫,以 BSD 許可形式開源
frameworks/av/media 系統媒體庫
frameworks/native/opengl 第三方圖形渲染庫
frameworks/native/services/surfaceflinger 圖形顯示庫,主要負責圖形的渲染、疊加和繪製等功能
external/sqlite 輕量級關係型數據庫 SQLite 的 C++ 實現

  Android 運行時庫的代碼在 art/目錄中,硬件抽象層的代碼在 hardware/目錄中,這是手機廠商改動最大的部分,根據手機終端鎖採用的硬件平臺不同會有不同的實現。

1.3 源碼閱讀

  系統源碼的閱讀有很多種方式,總的來說分爲兩種:一種是在線閱讀;另一種是下載源碼到本地用軟件工具閱讀。

1.3.1 在線閱讀

  Android 在西安閱讀源碼的網站有很多,比如 http://www.grepcode.com、http://androidxref.com、http://www.androidos.cn 等,推薦使用 http://androidxref.com 進行在線閱讀,網站提供了 Android 1.6 到 Android 8.0.0 的源碼。

1.3.2 使用 Source Insight

  本地閱讀源碼可以採用 Android Studio、Eclipse、Sublime 和 Source Insight 等軟件,這裏推薦使用 Source Insight。

1.4 本章小結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章