بعد أن أصبحت مكونات مكتبة واجهة مستخدم السيارة ومواردها في التطبيقات، من أجل تخصيص لهذه التطبيقات، يجب على المصنّعين الأصليين للأجهزة تقديم طبقتين:
-
يضيف تراكب وقت التصميم أي موارد مطلوبة تراكب موارد وقت التشغيل (RROs). وتتضمّن المزايا ما يلي:
- قابل للرسم
- الأنماط (مثل أشكال النصوص)
- الموارد المشتركة (مثل الألوان)
-
يحتوي مجلد تراكب RRO على الموارد المستخدمة لإنشاء تسجيل RRO واحد لكل التطبيق المستهدف. ويمكن أن تشير هذه الموارد فقط إلى ما يلي:
- تم تعريف القيم داخل RRO نفسه (على سبيل المثال، بالنسبة للون سيكون هذا العدد سداسيًا عشريًا ).
- موارد إطار عمل Android (على سبيل المثال،
@android:color/accent
). - مرجع محدّد في تراكب وقت الإنشاء أعلاه.
البنية العامة
في ما يلي بنية تراكب التخصيص المقترحة:
-
<path-to-OEM-overlays>/
-
overlay/framework/base/core/res/
موارد العناصر المركّبة في وقت الإصدار -
rro/
-
Android.mk
Makefile المستخدَم لإنشاء قوائم RRO لكل حزمة مستهدفة بناءً على الموارد الموجودة في هذا المجلد. -
AndroidManifest.xml
نموذج ملف بيان يستخدمه ما سبق makefile. -
res/
عناصر مركّبة في بيئة التشغيل ليتم تطبيقها على جميع التطبيقات المستهدَفة.
-
-
قد يكون لدى المصنّعين الأصليين للأجهزة أكثر من واحدة من هذه الهياكل، اعتمادًا على عدد العلامات التجارية التي يريدون في هدف إصدار واحد (راجع التعامل مع علامات تجارية متعدّدة).
المحتوى المركّب على موارد بيئة التشغيل
يجب أن يحتوي مجلد RRO في مجلد تراكب المصنّع الأصلي للجهاز على موارد يمكن تطبيقها على جميع التطبيقات الهدف. تُفرض قيود على الموارد المتنقلة (RRO) على قدرتها على تراكب الموارد المركبة. باختصار، RRO:
-
لا يمكن الإشارة إلى معرّفات الموارد المحدّدة في حزمة APK المستهدفة أو في RRO نفسها. يعني هذا أنّ قوائم الموارد المنتظمة (RRO) لا يمكنها إضافة معرّفات جديدة مثل العناصر القابلة للرسم أو الألوان أو الأنماط.
-
يمكن الرجوع إلى معرّفات الموارد المحدّدة في سواء تم تحديد هذه الموارد في
/frameworks/base/core/res
أو من خلال لتراكب وقت الإصدار. يجب الإشارة إلى هذه المعرّفات باستخدامandroid:
. مساحة الاسم:-
بالنسبة إلى الملفات RRO المتاحة للجميع، استخدِم
android
.
مثلاً:@android:style/TextAppearance.DeviceDefault.Large
-
بالنسبة إلى جميع المصادر الأخرى (غير العامة أو الموارد التي تمت إضافتها من خلال تراكب وقت الإصدار)، استخدِم
*android
.
مثلاً:@*android/style:TextAppearance.OEM.Brand1.Title
-
بالإضافة إلى الموارد، يجب أن يحتوي مجلد RRO على:
-
AndroidManifest.xml
في النموذج أدناه،RRO_PACKAGE_NAME
TARGET_PACKAGE_NAME
هي عناصر نائبة لملفات makefiles:<?xml version=“1.0” encoding=“utf-8”?> <manifest xmlns:android=“http://schemas.android.com/apk/res/android” package=“{{RRO_PACKAGE_NAME}}” /> <application android:hasCode=“false” /> <overlay android:priority=“10” android:targetPackage=“{{TARGET_PACKAGE_NAME}}” android:requiredSystemPropertyName=“ro.product.sku” android:requiredSystemPropertyValue=“<your-product-sku>” /> </manifest>
Android.mk
الذي يحدّد فيهoem
في ملف makefile التالي البادئة التي ستتضمّنها جميع الحسابات RRO التي تم إنشاؤها.LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) CAR_UI_RRO_SET_NAME := oem CAR_UI_RESOURCE_DIR := $(LOCAL_PATH)/res CAR_UI_RRO_TARGETS := $(CAR_UI_RRO_PACKAGE_NAMES) include packages/apps/Car/libs/car-ui-lib/generate_rros.mk
ضبط عمليات تسجيل الموارد المنتظمة (RRO)
يتوفّر ملف إعداد جديد، overlayable.xml
، يمكنك استخدامه لتحديد
عناصر التحكم في الوصول. على سبيل المثال، يمكنك تحديد من يمكنه تركيب الموارد وكذلك أي موارد
ويمكن تركيبها. نتيجةً لذلك، يمكن الآن تجميع الموارد بطرق مختلفة
ليتم تركيبها بواسطة موارد تسجيل معدّل (RRO) مختلفة.
لإعداد التحكم في الوصول إلى RRO:
- في المجلد "
res/values
"، أنشئoverlayable.xml
. - أنشئ علامات الموارد
<overlayable>
. - حدِّد السمة
name
للعلامة<overlayable>
، يجب أن يكون فريدًا في الحزمة. يمكن أن يستهدف كل تراكب مجموعة واحدة قابلة للتراكب فقط. - حدِّد العلامة
<policy>
داخل<overlayable>
. - حدد مجموعات الموارد التي يمكن تركيبها. مثل:
<resources> <overlayable name="OverlayableResources"> <policy type="public"> <item type="string" name="app_title" /> </policy> </overlayable> </resources>
لتطبيق التغييرات التالية على مشروع RRO الخاص بك:
- في المجلد "
res/xml
"، أنشئoverlays.xml
. يمكنك الاطّلاع على الإدخال في نموذج الرمز أدناه لـoverlay
. - حدِّد الموارد التي سيتم تجاوزها.
- إضافة
android:resourcesMap="@xml/overlays"
إلى<overlay>
فيAndroidManifest.xml
. على سبيل المثال، في عينة التعليمات البرمجية أدناه، يمكنك الاطلاع على إدخال<overlay>
- ضبط
android:isStatic=”true”
لعرض محتوى ثابت يمكن لكل تراكب استهداف فقط لإحدى المجموعات التي يمكن تركيبها.
ضع في الاعتبار المثال التالي. ينتمي القسم الأول إلى "AndroidManifest.xml
".
بينما يتعلّق القسم الثاني بالسمة overlays.xml
.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.car.ui.rro" android:versionCode="1" android:versionName="1.0"> <overlay android:targetName="OverlayableResources" android:resourcesMap="@xml/overlays" android:targetPackage="com.android.car.ui" android:priority="1" android:isStatic="false" /> </manifest> <overlay> <item target="string/app_title" value="@ string/app_title" /> </overlay>
يُرجى العِلم بأنّ مصادر RRO الحالية تعمل حاليًا في نظام التشغيل Android 10. التنبيه
أي أن يتم تثبيتها باستخدام PackageManagerRRO، يجب أن تكون الحزم إما مثبّتة مسبقًا أو
باستخدام المفتاح نفسه المستخدَم في التطبيق المستهدَف. في Android 10، يمكن تركيب ملفات التنسيق. ومع ذلك،
فإن القيام بذلك يتطلب استخدام requireViewById()
مع الحصول على طريقة العرض بدلاً من
findViewById()
في Android 10، تم تنفيذ هذا التغيير على Car-ui-lib
دعم تراكبات التخطيط.
سيمكنك الإصدار الرئيسي التالي من Android تركيب ملف تخطيط تحديد موارد جديدة في حزمة RRO والرجوع إليها داخليًا.
إضافة مراجع خاصة بالمصنّع الأصلي للجهاز
للتغلب على قيود RRO التي تمنع إضافة موارد المصنّع الأصلي للجهاز:
- يمكنك توسيع أُطر العمل أو القاعدة باستخدام تراكب وقت الإنشاء، مع إضافة ما يلزم الموارد.
- يمكنك الاطّلاع على هذه الموارد من المصنِّع الأصلي للجهاز RRO باستخدام مساحة الاسم في
*android:
.
على سبيل المثال، في ما يلي طريقة لإضافة منتج قابل للرسم خاص بالمصنّع الأصلي للجهاز واستخدامه في RRO:
-
<path-to-OEM-overlays>
-
overlay/framework/base/core/res/res/drawable/
-
oem_background_drawable.xml
-
-
rro/res/values
-
drawables.xml
<resources> <item type="drawable" name="car_ui_toolbar_background"> @*android:drawable/oem_background_drawable </item> </resources>
-
-
التعامل مع العلامات التجارية المتعددة
تحتوي ملفات بيان RRO على بناء جملة للسماح بتطبيقها بشكل مشروط بناءً على النظام المواقع. للتعامل مع علامات تجارية متعدّدة في نسخة نظام واحدة، يمكن للمصنّعين الأصليين للأجهزة استخدام هذه السمة يتبعها (راجِع البنية العامة).
<?xml version=“1.0” encoding=“utf-8”?> <manifest xmlns:android=“http://schemas.android.com/apk/res/android” package=“{{RRO_PACKAGE_NAME}}”/> <application android:hasCode=“false”/> <overlay android:priority=“10” android:targetPackage=“{{TARGET_PACKAGE_NAME}}” android:requiredSystemPropertyName=“ro.product.sku” android:requiredSystemPropertyValue=“<your-product-sku>”/> </manifest>
بنية android:requiredSystemPropertyName
سيؤدي android:requiredSystemPropertyValue
إلى تفعيل RRO هذا فقط
إذا كانت خاصية النظام المقابلة تطابق القيمة المقدمة. يمكن للمصنّعين الأصليين للأجهزة تعريف مضاعفات
ذات الصلة بالحسابات RRO هذه، وجميعها مُفعَّلة بشكلٍ ثابت، وتحتوي على واحدة نشطة فقط في كل مرة.
إضافة مكتبة واجهة مستخدم السيارة إلى هدف
لدمج مكتبة واجهة مستخدم السيارة مع أحد أهداف Android، يجب تضمين مقتطف الرمز التالي:
# Include build-time overlays PRODUCT_PACKAGE_OVERLAYS += \ <path-to-oem-overlays>/overlay # Define package names to generate RROs for CAR_UI_RRO_PACKAGE_NAMES += \ com.android.car.ui.paintbooth \ com.android.car.media \ com.android.car.dialer \ com.android.car.linkviewer \ com.android.car.settings \ com.android.car.systemupdater \ com.google.android.apps.automotive.inputmethod \ com.google.android.apps.automotive.templates.host \ ... # Include generated RROs PRODUCT_PACKAGES += \ oem-com-android-car-ui-paintbooth \ oem-com-android-car-media \ oem-com-android-car-dialer \ oem-com-android-car-linkviewer \ oem-com-android-car-settings \ oem-com-android-car-systemupdater \ oem-com-google-android-apps-automotive-inputmethod \ oem-com-google-android-apps-automotive-templates-host \ ...
-
يؤدي إلى إنشاء
<path-to-OEM-overlays>/rro/Android.mk
لـ RRO واحد لكل منها. من الحزم المسماة فيCAR_UI_RRO_PACKAGE_NAMES
. -
تتضمّن هذه القيمة التي تم إنشاؤها في "
PRODUCT_PACKAGES
". -
يتم تضمين تراكب وقت الإصدار في
PRODUCT_PACKAGE_OVERLAYS
لإضافة منتجات خاصة بالمصنّع الأصلي للجهاز. الموارد.
لمعرفة الحزم المتوافقة مع car-ui-lib
، يُرجى الاطّلاع على قائمة الحِزم التي تحتوي على car-ui-lib.