ماژول افزونههای SDK سطح SDK برنامه افزودنی دستگاه را تعیین میکند و APIهایی را برای برنامهها فراهم میکند تا سطح SDK برنامه افزودنی را پرس و جو کنند. این ماژول قابل بهروزرسانی است، به این معنی که میتواند بهروزرسانیهای عملکرد را خارج از چرخه انتشار عادی اندروید دریافت کند.
برنامه افزودنی SDK مسئول این موارد است:
- تصمیم گیری در مورد سطح SDK برنامه افزودنی دستگاه.
- ارائه API برای برنامهها برای درخواست سطح SDK برنامههای افزودنی.
- (شروع Android 12) تعیین مقادیر برای
BOOTCLASSPATH
،DEX2OATBOOTCLASSPATH
، وSYSTEMSERVERCLASSPATH
.
فرمت ماژول
ماژول افزونههای SDK ( com.android.sdkext
) در قالب APEX است و برای دستگاههایی که Android 11 یا بالاتر دارند در دسترس است.
قالب بسته
ماژول SDK Extensions ( com.google.android.sdkext
) در قالب APEX است و شامل اجزای زیر است:
(شروع اندروید 12)
bin/derive_classpath
: یک باینری بومی که در مراحل اولیه بوت دستگاه اجرا می شود. این فایلهای پیکربندی منفرد 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
توضیح داده شده است و ممکن است در طول زمان تغییر کند.