دليل دمج مضيف AOSP

إنّ Automotive App Host من مشروع Android Open Source Project (AOSP) هو جزء من مكتبة تطبيقات السيارات التي يستخدمها المطوّرون التابعون لجهات خارجية لتفعيل التطبيقات على نظام Android Automotive. "مضيف التطبيقات" هو تطبيق نظام يسمح لتطبيقات السيارات التابعة لجهات خارجية بعرض مكونات واجهة المستخدم (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.