أقسام المنتجات

يتيح نظام التشغيل Android 9 والإصدارات الأحدث إنشاء تقاسيم product باستخدام نظام إنشاء Android. في السابق، كان نظام التشغيل Android 8.x يفرض فصل المكوّنات الخاصة بوحدة المعالجة المركزية من القسم system إلى القسم vendor بدون تخصيص مساحة للمكوّنات الخاصة بالمصنّع الأصلي للجهاز والتي تم إنشاؤها من نظام إنشاء Android. يقدّم نظام التشغيل Android 9 والإصدارات الأحدث أذونات إضافية وميزات القائمة المسموح بها التي تنطبق على التطبيقات الخاصة في أقسام مختلفة.

لمحة عن أقسام المنتجات

يُخصّص العديد من المصنّعين الأصليين للأجهزة صورة نظام AOSP لتنفيذ ميزاتهم الخاصة، بالإضافة إلى متطلبات مشغّلي شبكات الجوّال. ومع ذلك، تجعل هذه التخصيصات من المستحيل استخدام صورة نظام واحدة لأرقام تعريف كتالوج متعددة للبرامج. يجب أن تكون كل صورة مختلفة لتتوافق مع عمليات التخصيص، مثل لغات أو شركات نقل مختلفة. يتيح استخدام product قسم منفصل لتضمين عمليات التخصيص استخدام صورة نظام واحدة لأرقام تعريف كتالوج متعددة للبرامج. (يستضيف القسم system رمزًا عامًا يمكن مشاركته بين العديد من رموز التخزين التعريفية للبرامج). يستمر قسم vendor في استضافة رمز BSP الخاص بوحدة المعالجة المركزية (SoC) والذي يمكن مشاركته بين عدة أجهزة استنادًا إلى وحدة المعالجة المركزية المحدّدة.

يتضمن استخدام أقسام منفصلة بعض العيوب، مثل إدارة مساحة القرص (يجب تخصيص مساحة محدودة لزيادة حجم التطبيق في المستقبل) والحفاظ على واجهة ثنائية التطبيق (ABI) ثابتة بين الأقسام. قبل اتخاذ قرار استخدام أقسام product، ننصحك بالتأنّي في التفكير في عملية التنفيذ الفريدة لنظام التشغيل AOSP وأساليب التخفيف المحتملة (مثل إعادة تقسيم جهاز أثناء تحديث عبر شبكة غير سلكيّة (OTA)، وهو إجراء لا تُجريه Google بل بعض المصنّعين الأصليين للأجهزة). التقسيم الديناميكي هو حل جيد لهذا الغرض.

أقسام المنتجات والأذونات

في الإصدار 9 من نظام التشغيل Android والإصدارات الأحدث، يؤثر أي تغيير في الأذونات وعملية إضافة التطبيقات إلى القائمة البيضاء في كيفية منح أذونات التطبيقات الخاصة على أقسام "المنتج". يجب أن يكون ملف permissions.xml متوفّرًا في القسم نفسه الذي يتوفّر فيه priv-apps. إنّ وضع ملف 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 components

يحتوي القسم product على المكوّنات التالية:

  • سمات النظام الخاصة بالمنتج (/product/build.prop)
  • طلبات الحصول على موافقة مسبقة خاصة بالمنتج (/product/overlay/*.apk)
  • التطبيقات الخاصة بالمنتجات (/product/app/*.apk)
  • التطبيقات الخاصة بالخصوصية الخاصة بالمنتج (/product/priv-app/*.apk)
  • المكتبات الخاصة بالمنتجات (/product/lib/*)
  • مكتبات Java الخاصة بالمنتجات (/product/framework/*.jar)
  • إعدادات نظام Android Framework الخاصة بالمنتج (/product/etc/sysconfig/* و /product/etc/permissions/*)
  • ملفات وسائط خاصة بالمنتج (/product/media/audio/*)
  • ملفات bootanimation الخاصة بالمنتجات

لا تتوفّر custom_images

لا يمكنك استخدام custom_images. لا تتوفّر الميزات التالية:

  • تثبيت الوحدات في هدف معيّن تتيح أداة custom_images نسخ العناصر إلى صورة، ولكن لا يمكنها تثبيت وحدة في قسم معيّن من خلال تحديد القسم المستهدف لها كجزء من قاعدة إنشاء.
  • دعم Soong لا يمكن إنشاء custom_images باستخدام نظام إنشاء Soong.
  • إتاحة التحديث عبر الهواء تُستخدَم custom_images كصور لنظام التشغيل الثابت التي لا يمكنها تلقّي تحديثات عبر شبكة Wi-Fi.

الحفاظ على واجهات ABI بين الأقسام

قسم product في Android 9 هو إضافة إلى القسم system. هناك ABI ضعيف بين product وsystem، لذا يجب ترقية كلاهما في الوقت نفسه، ويجب أن يكون ABI مستندًا إلى حزمة تطوير البرامج (SDK) للنظام. إذا كانت IDE لنظام التشغيل لا تغطي جميع مساحات عرض واجهة برمجة التطبيقات بين 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 Verified Boot (AVB) لهذا القسم (تمامًا كما تفعل مع القسمين vendor وsystem). لتفعيل بروتوكول AVB، أدرِج علامات الإنشاء التالية: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.