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
中進行了描述,並且可能會隨著時間的推移而改變。