SDK 擴充功能

SDK 擴充功能模組會決定裝置的擴充功能 SDK 級別,並提供 API,讓應用程式查詢擴充功能 SDK 級別。這個模組可更新,也就是說,它可以在正常的 Android 發布週期外接收功能更新。

SDK 擴充功能負責:

  • 決定裝置的擴充功能 SDK 級別。
  • 提供 API,讓應用程式查詢擴充功能 SDK 級別。
  • (自 Android 12 起) 決定 BOOTCLASSPATHDEX2OATBOOTCLASSPATHSYSTEMSERVERCLASSPATH 環境變數的值。

模組格式

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 項目順序的確切合併演算法,且可能會隨時間變更。