برنامه های افزودنی SDK

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

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