ماژول افزونههای 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
شرح داده شده است و ممکن است در طول زمان تغییر کند.