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

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

لتشغيل التطبيقات التابعة لجهات خارجية، يجب أن يكون كلّ من التطبيق التابع للجهة الخارجية و"مضيف تطبيق AOSP للسيارات": مثبت:

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

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

تحقق من الرمز

للاطلاع على الرمز غير المجمّع:

  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 في التطبيق. استوديو YouTube.
    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
      …

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

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