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
所述,且可能會隨時間變更。