在 Android 4.4 版本前是使用 dalvik 虛擬機,執行的是 DEX 位元組碼,
而 dalvik 採用的 JIT (Just-in-Time) 直譯器,
會在程式執行的時候將 DEX 轉成本地機器碼,
而且每次執行都要轉換一次,效率聽起來就很慢;
Android 4.4 版本後引用 ART 虛擬機,
而 ART 採用的是 AOT (Ahead-of-Time),
在 App 安裝時就會將 DEX 載入轉換成本地機器碼。
Android 9.0 版本這次又強調轉換效率更高,
且可以使得 App 啟動更快速、消耗更少的空間存取,
更適應在許多硬體資源吃緊的環境下運作。
從 framework APIs 可以查詢到許多內建的功能,
我想可以特別來看一下 API Level 28 新增的部份,
舉例第一篇提到的 WIFI RTT 功能便有 android.net.wifi.rtt。
這部份就等日後有談到 WIFI RTT,
再搭配 Service、HAL、Kernel 運作流程一起詳細介紹。
在 Android 8.0 後還新增了 Autofill framework 的功能,
可以自動填入像是原先設定要紀錄的欄位,像是帳號、密碼、信箱等等,
用的就是 android.service.autofill。
還有 Android 9.0 有新增適應瀏海屏的 WindowInsets 和 DispayCutout 功能,
在 android.view 裡面的 Classes 可以找到 android.view.DisplayCutout,
為的也是讓 App 可以正常顯示出狀態欄。
這部份一樣會圍繞在 Android 9.0 Pie 新增的功能,
要如何適配像是 WIFI RTT、瀏海屏顯示和 Autofill 等等的應用上。
但是篇幅相對比較少一些,
畢竟重點會多放在 Framework、HAL、Kernel 這三個部份。
所以假如你是想看看怎麼寫 Android 9.0 APP 的,
這系列可以關掉了(笑),但多學總是好的 :)
Package Index | Android Developers