Android 9 و نسخههای بالاتر از ساختن
product پارتیشن بااستفاده از سیستم ساخت Android پشتیبانی میکند. قبلاً،
Android نسخه ۸.x جداسازی عناصر مختص SoC
از پارتیشن system به پارتیشن vendor را
بدون اختصاص دادن فضا برای عناصر مختص سازنده اصلی تجهیزات که از
سیستم ساخت Android ساخته شدهاند، اعمال میکرد. Android 9 و نسخههای بالاتر
اجازههای
اضافی و ویژگیهای فهرست سفید ارائه میدهد که برای برنامههای ممتاز در پارتیشنهای مختلف اعمال میشود.
درباره توزیعهای محصول
بسیاری از تولیدکنندگان تجهیزات اصلی تصویر سیستم AOSP را برای پیادهسازی ویژگیهای خودشان و همچنین الزامات شرکت مخابراتی سفارشیسازی میکنند. بااینحال، چنین سفارشیسازیهایی استفاده از یک تصویر سیستم واحد برای چندین واحد نگهداری موجودی نرمافزار را غیرممکن میکند. هر تصویر باید متفاوت باشد تا از سفارشیسازیها، مانند منطقههای زبانی یا شرکتهای مخابراتی مختلف، پشتیبانی کند. استفاده از یک
پارتیشن product جداگانه برای نگهداری سفارشیسازیها امکان استفاده از یک تصویر سیستم واحد برای چندین واحد نگهداری موجودی نرمافزار را فراهم میکند. (پارتیشن
system میزبان کد عمومی است که میتواند بین
بسیاری از واحدهای نگهداری موجودی نرمافزار همرسانی شود). بخش vendor همچنان میزبان کد BSP ویژه SoC است که میتواند بین چندین دستگاه براساس SoC دادهشده همرسانی شود.
استفاده از پارتیشنهای جداگانه معایبی دارد، ازجمله
مدیریت فضای دیسک (مقدار محدودی از فضا باید برای رشد آینده رزرو شود) و حفظ
میانای باینری برنامه (ABI) پایدار بین پارتیشنها. قبلاز
تصمیمگیری برای استفاده از پارتیشنهای product، وقت بگذارید و
پیادهسازی منحصربهفرد AOSP و تاکتیکهای کاهش احتمالی را درنظر بگیرید (مانند
پارتیشنبندی مجدد دستگاه درطول بهروزرسانی
ازطریق هوا (OTA)، که توسط Google انجام نمیشود اما توسط برخیاز سازندگان اصلی تجهیزات انجام میشود).
پارتیشنبندی پویا
راهحل خوبی برای این کار است.
دستهبندیها و اجازههای محصول
در Android 9 و بالاتر، تغییر در اجازهها
و فرایند فهرست سفید بر نحوه اعطای اجازههای priv-apps در
پارتیشنهای `product` تأثیر میگذارد. فایل permissions.xml باید در همان پارتیشن برنامههای ممتاز قرار داشته باشد. قرار دادن فایل
permissions.xml در پارتیشن system
برای برنامههای ممتاز، این اجازهها را به برنامههای ممتاز در پارتیشن product
تعمیم نمیدهد، حتی اگر اولی توسعه دومی باشد.
برای جزئیات مربوط به اجازهها و فرایندهای فهرست سفید، به
فهرست مجاز اجازههای ممتاز مراجعه کنید.
قدیمی /oem دربرابر /product
بسته به اجرای رابط محصول، دو نوع مشخصه برای بخش product داریم. همچنین، پارتیشن product با پارتیشن oem قدیمی متفاوت است:
| پارتیشن | مشخصهها |
|---|---|
oem |
|
product |
|
product (میاناهای اجباری) |
|
به همین دلیل، Android 9 از پارتیشن product پشتیبانی میکند و درعینحال
پشتیبانی از پارتیشن قدیمی oem را برای دستگاههایی که به آن
وابسته هستند حفظ میکند. برای جدا کردن پارتیشن product از پارتیشن system،
Android 11 از
اجرای رابطهای product پشتیبانی میکند.
/اجزای محصول
بخش product شامل عناصر زیر است:
- داراییهای سیستم مختص محصول (
/product/build.prop) - همپوشانیهای منبع زمان اجرای مختص محصول (
/product/overlay/*.apk) - برنامههای مختص محصول (
/product/app/*.apk) - برنامههای خصوصی مختص محصول (
/product/priv-app/*.apk) - کتابخانههای مختص محصول (
/product/lib/*) - کتابخانههای جاوا مختص محصول (
/product/framework/*.jar) - پیکربندیهای سیستم «چارچوب Android» مختص محصول
(
/product/etc/sysconfig/*و/product/etc/permissions/*) - فایلهای رسانهای مختص محصول (
/product/media/audio/*) - فایلهای
bootanimationمختص محصول
بدون custom_images
نمیتوانید از custom_images استفاده کنید. این دستگاهها از موارد زیر پشتیبانی نمیکنند:
- نصب واحدها در هدفی خاص.
custom_imagesاز کپی کردن آرتیفکتها در تصویر پشتیبانی میکند اما نمیتواند با مشخص کردن پارتیشن هدف بهعنوان بخشی از قانون ساخت، واحد را در پارتیشن خاصی نصب کند. - پشتیبانی از Soong.
custom_imagesرا نمیتوان بااستفاده از سیستم ساخت Soong ساخت. - پشتیبانی از بهروزرسانی ازطریق هوا.
custom_imagesبهعنوان تصویرهای ROM کارخانه استفاده میشود که نمیتواند بهروزرسانیهای OTA را دریافت کند.
حفظ ABI بین پارتیشنها
پارتیشن product در Android 9 افزونهای از پارتیشن system است. رابط دودویی برنامه ضعیفی بین
بخشهای product و system وجود دارد، بنابراین هر دو باید
همزمان ارتقا داده شوند و رابط دودویی برنامه باید مبتنی بر کیت توسعه نرمافزار سیستم باشد. اگر کیت توسعه نرمافزار سیستم همه سطوح API بین product و system را پوشش ندهد، تولیدکنندگان تجهیزات اصلی باید ABI خود را بین دو پارتیشن حفظ کنند.
بخشهای product و system میتوانند به یکدیگر وابسته باشند. بااینحال، آزمایشها با
تصویر سیستم عام (GSI)
باید بدون پارتیشن product بهدرستی کار کنند.
وقتی میاناهای product اعمال میشوند،
پارتیشن product از پارتیشن system جدا میشود. بخش product
فقط از میاناهای مجاز بخش system استفاده میکند.
بخش product نباید ازطریق میاناهای ناپایدار به بخش vendor وابستگی داشته باشد. تعامل مستقیم بین بخشهای
product و vendor ممنوع است.
(این مورد توسط SEpolicy اعمال میشود.)
پیادهسازی بخشهای محصول
پیشاز پیادهسازی بخش محصول جدید،
تغییرات بخش محصول
مرتبط در AOSP را مرور کنید. سپس، برای راهاندازی product،
پرچمهای محصول-ساخت یا برد زیر را اضافه کنید:
BOARD_USES_PRODUCTIMAGEBOARD_PRODUCTIMAGE_PARTITION_SIZEBOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPEPRODUCT_PRODUCT_PROPERTIESبرای/product/build.prop. این موارد باید در$(call inherit-product path/to/device.mk)، مثلاًPRODUCT_PRODUCT_PROPERTIES += product.abc=ok، باشد.
نصب واحد در بخش محصول
از پرچمهای ساخت زیر برای نصب واحد در پارتیشن product استفاده کنید.
product_specific: trueدرAndroid.bpLOCAL_PRODUCT_MODULE := trueدرAndroid.mk
فعال کردن «راهاندازی درستیسنجیشده»
برای جلوگیری از دستکاری پارتیشن product توسط نرمافزارهای مخرب،
راهاندازی درستیسنجیشده Android (AVB) را برای آن پارتیشن فعال کنید (همانطور که برای پارتیشنهای
vendor و system انجام میدهید). برای فعال کردن AVB،
پرچمهای ساخت زیر را اضافه کنید:
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.