دمج مضيف AOSP

يُعدّ تطبيق Automotive App Host في "مشروع Android المفتوح المصدر" (AOSP) جزءًا من "مكتبة تطبيقات السيارات" التي يستخدمها مطوّرو التطبيقات التابعون لجهات خارجية (3P) لإتاحة التطبيقات على Android Automotive. App Host هو تطبيق نظام يتيح لتطبيقات السيارات التابعة لجهات خارجية عرض عناصر واجهة المستخدم (UI) المصمَّمة وفقًا لأسلوب الشركة المصنّعة للمعدّات الأصلية نيابةً عنها.

لتشغيل تطبيقات تابعة لجهات خارجية، يجب تثبيت كل من تطبيق الجهة الخارجية وAOSP Automotive App Host:

  • يوفّر Automotive App Host لتطبيقات الجهات الخارجية مجموعة من نماذج ومكوّنات واجهة المستخدم المحسَّنة للمركبات، بما في ذلك إمكانات مثل سهولة الاستخدام والأمان.
  • يمكن لمصنّعي المعدات الأصلية تصميم نماذج ومكوّنات واجهة المستخدم هذه.
  • النتيجة؟ تتكامل تطبيقات الجهات الخارجية بشكل جيد من الناحية المرئية مع نظام الترفيه والمعلومات الخاص بالمصنّع الأصلي للجهاز.

توضّح هذه الصفحة كيفية إنشاء AOSP Automotive App Host من مشروع Gradle في الفرع ub-automotive، ثم كيفية دمج AOSP Automotive App Host في أهداف السيارة.

الاطّلاع على الرمز

للاطّلاع على الرمز غير المجمَّع، اتّبِع الخطوات التالية:

  1. نفِّذ الأمر التالي:
    repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master
    repo sync -j4
  2. لمزيد من المعلومات حول استخدام الرمز المصدري لنظام التشغيل AOSP، يُرجى الاطّلاع على تهيئة عميل Repo.

  3. ثبِّت استوديو Android.

إنشاء حِزمة APK المضيفة لنظام التشغيل AOSP

  1. اطّلِع على ub-automotive ثم افتح مشروع Gradle ضمن packages/apps/Car/Templates/Host.
  2. لضبط المشروع باستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Android، عليك ضبط ملف local.properties الخاص بمشروعك. يمكنك العثور على المسار ضمن "إعدادات حزمة تطوير البرامج (SDK) لنظام التشغيل Android" في "استوديو Android".
    sdk.dir=${path_to_android_sdk_location}
  3. أنشئ حزمة APK المضيفة كمشروع Gradle نموذجي. على سبيل المثال، نفِّذ الأمر gradle:
    ./gradlew :app:assembleDebug

    يقع ملف APK في:

    packages/apps/Car/Templates/Host/app/build/outputs/apk/debug/app-debug.apk

تضمين مضيف AOSP

  1. أنشئ ملف Android.mk جديدًا يتضمّن المحتوى التالي:
    LOCAL_PATH := $(my-dir)
    ################## Start of AOSPHost target ##################
    include $(CLEAR_VARS)
    LOCAL_MODULE := CarAOSPHost
    LOCAL_LICENSE_KINDS := legacy_notice
    LOCAL_LICENSE_CONDITIONS := notice
    LOCAL_MODULE_OWNER := google
    LOCAL_SRC_FILES := AOSPHost.apk
    LOCAL_MODULE_CLASS := APPS
    LOCAL_MODULE_TAGS := optional
    LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
    LOCAL_BUILT_MODULE_STEM := package.apk
    LOCAL_CERTIFICATE := PRESIGNED
    LOCAL_PRIVILEGED_MODULE := true
    LOCAL_PRODUCT_MODULE := true
    LOCAL_DEX_PREOPT := false
    include $(BUILD_PREBUILT)
  2. أعِد تسمية app-debug.apk إلى AOSPHost.apk وضَع حزمة APK في المجلد نفسه الذي يحتوي على Android.mk.
  3. أضِف وحدة CarAOSPHost إلى استهدافاتك على النحو التالي: PRODUCT_PACKAGES:
    PRODUCT_PACKAGES += \
       CarAOSPHost \

إضافة إعدادات الأذونات

  1. أنشئ ملفًا باسم com.android.car.templates.host.xml يتضمّن ما يلي:
    <permissions>
        <!-- Rename the package to com.android.car.templates.host -->
        <privapp-permissions package="com.android.car.templates.host">
            <!-- To be able to display activities in the cluster -->
            <permission name="android.car.permission.CAR_DISPLAY_IN_CLUSTER" />
    
            <!-- To be able to show navigation state (turn by turn directions) in the cluster.-->
            <permission name="android.car.permission.CAR_NAVIGATION_MANAGER" />
    
            <!-- To be considered a system-approved host -->
            <permission name="android.car.permission.TEMPLATE_RENDERER" />
        </privapp-permissions>
    
        <!-- Declare support for templated applications. -->
        <feature name="android.software.car.templates_host" />
    </permissions>
  2. في هدفك، أضِف ملف الإعداد إلى أهدافك:
    PRODUCT_COPY_FILES += \
        <the file root>/com.android.car.templates.host.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/com.android.car.templates.host.xml

إنشاء الهدف

عند إنشاء الجهاز المستهدف، يتم تثبيت المضيف ومنح الإذن:

      
      android.car.permission.CAR_NAVIGATION_MANAGER: granted=true
      android.car.permission.CAR_DISPLAY_IN_CLUSTER: granted=true
      android.car.permission.TEMPLATE_RENDERER: granted=true
      

اختبار عملية الدمج

لإنشاء النماذج وتثبيتها، يُرجى الاطّلاع على مشروع GitHub هذا: car-samples/car_app_library.