ماژول SDK Extensions سطح SDK افزونه دستگاه را تعیین میکند و APIهایی را برای برنامهها فراهم میکند تا سطح SDK افزونه را جستجو کنند. این ماژول قابل بهروزرسانی است، به این معنی که میتواند بهروزرسانیهای مربوط به عملکرد را خارج از چرخه انتشار معمول اندروید دریافت کند.
افزونههای SDK مسئول موارد زیر هستند:
- تعیین سطح SDK افزونه دستگاه.
- ارائه API برای برنامهها جهت پرسوجو از سطح SDK افزونه.
- (شروع اندروید ۱۲) تعیین مقادیر متغیرهای محیطی
BOOTCLASSPATH،DEX2OATBOOTCLASSPATHوSYSTEMSERVERCLASSPATH.
قالب ماژول
ماژول SDK Extensions ( com.android.sdkext ) با فرمت APEX است و برای دستگاههایی که اندروید ۱۱ یا بالاتر دارند، در دسترس است.
قالب بسته
ماژول SDK Extensions ( com.google.android.sdkext ) با فرمت APEX است و شامل اجزای زیر است:
(از اندروید ۱۲ به بعد)
bin/derive_classpath: یک فایل باینری بومی که در اوایل فرآیند بوت دستگاه اجرا میشود. این فایل، فایلهای پیکربندی classpath را از سیستم و سایر ماژولها میخواند، آنها را ادغام میکند و تعریف متغیرهای محیطیCLASSPATHتعریف میکند.bin/derive_sdk: یک فایل باینری بومی که در اوایل فرآیند بوت دستگاه اجرا میشود و متادیتای سایر ماژولها را میخواند تا ویژگیهای سیستم مربوط به افزونه SDK (برای مثال،build.version.extensions.r) را تنظیم کند.javalib/framework-sdkextension.jar: این فایل در مسیر bootclasspath قرار دارد که APIها را در اختیار برنامهها قرار میدهد تا سطح SDK افزونه را جستجو کنند.
سطح SDK افزونه را استخراج کنید
برنامهی derive_sdk فرادادههای ذخیرهشده به صورت فایلهای protobuf باینری را در مسیر فرعی etc/sdkinfo.binarypb درون هر ماژول APEX میخواند. برای جزئیات بیشتر در مورد ساختار protobuf، به فایل 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 را در قالب باینری proto ذخیره میکند. الگوریتم دقیق ادغام که ترتیب ورودیهای classpath را تعیین میکند، در derive_classpath.cpp شرح داده شده است و ممکن است با گذشت زمان تغییر کند.