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