افزونه‌های کیت توسعه نرم‌افزار

واحد «افزونه‌های کیت توسعه نرم‌افزار» سطح کیت توسعه نرم‌افزار افزونه دستگاه را تعیین می‌کند و میاناهای برنامه‌سازی کاربردی را برای برنامه‌ها فراهم می‌کند تا سطح کیت توسعه نرم‌افزار افزونه را پُرسمان کنند. این ماژول قابل‌به‌روزرسانی است، یعنی می‌تواند به‌روزرسانی‌های عملکردی را خارج از چرخه انتشار عادی Android دریافت کند.

«افزونه‌های کیت توسعه نرم‌افزار» مسئول موارد زیر است:

  • تعیین سطح کیت توسعه نرم‌افزار افزونه دستگاه.
  • ارائه میاناهای برنامه‌سازی کاربردی برای برنامه‌ها برای جستجوی سطح کیت توسعه نرم‌افزار افزونه.
  • (از Android 12 شروع می‌شود) تعیین مقادیر متغیرهای محیطی BOOTCLASSPATH، DEX2OATBOOTCLASSPATH، و SYSTEMSERVERCLASSPATH.

قالب واحد

ماژول «افزونه‌های کیت توسعه نرم‌افزار» (com.android.sdkext) در قالب APEX است و برای دستگاه‌های دارای Android 11 یا بالاتر دردسترس است.

قالب بسته

مدول «افزونه‌های کیت توسعه نرم‌افزار» (com.google.android.sdkext) در قالب APEX است و شامل مؤلفه‌های زیر است:

  • (از Android 12) bin/derive_classpath: باینری بومی که در مراحل اولیه فرایند راه‌اندازی دستگاه اجرا می‌شود. این افزایه فایل‌های پیکربندی مسیر کلاس را از سیستم و دیگر واحدها می‌خواند، آن‌ها را ادغام می‌کند، و تعریف متغیرهای محیطی CLASSPATH را مشخص می‌کند.

  • ‫bin/derive_sdk: یک فایل دودویی بومی که در اوایل فرایند راه‌اندازی دستگاه اجرا می‌شود و فراداده‌های سایر ماژول‌ها را می‌خواند تا ویژگی‌های سیستم مربوط به کیت توسعه نرم‌افزار افزونه (برای مثال، build.version.extensions.r) را تنظیم کند.

  • javalib/framework-sdkextension.jar: این فایل در bootclasspath است که میاناهای برنامه‌سازی کاربردی را برای برنامه‌ها نمایان می‌کند تا سطح کیت توسعه نرم‌افزار افزونه را پُرسمان کنند.

استخراج سطح کیت توسعه نرم‌افزار افزونه

برنامه derive_sdk فراداده ذخیره‌شده به‌عنوان فایل‌های protobuf دودویی را در زیرمسیر etc/sdkinfo.binarypb داخل هر ماژول APEX می‌خواند. برای جزئیات مربوط به ساختار protobuf، به فایل protobuf مراجعه کنید.

خواندن سطح کیت توسعه نرم‌افزار افزونه

واحد «افزونه‌های کیت توسعه نرم‌افزار» یک SdkExtensions کلاس جاوا در بسته android.os.ext نمایان می‌کند. از روش getExtensionVersion(int) برای خواندن نسخه افزونه کیت توسعه نرم‌افزار (برای مثال، getExtensionVersion(Build.VERSION_CODES.R)) استفاده کنید.

استخراج مسیرهای کلاس

سرویس derive_classpath فایل‌های پیکربندی جداگانه را در /system/etc/classpaths/ و /apex/*/etc/classpaths/ می‌خواند و ادغام می‌کند. هر پیکربندی پیام protobuf را از classpaths.proto در قالب دودویی proto ذخیره می‌کند. الگوریتم ادغام دقیق که ترتیب ورودی‌های مسیر کلاس را تعیین می‌کند در derive_classpath.cpp توضیح داده شده است و ممکن است با گذشت زمان تغییر کند.