توزیع‌های محصول

‫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
  • قابل به‌روزرسانی نیست؛ معمولاً یک‌بار در کارخانه نصب می‌شود.
  • براساس تغییرات کوچک، مانند نمانام و رنگ، ساخته شده است. داشتن محتوای پارتیشن oem متفاوت به این معنی نیست که نرم‌افزار محصول متفاوت است.
  • پارتیشن system به پارتیشن oem وابسته نیست. (فقط وقتی فایل خاصی در آنجا پیدا شود از پارتیشن oem استفاده می‌کند).
  • فقط از میانای برنامه‌سازی کاربردی عمومی در بخش system استفاده می‌کند.
product
  • قابل به‌روزرسانی
  • با تصویر سیستم جفت شده است (باهم به‌روزرسانی می‌شوند)
  • براساس محصول یا خانواده محصول ساخته می‌شود.
  • پارتیشن سیستم می‌تواند به پارتیشن product وابسته باشد.
  • می‌تواند از میاناهای برنامه‌سازی کاربردی غیرعمومی استفاده کند زیرا هم‌زمان به‌روزرسانی می‌شوند.
‫product (میاناهای اجباری)
  • به‌روزرسانی‌شدنی
  • از تصویر سیستم جدا شد.
  • براساس محصول یا خانواده محصول ساخته می‌شود.
  • بخش system به بخش product وابسته نیست.
  • نمی‌تواند از میاناهای برنامه‌سازی کاربردی پنهان استفاده کند، بلکه فقط از میاناهای برنامه‌سازی کاربردی عمومی و سیستم در پارتیشن system استفاده می‌کند.

به همین دلیل، 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_PRODUCTIMAGE
  • BOARD_PRODUCTIMAGE_PARTITION_SIZE
  • BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
  • PRODUCT_PRODUCT_PROPERTIES برای /product/build.prop. این موارد باید در $(call inherit-product path/to/device.mk)، مثلاً PRODUCT_PRODUCT_PROPERTIES += product.abc=ok، باشد.

نصب واحد در بخش محصول

از پرچم‌های ساخت زیر برای نصب واحد در پارتیشن product استفاده کنید.

  • product_specific: true در Android.bp
  • LOCAL_PRODUCT_MODULE := true در Android.mk

فعال کردن «راه‌اندازی درستی‌سنجی‌شده»

برای جلوگیری از دستکاری پارتیشن product توسط نرم‌افزارهای مخرب، راه‌اندازی درستی‌سنجی‌شده Android (AVB) را برای آن پارتیشن فعال کنید (همان‌طور که برای پارتیشن‌های vendor و system انجام می‌دهید). برای فعال کردن AVB، پرچم‌های ساخت زیر را اضافه کنید: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.