SDK 擴充功能模組會決定裝置的擴充功能 SDK 級別,並提供 API 供應用程式查詢擴充功能 SDK 級別。這個模組可更新,也就是說,即使不在正常的 Android 發布週期內,也能接收功能更新。
SDK 擴充功能負責:
- 決定裝置的擴充功能 SDK 層級。
- 提供 API,供應用程式查詢擴充功能 SDK 級別。
- (Android 12 以上版本) 判斷
BOOTCLASSPATH、DEX2OATBOOTCLASSPATH和SYSTEMSERVERCLASSPATH環境變數的值。
模組格式
SDK 擴充功能模組 (com.android.sdkext) 採用 APEX 格式,適用於搭載 Android 11 以上版本的裝置。
套件格式
SDK 擴充功能模組 (com.google.android.sdkext) 採用 APEX 格式,並包含下列元件:
(Android 12 以上版本)
bin/derive_classpath:在裝置啟動程序早期執行的原生二進位檔。這個檔案會從系統和其他模組讀取個別類別路徑設定檔、合併這些檔案,並定義CLASSPATH環境變數的定義。bin/derive_sdk:原生二進位檔,會在裝置啟動程序初期執行,並讀取其他模組的中繼資料,設定與擴充功能 SDK 相關的系統屬性 (例如build.version.extensions.r)。javalib/framework-sdkextension.jar:這個檔案位於 bootclasspath,可向應用程式公開 API,以查詢擴充功能 SDK 層級。
衍生擴充功能 SDK 層級
derive_sdk 程式會讀取儲存在每個 APEX 模組內 etc/sdkinfo.binarypb 子路徑中的二進位 Protobuf 檔案。如要進一步瞭解 protobuf 結構,請參閱 protobuf 檔案。
讀取擴充功能 SDK 層級
SDK 擴充功能模組會在 android.os.ext 套件中公開 SdkExtensions Java 類別。使用 getExtensionVersion(int)
方法讀取 SDK 擴充功能的版本 (例如 getExtensionVersion(Build.VERSION_CODES.R))。
衍生類別路徑
derive_classpath 服務會讀取並合併 /system/etc/classpaths/ 和 /apex/*/etc/classpaths/ 中的個別設定檔。每個設定都會以 proto 二進位格式,儲存 classpaths.proto 中的 protobuf 訊息。決定類路徑項目順序的確切合併演算法如derive_classpath.cpp所述,且可能會隨時間變更。