Google 致力于为黑人社区推动种族平等。查看具体举措

集成指南

本文概述了如何集成未捆绑应用。拨号器、媒体、车载设备界面库和短信等应用被视为未捆绑应用。这些应用未与 Android 平台捆绑,并且包含用于从汽车端手机配套应用和用户体验接收数据的逻辑,其中包括关联和功能注册设置。

通过未捆绑代码构建的 APK 可在多个版本的平台上使用。

查看代码

如要查看未捆绑的代码,请执行以下操作:

  1. 请运行以下命令:
    repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master
    repo sync -cq -j4
    
  2. 如需详细了解如何使用 AOSP 源代码,请参阅初始化 Repo 客户端

构建代码

Android Studio

如需在 Android Studio 中构建代码,请执行以下操作:

  1. 在 Android Studio 中,导入此 build 文件:
    packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle
  2. 请务必在 Android Studio 中将 Gradle JDK 设为不低于版本 11 的版本:

    版本 11
    图 1. 版本 11
  3. 构建所需的 APK。

命令行

如需从命令行构建代码,请执行以下操作:

  1. 通过以下两种方式之一设置 Android SDK 位置:
    • 创建 packages/apps/Car/libs/aaos-apps-gradle-project/local.properties,然后设置其包含的 sdk.dir 属性。打开项目时,Android Studio 可以自动执行此操作。例如,使用 sdk.dir=/Users/MY-USERNAME/Library/Android/sdk

    • 使用指向 Android SDK 的路径设置 ANDROID_SDK_ROOT 环境变量。
  2. 打开命令提示符或 shell 窗口。
  3. 前往 packages/apps/Car/libs/unbundled-apps-gradle-project
  4. 运行以下命令:
    ./gradlew assemble

所需的最低 API 级别

每个未捆绑应用都可以在版本不低于其 minSdkVersion 的 Android 平台上运行。下表列出了每个应用支持的最低 API 版本:

应用 最低 API 级别
日历 29
车载设备界面库 29
CompanionDevice 29
拨号器 31
媒体 30
短信 30
Google Automotive App Host 29

将预 build 集成到系统映像中

Android 13 及更高版本的映像

未捆绑代码已从 Android 13 平台中移除。因此,在执行下列操作时,可能需要将预构建的 APK 添加到平台 build 中:

  • CDD 合规性测试
  • 配置特权应用

这是通过 android_app_import Soong 规则实现的:

android_app_import {
    name: "CarMediaApp",
    apk: "CarMediaApp.apk",
    privileged: true,
    certificate: "platform", // Media must be signed by the platform
    required: ["allowed_privapp_com.android.car.media"],
}

Android 12 及更低版本

只要应用支持 Android 平台版本(见上表),就可以将 APK 添加到相应系统映像中。不过,大多数未捆绑应用都具有版本低于 Android 13 的平台中所含的之前版本的源代码。默认情况下,Soong 会为源代码提供高于预构建的优先级。因此,需要在 android_app_import 规则内将 prefer 标记设为 true

android_app_import {
    name: "CarDialerApp",
    apk: "CarDialerApp.apk",
    privileged: true,
    presigned: true, // Dialer can have its own signature
    required: ["allowed_privapp_com.android.car.dialer"],
    overrides: ["Dialer"],
    prefer: true, // The prebuilt replaces a source target with the same name,
    }

按未捆绑类型列出的应用

应用 特权未捆绑 未捆绑
(无需在系统分区中)
系统签名 非系统签名
日历 X
CompanionDevice X
拨号器 X
Google Automotive App Host X
媒体 X
短信 X
更新分发 OTA OTA 或 Play 商店 OTA 或 Play 商店