Android 開放原始碼計畫主機整合指南

Android 開放原始碼計畫 (AOSP) Automotive App Host 屬於 Car App Library 的一部分 ,供第三方開發人員使用。應用程式主機是系統 應用程式,可讓第三方車用應用程式代替原始設備製造商 (OEM) 樣式的使用者介面 (UI) 元件。

如要執行第三方應用程式,必須同時採用第三方應用程式和 Android 開放原始碼計畫 Automotive App Host 安裝:

  • Automotive App Host 為第三方應用程式提供一組 UI 範本和元件 針對車輛最佳化,包括可用性和安全性等功能。
  • 原始設備製造商 (OEM) 可以設定這些 UI 範本和元件的樣式。
  • 成果第三方應用程式皆已整合至 資訊娛樂系統

本頁面說明如何透過以下項目,從 Gradle 專案產生 AOSP Automotive 應用程式主機: ub-automotive 分支版本,以及如何將 Android 開放原始碼計畫 Automotive App Host 整合至車輛 目標。

查看程式碼

如何查看未組合代碼:

  1. 執行下列指令:
    repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master
    repo sync -j4
    
  2. 如要進一步瞭解如何使用 Android 開放原始碼計畫原始碼,請參閱 初始化存放區用戶端

  3. 安裝 Android Studio

建立 Android 開放原始碼計畫主機 APK

  1. 查看 ub-automotive,然後在以下位置開啟 Gradle 專案: packages/apps/Car/Templates/Host
  2. 如要透過 Android SDK 設定專案,請設定專案的 local.properties 檔案。您可以在 Android 的「Android SDK 設定」底下找到該路徑
    sdk.dir=${path_to_android_sdk_location}
    
  3. 以一般 Gradle 專案的形式建立主機 APK。例如,執行 gradle 指令:
    ./gradlew :app:assembleDebug
    

    APK 檔案位於:

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

嵌入 Android 開放原始碼計畫主機

  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