Android 筆記之 Android 系統架構

来源:https://www.cnblogs.com/huangzenglie/archive/2018/03/21/8619571.html
-Advertisement-
Play Games

一、Android 系統架構 Android 系統架構分為四層:Linux 內核層、系統庫層、應用框架層、應用層 1. Linux 內核層(Linux Kernel) 這一層提供的功能有:安全性、記憶體管理、進程管理、網路協議棧、驅動程式模型等 2. 系統庫層(Libraries) 這一層包括兩方面的 ...


一、Android 系統架構

Android 系統架構分為四層:Linux 內核層、系統庫層、應用框架層、應用層


圖1 Android 系統架構圖(圖片來源於網路)

1. Linux 內核層(Linux Kernel)

  • 這一層提供的功能有:安全性、記憶體管理、進程管理、網路協議棧、驅動程式模型等

2. 系統庫層(Libraries)

  • 這一層包括兩方面的內容: C/C++ 語言編寫的程式庫、Android 運行時
  • C/C++ 語言編寫的程式庫
    • SQLite : 提供資料庫支持
    • OpenGL|ES : (Open Graphic Libraries for Embedded Systems)提供 3D 繪圖支持
    • Free Type : 字體渲染引擎
    • Webkit : 提供瀏覽器內核支持
    • SGL : (Skia Graphics Library)2D 圖形渲染引擎,Skia 是美國的一家公司,後來被 Google 收購
    • SSL : (Secure Sockets Layer 安全套接層)是一種安全協議,為互聯網通信,提供安全及數據完整性保障
    • libc : (Bionic libc)C標準庫,由 Google 開發,採用 BSD 授權條款,應用於嵌入式系統上
  • Android 運行時
    • 核心庫 : 包括 Java API 和 Android API
    • Dalvik 虛擬機 : 在有限的記憶體中,允許每一個 Android 的應用程式都擁有自己的 Dalvik 虛擬機實例,並且運行於獨立的進程當中(Android 5.0 系統之後改為 ART 虛擬機),獨立的進程可以防止當虛擬機崩潰的時候,所有程式都被關閉

3. 應用框架層(Application Framework)

  • 這一層主要是提供開發應用程式所需的框架,使程式員可以進行快速開發

4. 應用層(Applications)

  • 安裝在手機上的應用程式都屬於這一層

5. 其他

  • 開發人員
    • 如果從事 Android 應用開發,那麼應該研究 Android 的應用層和應用框架層
    • 如果從事 Android 系統開發,那麼應該研究 Android 的系統庫層
    • 如果從事 Android 驅動開發,那麼應該研究 Android 的 Linux 內核層
  • Dalvik 虛擬機 與 ART(Android Runtime) 虛擬機
    • Android 5.0 系統之後 ART 虛擬機取代 Dalvik 虛擬機,主要是為了提升 Android 系統的流暢性
    • 在 Dalvik 虛擬機下,應用程式每次運行的時候,位元組碼都需要通過JIT(Just-in-Time 即時編譯)轉換為機器碼,這也是為什麼每次開啟程式的時候都會很慢的原因
    • ART 虛擬機,在應用程式安裝的時候,就將位元組碼預先編譯成了機器碼,在應用程式運行的時候無需再次編譯,使用的技術是 AOT(Ahead-of-Time 預編譯)
    • ART 虛擬機也有缺點,預編譯會占用更大的記憶體空間,而且應用程式的安裝時間也會延長
  • 介面
    • 這裡採用知乎上某位大牛類似的回答來說明一下
    • 比如說,小 A 通過某種技術,在網路上搜索了很多高質量的美女圖片,然後發佈在他的微博上,恰好小 B 也是這方面的愛好者,那麼小 A 的微博就是介面,小 B 只需關註小 A 的微博便可以查看大量的美女圖片,無需關心小 A 是通過什麼技術來獲得這些圖片的
  • HAL(Hardware Abstraction Layer 硬體抽象層)
    • 如圖 2 所示,這是比較新的 Android 系統架構圖,圖中還有一層叫 HAL(Hardware Abstraction Layer 硬體抽象層)
    • HAL 的由來
      • Linux 內核的發佈遵循 GPL 協議,GPL 協議規定:所有對源碼的修改都必須開源
      • 如果 Google 在 Linux 內核中編寫驅動程式模塊,那麼修改的源碼就必須全部公佈出來,但是這樣一來會損害硬體廠商的利益,畢竟公開源碼的話,硬體的實現細節和參數也就暴露了。為瞭解決這個問題,Google 提出了 HAL,廠商可以在不公開源碼的情況下,將硬體的相關實現以庫(.so)的形式放在 HAL 中,當然,硬體驅動不可能完全脫離 Linux 內核,所以 Google 也在Linux 內核中做了相應的修改,基於 GPL 協議,這部分修改的源碼要公佈出來,但是因為 HAL 不屬於對 Linux 內核的修改,所以這裡的源碼就沒有開源的必要了
    • HAL 的功能
      • HAL 提供了將設備硬體的功能暴露給 Application Framework 層的標準介面
      • HAL 由許多庫模塊組成,每個庫模塊都實現了特定類型的硬體組件介面,通俗地講就是通過庫模塊就可以調用相應的硬體組件,比如:藍牙模塊在 HAL 中有特定的庫模塊,當 Application Framework 層的 API 訪問藍牙設備時,Android 系統會載入相應的庫模塊以供 API 使用
      • 這裡有必要理清一下,庫模塊是提供給 API 的介面,而 API 是提供給程式員的介面

圖2 Android 系統架構圖(圖片來源於網路)
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...