تخصيص التطبيقات

بعد أن أصبحت مكونات مكتبة واجهة مستخدم السيارة ومواردها في التطبيقات، من أجل تخصيص لهذه التطبيقات، يجب على المصنّعين الأصليين للأجهزة تقديم طبقتين:

  • يضيف تراكب وقت التصميم أي موارد مطلوبة تراكب موارد وقت التشغيل (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:

  1. في المجلد "res/values"، أنشئ overlayable.xml.
  2. أنشئ علامات الموارد <overlayable>.
  3. حدِّد السمة name للعلامة <overlayable>، يجب أن يكون فريدًا في الحزمة. يمكن أن يستهدف كل تراكب مجموعة واحدة قابلة للتراكب فقط.
  4. حدِّد العلامة <policy> داخل <overlayable>.
  5. حدد مجموعات الموارد التي يمكن تركيبها. مثلاً:
      <resources>
          <overlayable name="OverlayableResources">
              <policy type="public">
                  <item type="string" name="app_title" />
              </policy>
          </overlayable>
      </resources>
      

لتطبيق التغييرات التالية على مشروع RRO الخاص بك:

  1. في المجلد "res/xml"، أنشئ overlays.xml. يمكنك الاطّلاع على الإدخال في نموذج الرمز أدناه لـ overlay.
  2. حدِّد الموارد التي سيتم تجاوزها.
  3. إضافة android:resourcesMap="@xml/overlays" إلى <overlay> في AndroidManifest.xml. على سبيل المثال، في عينة التعليمات البرمجية أدناه، يمكنك الاطلاع على إدخال <overlay>
  4. ضبط 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.