AOSP 主机集成指南

Android 开源项目 (AOSP) Automotive App Host 是汽车应用库的一部分,第三方开发者使用该库来启用 Android Automotive 应用。App Host 是一个系统应用,使第三方汽车应用能够代表其渲染原始设备制造商 (OEM) 样式的界面组件。

如需运行第三方应用,必须同时安装第三方应用和 AOSP Automotive App Host:

  • Automotive App Host 为第三方应用提供一套专为车辆优化的界面模板和组件,包括易用性和安全性等功能。
  • OEM 可以为这些界面模板和组件设置样式。
  • 效果呢?第三方应用可以在视觉上很好地集成到 OEM 的信息娱乐系统中。

本页介绍了如何在 ub-automotive 分支中从 Gradle 项目生成 AOSP Automotive App Host,以及如何将 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 Studio

创建 AOSP 主机 APK

  1. 检出 ub-automotive 分支,然后打开 packages/apps/Car/Templates/Host 下的 Gradle 项目。
  2. 如要使用 Android SDK 配置项目,请配置项目的 local.properties 文件。您可以在 Android Studio 中的 Android SDK 设置下找到此路径。
    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