自 2025 年 3 月 27 日起,我們建議您使用 android-latest-release
而非 aosp-main
建構及貢獻 AOSP。詳情請參閱「Android 開放原始碼計畫變更」。
SDK 擴充功能
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
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)
)。
衍生 Classpath
derive_classpath
服務會讀取並合併 /system/etc/classpaths/
和 /apex/*/etc/classpaths/
中的個別設定檔。每個設定都會以 proto 二進位格式儲存 classpaths.proto
中的 protobuf 訊息。derive_classpath.cpp
說明瞭決定 classpath 項目順序的確切合併演算法,且可能會隨時間變更。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-07-27 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-07-27 (世界標準時間)。"],[],[],null,["# SDK Extensions\n\nThe SDK Extensions module decides the extension SDK level of the device and\nprovides APIs for apps to query the extension SDK level. This module is\nupdatable, meaning it can receive updates to functionality outside of the normal\nAndroid release cycle.\n\nSDK Extensions is responsible for:\n\n- Deciding the extension SDK level of the device.\n- Providing APIs for apps to query the extension SDK level.\n- (Starting Android 12) Determining the values for the `BOOTCLASSPATH`, `DEX2OATBOOTCLASSPATH`, and `SYSTEMSERVERCLASSPATH` environment variables.\n\nModule format\n-------------\n\nThe SDK Extensions module (`com.android.sdkext`) is in\n[APEX](/docs/core/ota/apex) format and is available for devices\nrunning Android 11 or higher.\n\nPackage format\n--------------\n\nThe SDK Extensions module (`com.google.android.sdkext`) is in\n[APEX](/devices/tech/ota/apex) format and\ncontains the following components:\n\n- (Starting Android 12) `bin/derive_classpath`: A\n native binary that runs early in the device boot\n process. It reads individual classpath configs files from the system and\n other modules, merges them, and defines the definition of `CLASSPATH`\n environment variables.\n\n- `bin/derive_sdk`: A native binary that runs early in the device boot process\n and reads metadata of other modules to set system properties related to the\n extension SDK (for example, `build.version.extensions.r`).\n\n- `javalib/framework-sdkextension.jar`: This file is on the bootclasspath that\n exposes APIs to apps to query the extension SDK level.\n\nDerive extension SDK level\n--------------------------\n\nThe `derive_sdk` program reads metadata stored as binary protobuf files in the\n`etc/sdkinfo.binarypb` subpath inside each APEX module. For details on protobuf\nstructure, refer to the\n[`protobuf`](https://android.googlesource.com/platform/external/protobuf.git)\nfile.\n\nRead extension SDK level\n------------------------\n\nThe SDK Extensions module exposes an\n[`SdkExtensions`](https://android.googlesource.com/platform/packages/modules/SdkExtensions/)\njava class in the `android.os.ext` package. Use the `getExtensionVersion(int)`\nmethod to read the version of an SDK extension (for example,\n`getExtensionVersion(Build.VERSION_CODES.R)`).\n\nDerive classpaths\n-----------------\n\nThe `derive_classpath` service reads and merges individual config files in\n`/system/etc/classpaths/` and `/apex/*/etc/classpaths/`. Each config stores\nprotobuf message from [`classpaths.proto`](https://android.googlesource.com/platform/packages/modules/common/+/android16-release/proto/classpaths.proto)\nin a proto binary format. The exact merging algorithm that determines the order\nof the classpath entries is described in\n[`derive_classpath.cpp`](https://android.googlesource.com/platform/packages/modules/SdkExtensions/+/android16-release/derive_classpath/derive_classpath.cpp)\nand might change over time."]]