Android平臺架構的介紹和源碼下載

本篇文章爲Android源碼學習的第一章,主要講述Android平臺架構的分層,以及如何下載Android源碼。

Android平臺架構介紹

Android 是一種基於 Linux 的開放源代碼軟件棧,爲廣泛的設備和機型而創建。下圖所示爲 Android 平臺的主要組件。

從上圖可以看出,Android系統大體可以分爲6個層次,從下往上依次是:

  1. Linux內核層:Android 平臺的基礎是 Linux 內核。例如,Android Runtime (ART) 依靠 Linux 內核來執行底層功能,例如線程和低層內存管理。使用 Linux 內核可讓 Android 利用主要安全功能,並且允許設備製造商爲著名的內核開發硬件驅動程序。
  2. 硬件抽象層 (HAL):硬件抽象層 (HAL) 提供標準界面,向更高級別的 Java API 框架顯示設備硬件功能。HAL 包含多個庫模塊,其中每個模塊都爲特定類型的硬件組件實現一個界面,例如相機或藍牙模塊。當框架 API 要求訪問設備硬件時,Android 系統將爲該硬件組件加載庫模塊。
  3. Android Runtime:對於運行 Android 5.0(API 級別 21)或更高版本的設備,每個應用都在其自己的進程中運行,並且有其自己的 Android Runtime (ART) 實例。ART 編寫爲通過執行 DEX 文件在低內存設備上運行多個虛擬機,DEX 文件是一種專爲 Android 設計的字節碼格式,經過優化,使用的內存很少。編譯工具鏈(例如 Jack)將 Java 源代碼編譯爲 DEX 字節碼,使其可在 Android 平臺上運行。

    ART 的部分主要功能包括:

    • 預先 (AOT) 和即時 (JIT) 編譯
    • 優化的垃圾回收 (GC)
    • 更好的調試支持,包括專用採樣分析器、詳細的診斷異常和崩潰報告,並且能夠設置監視點以監控特定字段

在 Android 版本 5.0(API 級別 21)之前,Dalvik 是 Android Runtime。如果您的應用在 ART 上運行效果很好,那麼它應該也可在 Dalvik 上運行,但反過來不一定。
Android 還包含一套核心運行時庫,可提供 Java API 框架使用的 Java 編程語言大部分功能,包括一些 Java 8 語言功能。

  1. 原生 C/C++ 庫:許多核心 Android 系統組件和服務(例如 ART 和 HAL)構建自原生代碼,需要以 C 和 C++ 編寫的原生庫。Android 平臺提供 Java 框架 API 以嚮應用顯示其中部分原生庫的功能。例如,您可以通過 Android 框架的 Java OpenGL API 訪問 OpenGL ES,以支持在應用中繪製和操作 2D 和 3D 圖形。

如果開發的是需要 C 或 C++ 代碼的應用,可以使用 Android NDK 直接從原生代碼訪問某些原生平臺庫。

  1. Java API 框架:您可通過以 Java 語言編寫的 API 使用 Android OS 的整個功能集。這些 API 形成創建 Android 應用所需的構建塊,它們可簡化核心模塊化系統組件和服務的重複使用,包括以下組件和服務:

    • 豐富、可擴展的視圖系統,可用以構建應用的 UI,包括列表、網格、文本框、按鈕甚至可嵌入的網絡瀏覽器
    • 資源管理器,用於訪問非代碼資源,例如本地化的字符串、圖形和佈局文件
    • 通知管理器,可讓所有應用在狀態欄中顯示自定義提醒
    • Activity 管理器,用於管理應用的生命週期,提供常見的導航返回棧
    • 內容提供程序,可讓應用訪問其他應用(例如“聯繫人”應用)中的數據或者共享其自己的數據

開發者可以完全訪問 Android 系統應用使用的框架 API。

  1. 系統應用:Android 隨附一套用於電子郵件、短信、日曆、互聯網瀏覽和聯繫人等的核心應用。平臺隨附的應用與用戶可以選擇安裝的應用一樣,沒有特殊狀態。因此第三方應用可成爲用戶的默認網絡瀏覽器、短信 Messenger 甚至默認鍵盤(有一些例外,例如系統的“設置”應用)。

系統應用可用作用戶的應用,以及提供開發者可從其自己的應用訪問的主要功能。例如,如果您的應用要發短信,您無需自己構建該功能,可以改爲調用已安裝的短信應用向您指定的接收者發送消息。

從上圖可以將Android平臺劃分爲兩層,一層是由C/C++編寫的,可以稱爲Native層。另一層是由Java編寫的,可以稱爲Framework層。這兩層之間的聯繫是通過JNI進行連接。

Android源碼下載

瞭解了Android平臺架構之後,作爲開發者學習源碼,需要下載其源代碼。在下載源代碼之前,需要了解AOSP這個概念,AOSP是Android Open Source Project(Androi開源項目)的縮寫,如果可以翻牆的話,可以按照AOSP官網 https://source.android.com/se... 這個地址上的步驟進行源碼下載,如果不具備翻牆的條件,可以在清華大學開源軟件鏡像站 https://mirrors.tuna.tsinghua... 進行下載。步驟如下:

安裝 Repo

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
## 如果上述 URL 不可訪問,可以用下面的:
## curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo

建立工作目錄

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

初始化倉庫

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
## 如果提示無法連接到 gerrit.googlesource.com,可以編輯 ~/bin/repo,把 REPO_URL 一行替換成下面的:
## REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
## 如果需要某個特定的Android版本,則使用repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-7.1.0_r1

同步源碼樹(以後只需執行這條命令來同步)

repo sync

如果中間有網絡斷開的情況,則只需要執行repo sync繼續同步即可。直到下載完Android源碼。

相關鏈接

Android官方文檔
AOSP官網
清華大學AOSP鏡像地址
中國科學技術大學開源軟件鏡像服務

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