SDK 擴充功能模組會決定裝置的擴充功能 SDK 級別,並提供 API,讓應用程式查詢擴充功能 SDK 級別。這個模組可更新,也就是說,它可以在正常的 Android 發布週期外接收功能更新。
SDK 擴充功能負責:
- 決定裝置的擴充功能 SDK 級別。
- 提供 API,讓應用程式查詢擴充功能 SDK 級別。
- (自 Android 12 起) 決定
BOOTCLASSPATH
、DEX2OATBOOTCLASSPATH
和SYSTEMSERVERCLASSPATH
環境變數的值。
模組格式
SDK Extensions 模組 (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
:這個檔案位於引導路徑中,會將 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
說明瞭決定 classpath 項目順序的確切合併演算法,且可能會隨時間變更。