اندروید 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
.