يُعدّ تطبيق 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 في أهداف السيارة.
الاطّلاع على الرمز
للاطّلاع على الرمز غير المجمَّع، اتّبِع الخطوات التالية:
- نفِّذ الأمر التالي:
repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master repo sync -j4
لمزيد من المعلومات حول استخدام الرمز المصدري لنظام التشغيل AOSP، يُرجى الاطّلاع على تهيئة عميل Repo.
- ثبِّت استوديو Android.
إنشاء حِزمة APK المضيفة لنظام التشغيل AOSP
- اطّلِع على
ub-automotiveثم افتح مشروع Gradle ضمنpackages/apps/Car/Templates/Host. - لضبط المشروع باستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Android، عليك ضبط ملف
local.propertiesالخاص بمشروعك. يمكنك العثور على المسار ضمن "إعدادات حزمة تطوير البرامج (SDK) لنظام التشغيل Android" في "استوديو Android".sdk.dir=${path_to_android_sdk_location}
- أنشئ حزمة APK المضيفة كمشروع Gradle نموذجي. على سبيل المثال، نفِّذ الأمر
gradle:./gradlew :app:assembleDebug
يقع ملف APK في:
packages/apps/Car/Templates/Host/app/build/outputs/apk/debug/app-debug.apk
تضمين مضيف AOSP
- أنشئ ملف
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)
- أعِد تسمية
app-debug.apkإلىAOSPHost.apkوضَع حزمة APK في المجلد نفسه الذي يحتوي علىAndroid.mk. - أضِف وحدة
CarAOSPHostإلى استهدافاتك على النحو التالي:PRODUCT_PACKAGES:PRODUCT_PACKAGES += \ CarAOSPHost \
إضافة إعدادات الأذونات
- أنشئ ملفًا باسم
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>
- في هدفك، أضِف ملف الإعداد إلى أهدافك:
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.