SDK 擴充功能

SDK擴充模組決定設備的擴充SDK級別,並提供API供應用查詢擴充SDK級別。該模組是可更新的,這意味著它可以在正常的 Android 發布週期之外接收功能更新。

SDK 擴充負責:

  • 決定設備的擴充SDK等級。
  • 提供API供應用查詢擴充SDK等級。
  • (從 Android 12 開始)確定BOOTCLASSPATHDEX2OATBOOTCLASSPATHSYSTEMSERVERCLASSPATH環境變數的值。

模組格式

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