أقسام المنتج

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

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

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

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

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

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

الحفاظ على ABIs بين الأقسام

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