Android Automotive OS 允许用户在汽车处于停车状态时在汽车的信息娱乐系统上运行您的视频应用。
在 Android Automotive OS 模拟器上测试现有应用
如需开始构建 Android Automotive OS 应用,首先应在 Android Automotive OS 模拟器上测试您的现有移动应用(适用于手机和平板电脑)。如需设置模拟器,请按照测试 Android 车载应用中的步骤操作。然后,您可以按照这些说明运行该应用。
运行应用时,您应该留意是否存在兼容性问题,示例如下:
- 信息娱乐屏幕采用固定屏幕方向。根据汽车应用质量指南,应用应同时支持竖屏和横屏方向。
- 适用于其他设备的 API 可能不适用于 Android Automotive OS。例如,某些 Google Play 服务 API 不适用于 Android Automotive OS。如需详细了解如何处理这些问题,请参阅停用功能。
配置应用的清单文件
如需以 Android Automotive OS 为目标平台,您的应用必须具有多项清单条目。有了这些条目,您便可以使用单独的 Automotive 外形规格将以 Android Automotive OS 为目标平台的应用提交到 Play 商店,并让应用进入人工审核流程,确保其可以在汽车上安全地使用。如需了解详情,请参阅分发 Android 汽车应用。
必须具备 Android Automotive OS 功能
若要在汽车上的 Play 商店中上架,专为 Android Automotive OS 构建的视频应用必须在 AndroidManifest.xml
文件中包含以下 <uses-feature>
和 <uses-library>
元素。
<manifest ...>
...
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
...
<application ...>
...
<uses-library
android:name="android-automotive-video"
android:required="true"/>
...
</application>
</manifest>
提交到非汽车轨道的应用无法声明上述 <uses-feature>
元素,因为它们不能依赖于汽车专用硬件。因此,如需在汽车和非汽车设备上提供相同的应用,应该至少为应用生成两个变种,一个用于汽车设备,另一个用于移动设备(手机和平板电脑)。如需详细了解如何创建这些单独的变种,请参阅以下文档:
应用的两个变种可以共用相同的软件包名称,但应采用不同的版本代码,因为它们将分别上传到 Play 商店的不同轨道。
或者,也可以分别针对移动设备和汽车 APK 或 app bundle 为应用使用单独的软件包名称,而不是使用单独的变种。如需了解每种方法的利弊,请参阅媒体应用开发者指南中的软件包名称。
除了前面提到的元素之外,为 Android Automotive OS 构建的应用还必须在根 <manifest>
元素中包含以下 <uses-feature>
元素。
<uses-feature
android:name="android.hardware.wifi"
android:required="false"/>
<uses-feature
android:name="android.hardware.screen.portrait"
android:required="false"/>
<uses-feature
android:name="android.hardware.screen.landscape"
android:required="false"/>
通过将这些功能明确设置为非必需功能,可确保应用不会与 Android Automotive OS 设备中的可用硬件功能发生冲突。
将应用标记为视频应用
为了表明您有支持视频的汽车应用,请将名为 automotive_app_desc.xml
的 XML 文件添加到项目的 res/xml/
目录中。此文件应包含以下内容:
<automotiveApp>
<uses name="video"/>
</automotiveApp>
然后,在清单的 <application>
元素中,添加以下引用此 XML 文件的 <meta-data>
元素:
<meta-data
android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
确保没有任何经过防分心优化的 activity
视频应用目前只能在停车状态下使用。因此,任何 <activity>
元素都不应包含以下 <meta-data>
元素:
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
在没有这项元数据的情况下,当汽车进入驾驶模式后,操作系统会自动阻止您的应用 activity,以减少让驾驶员分心的因素。对于您的应用,这将作为 onPause
生命周期回调发生;在此期间,您应确保来自您应用的视频和音频播放均处于暂停状态。
针对 Android Automotive OS 优化应用
为了尽可能向用户提供最佳体验,您可能需要根据应用是否在汽车上运行来启用或停用某些功能。
停用功能
如果让现有移动应用适用于 Android Automotive OS,该应用的某些功能可能会不相关或不可用。例如,汽车通常不提供对相机的访问权限。此外,只有部分 Google Play 服务适用于 Android Automotive OS。如需了解详情,请参阅适用于汽车的 Google Play 服务。
您可以使用 PackageManager.hasSystemFeature
API,通过检查有无 FEATURE_AUTOMOTIVE
功能来检测应用是否正在 Android Automotive OS 上运行。
Kotlin
val packageManager: PackageManager = ... // Get a PackageManager from a Context val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
Java
PackageManager packageManager = ... // Get a PackageManager from a Context boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
或者,如果您的应用还包含 Android Auto 组件,则可以使用汽车应用库中的 CarConnection API 来检测应用是正在 Android Automotive OS、Android Auto 上运行,还是根本未关联到汽车。
对于画中画 (PiP),您可以按照既定的最佳实践来检查相应功能是否可用,并采取相应的处理方式。
处理离线场景
尽管汽车的联网程度越来越高,但应用应该具备在没有互联网连接的情况下处理运行的能力,例如以下情况:
- 汽车制造商可能会在订阅套餐中提供移动数据网络服务(用户可能购买,也可能不购买)。
- 用户可能启用了移动数据网络,但在某些区域内,访问可能会受到限制(和使用手机时一样)。
- 汽车不一定有 Wi-Fi 无线装置。在有 Wi-Fi 装置的情况下,汽车可能永远无法进入 Wi-Fi 网络的覆盖范围;原始设备制造商 (OEM) 也可能已停用 Wi-Fi,改为使用移动网络。
应用应该准备好应对这些情况并优雅降级(例如,通过提供离线内容)。如需了解详情,请参阅网络优化最佳实践。
使用备用资源
为了有助于您的应用在汽车上运行,当在 Android Automotive OS 车辆上运行时,您可以使用 car
资源限定符提供备用资源。例如,如果您使用尺寸资源来存储内边距值,则可以为 car
资源集使用较大的值,以增大触摸目标。
在 Android Automotive OS 上测试视频应用
一般情况下,开发者可以按照测试 Android 车载应用中的说明操作。目前,只有 Android Studio 提供的 SDK 30 和 32 模拟器包含 android-automotive-video
库,因此应该使用它们来测试应用的 Automotive OS build。更低版本的 SDK 模拟器缺少该库;因此,通过 adb 安装需要该库的应用时,安装会失败。操作系统级别较低的正式版汽车有可能会包含该库。
常见问题解答
是否支持 Widevine DRM?
是,Android Automotive OS 支持 Widevine DRM L3。