پارتیشن های محصول

اندروید 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 گسترش نمی دهد، حتی اگر اولی پسوند دومی باشد. برای جزئیات در مورد مجوزها و فرآیندهای فهرست مجاز، به فهرست مجاز مجوزهای ممتاز مراجعه کنید.

Legacy /oem vs /product

بسته به اجرای رابط محصول، دو نوع ویژگی از پارتیشن product داریم. همچنین، پارتیشن product با پارتیشن oem قدیمی متفاوت است:

تقسیم بندی ویژگی های
oem
  • غیر قابل به روز رسانی؛ معمولا یک بار در کارخانه فلش می شود.
  • ساخته شده بر اساس تغییرات کوچک، مانند نام تجاری و رنگ. داشتن محتویات پارتیشن oem متفاوت به این معنی نیست که نرم افزار محصول متفاوت است.
  • پارتیشن system به پارتیشن oem بستگی ندارد. (از پارتیشن oem فقط زمانی استفاده می کند که یک فایل خاص در آنجا پیدا شود).
  • فقط از API عمومی در پارتیشن system استفاده می کند.
product
  • قابل به روز رسانی
  • همراه با تصویر سیستم (آنها با هم به روز می شوند)
  • ساخته شده در هر محصول یا خانواده محصول.
  • پارتیشن سیستم می تواند به پارتیشن product بستگی داشته باشد.
  • می توانید از API های غیر عمومی استفاده کنید زیرا به طور همزمان به روز می شوند.
product (رابط های اجباری)
  • قابل به روز رسانی
  • با تصویر سیستم جدا شده است.
  • ساخته شده در هر محصول یا خانواده محصول.
  • پارتیشن system به پارتیشن product بستگی ندارد.
  • نمی توان از API های پنهان استفاده کرد، اما فقط از API های عمومی و سیستم در پارتیشن system استفاده می کند.

به این دلایل، اندروید 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 .