Android 系統開發作什麼?

題外話

18 年我從 Android 應用開發轉 Framework 層開發了,今後開啓了 996 幸福生活,博客技術文更新基本停滯了,被工做佔據了過多的精力,實在沒時間像之前同樣擬稿、寫做,實踐、反覆修改去精心準備文章,另外也不知道該寫什麼了,不少經驗心得都會涉及到項目自己,公司內部卻是寫了很多總結文檔,然而工做的事不便公開分享出來。我是一個在意別人的見解,以前被不少人罵「江郎才盡」,其實我是很難受的。web

在轉 Framework 其實一開始我是很不適應,適應新環境也並無想象當中那麼容易,所以變得更不自信了,對本身的定位更加模糊,每半年換一個模塊,從一開始作性能開發、轉系統應用開發、又轉通信開發,剛有點感受,由於工做調整,被安排作其餘,技術沒沉澱,總感受虛的很。數據庫

Android 系統架構

官圖壓陣

這是來自官方 Android 系統架構,從上往下依次爲應用框架(Application Framework)、Binder IPC proxies、系統服務(Android System Services)、硬件抽象層 (HAL)、Linux 內核。編程

Application Framework

從舊版架構圖能夠看出 Application Framework 大概有:瀏覽器

名稱 簡介
Activity Manager 用來管理應用程序生命週期並提供經常使用的導航回退功能。
Window Manager 提供一些咱們訪問手機屏幕的方法,如屏幕的透明度、亮度、背景。
Content Providers 使得應用程序能夠訪問另外一個應用程序的數據(如聯繫人數據庫), 或者共享它們本身的數據。
View System 能夠用來構建應用程序, 它包括列表(Lists),網格(Grids),文本框(Text boxes),按鈕(Buttons), 甚至可嵌入的 web 瀏覽器。
Notification Manager 使得應用程序能夠在狀態欄中顯示自定義的提示信息。
Package Manager 提供對系統的安裝包的訪問,包括安裝、卸載應用,查詢 permission 相關信息,查詢 Application 相關信息等。
Telephony Manager 主要提供了一系列用於訪問與手機通信相關的狀態和信息的方法,查詢電信網絡狀態信息,SIM 卡的信息等。
Resource Manager 提供非代碼資源的訪問,如本地字符串,圖形,和佈局文件(Layout files )。
Location Manager 提供設備的地址位置的獲取方式,很顯然,GPS 導航確定能用到位置服務。
XMPP 可擴展通信和表示協議,前身爲 Jabber,提供即時通訊服務。例如推送功能,Google Talk。

Binder IPC proxies

Binder 做爲 Android 系統提供的一種通訊方式,
Binder IPC 層:做爲「系統服務層」與「應用程序框架層」的 IPC 橋樑,互相傳遞接口調用的數據,實現跨進層的通信。網絡

Android System Services

Android System Services 是專一於特定功能的模塊化組件,如進行窗口相關的操做會用到窗口管理服務WindowManager,進行電源相關的操做會用到電源管理服務PowerManager,還有不少其餘的系統管理服務,如通知管理服務NotifacationManager、振動管理服務Vibrator、電池管理服務BatteryManager等。應用框架 API 所提供的功能可與系統服務通訊,以訪問底層硬件。架構

Android 包含兩組服務:「系統」(諸如窗口管理器和通知管理器之類的服務)和「媒體」(與播放和錄製媒體相關的服務)。composer

名稱 簡介
PowerManagerService 電源管理服務
WindowManagerService 最核心的服務之一,負責窗口管理
ActivityManagerService 最核心的服務之一,管理 Activity
PackageManagerService 程序包管理服務
AccountManagerService 帳戶管理服務,是指聯繫人帳戶
ContentService ContentProvider 服務,提供跨進程數據交換
BatteryService 電池管理服務
LightsService 天然光強度感應傳感器服務
VibratorService 震動器服務
AlarmManagerService 定時器管理服務,提供定時提醒服務
BluetoothService 藍牙服務
DevicePolicyManagerService 提供一些系統級別的設置及屬性
StatusBarManagerService 狀態欄管理服務
ClipboardService 系統剪切板服務
InputMethodManagerService 輸入法管理服務
NetworkStatsService 網絡狀態服務
NetworkManagementService 網絡管理服務
ConnectivityService 網絡鏈接管理服務
MountService 掛載服務
NotificationManagerService 通知欄管理服務
DeviceStorageMonitorService 磁盤空間狀態檢測服務
LocationManagerService 地理位置服務
SearchManagerService 搜索管理服務
WallpaperManagerService 牆紙管理服務,牆紙不等同於桌面背景,在 View 系統內部,牆紙能夠做爲任何窗口的背景
AudioService 音頻管理服務
BackupManagerService 系統備份服務
AppWidgetService Widget 服務
DiskStatsService 磁盤統計服務
SurfaceFlinger 負責 Layer 合成(composer),建立 surface,管理 surface

硬件抽象層 (HAL)

HAL 可定義一個標準接口以供硬件供應商實現,該接口使 Android 無需考慮底層驅動程序的實現。使用 HAL 可以使您實現功能而不會影響或修改更高級別的系統。HAL 實現會被封裝成模塊,並會由 Android 系統適時地加載。框架

Linux 內核

Android 基於 Linux 提供核心系統服務,如顯示驅動、Camera 驅動、藍牙驅動、音頻系統驅動、Binder (IPC) 驅動、USB 驅動、WiFi 驅動、電源管理等。編程語言

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

開發

谷歌發佈版本,就是 AOSP 原生代碼。AOSP 原生代碼只支持極少數幾款手機,好比 Pixel。

芯片廠商如高通、MTK、展銳在 AOSP 基礎上發佈本身的版本,每一個芯片廠商會在 AOSP 原生代碼上疊加本身的功能,好比雙卡雙待功能。

咱們開發就是芯片商釋放的代碼,咱們工做大部分就是解 Bug,比較低級,有部分需求定製,也基本是依賴芯片商支持。

開發模塊

從編程語言上來講,Android 系統層有很大一部分是用 Java 開發的。另外還有一大部分是用 Native(C/C++)語言開發的,要想在這個領域作到遊刃有餘,對 Java 和 C++語言要了解。

Android 系統開發涉及知識點很是多,須要潛下心來學習,目前我作的是多媒體顯示服務模塊,已經有段時間了,還只是知道的皮毛,路漫漫其修遠兮,吾將上下而求索,想成爲該領域的專家,還任重道遠。

相關文章
相關標籤/搜索