集成非捆绑应用

包含拨号器、媒体、Car UI 库和短信的应用被视为非捆绑应用(即,它们与 Android 平台是非捆绑的)。此类应用包含用于接收来自手机配套应用的数据的逻辑,以及车载端的 UX,包括关联和功能注册设置。从非捆绑代码构建的 APK 可与多个版本的平台配合使用。

查看代码

要查看非捆绑代码,请运行以下命令

repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master
repo sync -cq -j4

要详细了解如何使用 AOSP 源代码,请参阅初始化 Repo 客户端

构建代码

您可以使用 Android Studio 或从命令行构建代码。

Android Studio

要在 Android Studio 中构建代码

  1. 在 Android Studio 中,导入以下构建文件

    packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle
    
  2. 确保 Gradle JDK 设置为版本 11 或更高版本

    Version 11

    图 1. 在 Android Studio 中将 Gradle JDK 设置为版本 11。

命令行

要从命令行构建代码

  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/aaos-apps-gradle-project

  4. 运行以下命令

    ./gradlew assemble

最低要求的 API 级别

每个非捆绑应用都可在 Android 平台上运行,其版本等于或高于其 minSdkVersion。下表列出了每个应用支持的最低 API 版本

应用 最低 API 级别
日历 29
Car UI 库 29
CompanionDevice 29
拨号器 31
媒体 30
Messenger (SMS) 30
AOSP 主机 29

将预构建版本集成到系统映像中

如果 Android 平台版本受应用支持(请参阅上一节中的表格),您可以将 APK 添加到系统映像。但是,Android 平台版本之间的集成步骤有所不同。

Android 13 及更高版本

Android 13 及更高版本不包含非捆绑应用的源代码,但您可以在平台构建中包含预构建的 APK,以用于 CDD 合规性测试或预配特权应用等用例。要指定 APK,请使用 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 12 及更低版本包含非捆绑应用的源代码,但您仍然可以指定要包含的预构建 APK。由于 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
应用 - CompanionDeviceSupport X
应用 - 拨号器 X
应用 - AOSP 主机 X
应用 - 媒体 X
应用 - Messenger (SMS) X
更新分发 OTA OTA 或 Google Play OTA 或 Google Play