שילוב המארח AOSP

‫Google Automotive App Host הוא חלק מספריית האפליקציות למכוניות של פרויקט הקוד הפתוח של Android ‏ (AOSP). מפתחים של צד שלישי (3P) משתמשים בו כדי להפעיל אפליקציות ל-Android Automotive. App Host היא אפליקציית מערכת שמאפשרת לאפליקציות רכב של צד שלישי להציג רכיבי ממשק משתמש (UI) בסגנון יצרן ציוד מקורי (OEM) בשמן.

כדי להפעיל אפליקציות של צד שלישי, צריך להתקין גם את האפליקציה של צד שלישי וגם את AOSP Automotive App Host:

  • ‫Automotive App Host מספק לאפליקציות של צד שלישי קבוצה של תבניות ורכיבי ממשק משתמש שמותאמים לרכבים, כולל יכולות כמו שימושיות ובטיחות.
  • יצרני ציוד מקורי (OEM) יכולים לעצב את תבניות ורכיבי ממשק המשתמש האלה.
  • מה התוצאה? אפליקציות של צד שלישי משולבות בצורה טובה מבחינה ויזואלית במערכת המידע והבידור של יצרן הציוד המקורי.

בדף הזה מוסבר איך ליצור את מארח האפליקציות לרכב ב-AOSP מתוך פרויקט Gradle בענף ub-automotive, ואיך לשלב את מארח האפליקציות לרכב ב-AOSP ביעדים של רכבים.

בדיקת הקוד

כדי לראות את הקוד הלא מאוגד:

  1. מריצים את הפקודה הבאה:
    repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master
    repo sync -j4
  2. למידע נוסף על עבודה עם קוד מקור של AOSP, אפשר לעיין במאמר בנושא הפעלת לקוח Repo.

  3. מתקינים את Android Studio.

יצירת קובץ ה-APK של המארח ב-AOSP

  1. בודקים את ub-automotive ואז פותחים את פרויקט Gradle בתיקייה packages/apps/Car/Templates/Host.
  2. כדי להגדיר את הפרויקט באמצעות Android SDK, צריך להגדיר את הקובץ local.properties של הפרויקט. אפשר למצוא את הנתיב בקטע Android SDK Settings (הגדרות Android SDK) ב-Android Studio.
    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.