يتيح نظام التشغيل 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 |
|
product |
|
product (الواجهات المفروضة) |
|
لهذه الأسباب، يتيح نظام التشغيل 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
.