از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
برنامه های افزودنی SDK
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
ماژول افزونههای SDK سطح SDK برنامه افزودنی دستگاه را تعیین میکند و APIهایی را برای برنامهها فراهم میکند تا سطح SDK برنامه افزودنی را پرس و جو کنند. این ماژول قابل بهروزرسانی است، به این معنی که میتواند بهروزرسانیهای عملکرد را خارج از چرخه انتشار عادی اندروید دریافت کند.
برنامه های افزودنی SDK مسئول موارد زیر است:
- تصمیم گیری در مورد سطح SDK برنامه افزودنی دستگاه.
- ارائه API برای برنامهها برای درخواست سطح SDK برنامههای افزودنی.
- (شروع اندروید 12) تعیین مقادیر متغیرهای محیطی
BOOTCLASSPATH
، DEX2OATBOOTCLASSPATH
، و SYSTEMSERVERCLASSPATH
.
ماژول افزونههای SDK ( com.android.sdkext
) در قالب APEX است و برای دستگاههایی که Android 11 یا بالاتر دارند در دسترس است.
ماژول SDK Extensions ( com.google.android.sdkext
) در قالب APEX است و شامل اجزای زیر است:
(شروع اندروید 12) bin/derive_classpath
: یک باینری بومی که در مراحل اولیه بوت دستگاه اجرا می شود. فایلهای پیکربندی مسیر کلاس را از سیستم و سایر ماژولها میخواند، آنها را ادغام میکند و تعریف متغیرهای محیطی CLASSPATH
را تعریف میکند.
bin/derive_sdk
: یک باینری بومی که در اوایل فرآیند راهاندازی دستگاه اجرا میشود و متادیتای ماژولهای دیگر را میخواند تا ویژگیهای سیستم مربوط به پسوند SDK را تنظیم کند (به عنوان مثال build.version.extensions.r
).
javalib/framework-sdkextension.jar
: این فایل در مسیر bootclasspath قرار دارد که API ها را در معرض برنامه ها قرار می دهد تا سطح SDK برنامه افزودنی را پرس و جو کنند.
استخراج سطح SDK پسوند
برنامه derive_sdk
ابرداده های ذخیره شده به عنوان فایل های پروتوباف باینری را در مسیر فرعی etc/sdkinfo.binarypb
در داخل هر ماژول APEX می خواند. برای جزئیات بیشتر در مورد ساختار پروتوباف، به فایل protobuf
مراجعه کنید.
سطح SDK برنامه افزودنی را بخوانید
ماژول SDK Extensions یک کلاس جاوا SdkExtensions
را در بسته android.os.ext
نمایش می دهد. از روش getExtensionVersion(int)
برای خواندن نسخه یک برنامه افزودنی SDK استفاده کنید (به عنوان مثال، getExtensionVersion(Build.VERSION_CODES.R)
).
مسیرهای کلاس را استخراج کنید
سرویس derive_classpath
فایل های پیکربندی فردی را در /system/etc/classpaths/
و /apex/*/etc/classpaths/
می خواند و ادغام می کند. هر پیکربندی پیام protobuf را از classpaths.proto
در قالب پروتو باینری ذخیره می کند. الگوریتم ادغام دقیقی که ترتیب ورودی های classpath را تعیین می کند در derive_classpath.cpp
شرح داده شده است و ممکن است در طول زمان تغییر کند.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","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-29 بهوقت ساعت هماهنگ جهانی."],[],[],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."]]