应用锁可让用户使用唯一的 PIN 码保护各个应用。这样可以防止访客或辅助用户访问敏感数据,尤其是在主要用户不在车内时。
应用锁独立于个人资料锁定运行。这种设计让用户能够灵活地保护特定的敏感应用,而无需锁定整个用户个人资料。
应用锁在 Android 14(API 级别 34)及更高版本上以未捆绑应用的形式提供。您可以将此应用与核心 Android Automotive OS (AAOS) 平台分开开发。不过,您必须将应用锁应用部署为平台签名特权应用,并将其包含在平台映像中。
用户在安装应用时会收到有关应用锁功能的通知:
图 1. 安装应用后显示的应用锁通知。
应用锁默认处于停用状态。启用该功能后,系统会提示用户设置 PIN 码。随后,用户需要输入此 PIN 码才能访问受应用锁保护的任何应用:
图 2. 应用锁设置。
当用户尝试打开锁定的应用时,系统会提示用户输入应用锁 PIN 码:
图 3. 尝试打开锁定的应用时显示的应用锁提示。
配置应用锁
如需应用应用配置,请修改 res/values/config.xml:
<resources>
<!--A customizable list of system packages that appear in the App Lock settings. -->
<string-array name="system_lockable_packages">
<item>com.android.car.calendar</item>
</string-array>
<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">true</bool>
<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>
</resources>
自定义可锁定的应用
默认情况下,系统应用不可锁定。您可以使用 system_lockable_packages 配置指定可锁定的系统应用。
设置、导航应用和语音助理等核心应用无法锁定,因为这样做可能会导致不可预测的系统行为。
如需为系统应用启用应用锁,请使用 system_lockable_packages 列表:
<!-- List of system packages that appear in the App Lock settings. -->
<string-array name="system_lockable_packages">
<item>com.android.car.calendar</item>
</string-array>
配置媒体暂停
默认情况下,如果平台支持 Car-apps-release 17 或更高版本中的 Car Media App,则可以锁定媒体应用。如果您不支持 Car-apps-release 17 或更高版本,则可以停用媒体应用锁定:
<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">false</bool>
设置恢复流程
用户可能会忘记应用锁 PIN 码。使用 config_recoveryAccountType 自定义用于 PIN 码恢复的账号类型。
<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>
当用户使用与 config_recoveryAccountType 匹配的账号类型进行身份验证时,应用锁会重置 PIN 码并清除私有应用数据。
设置参考代码的样式
如需自定义参考代码,请使用运行时资源叠加层 (RRO) 叠加
SensitiveAppLockOverlayableResources。
由于应用锁使用车载设备界面库,因此您现有的车载设备界面库 RRO 也可以应用于应用锁。
PIN 码键盘键使用与 styles.xml 中定义的样式相同的样式:
<style name="PinPadKey" parent="Widget.CarUi.Button">
<item name="android:textSize">@dimen/pin_pad_key_text_size</item>
<item name="android:layout_height">@dimen/pin_pad_key_diameter</item>
<item name="android:layout_width">@dimen/pin_pad_key_diameter</item>
…
</style>
您还可以定义 PIN 码键盘尺寸:
<resources>
<!-- Default dimensions for PIN pad view -->
<dimen name="pin_pad_title_text_size">44sp</dimen>
<dimen name="pin_pad_subtitle_text_size">32sp</dimen>
<dimen name="pin_pad_key_diameter">96dp</dimen>
<dimen name="pin_pad_key_text_size">32sp</dimen>
<dimen name="pin_pad_key_padding">0dp</dimen>
<dimen name="pin_pad_row_spacing">10dp</dimen>
<dimen name="pin_pad_col_spacing">12dp</dimen>
</resources>
支持挂起到 RAM
如需支持挂起到 RAM,您必须将应用锁服务添加到
config_earlyStartupServices:
<string-array translatable="false" name="config_earlyStartupServices">
<!-- App Lock Persistent Background Service -->
<item>com.android.car.sensitiveapplock/.service.PersistentBackgroundService#bind=bind,user=foreground,trigger=userUnlocked</item>
</string-array>
构建配置
应用锁需要系统特权权限。支持应用锁的平台还必须声明系统功能 com.android.car.sensitive_app_lock。
将功能声明和权限添加到 com.android.car.sensitiveapplock.xml:
<permissions>
<feature name="com.android.car.sensitive_app_lock"/>
<privapp-permissions package="com.android.car.sensitiveapplock">
<permission name="android.permission.GET_ACCOUNTS_PRIVILEGED" />
<permission name="android.permission.QUERY_USERS" />
<permission name="android.permission.MEDIA_CONTENT_CONTROL" />
<permission name="android.car.permission.CAR_POWER" />
<permission name="android.permission.POST_NOTIFICATIONS" />
</privapp-permissions>
</permissions>
必须在 Android.bp 文件中将应用锁作为已签名的系统应用导入:
android_app_import {
name: "AppLock",
apk: "AppLock.apk",
certificate: "platform",
privileged: true,
required: [
"privapp-com.android.car.sensitiveapplock",
],
optional_uses_libs: [
"androidx.window.extensions",
"androidx.window.sidecar",
"com.android.oem.tokens", /* For Android 16+ */
],
}
prebuilt_etc {
name: "privapp-com.android.car.sensitiveapplock",
sub_dir: "permissions",
src: "com.android.car.sensitiveapplock.xml",
filename_from_src: true,
}
由于无头系统用户模式 (HSUM) 和访客用户不支持应用锁,因此您必须仅在辅助个人资料中启用应用锁。使用此配置为辅助用户启用该应用。
例如,在 preinstalled-packages.xml 中:
<config>
…
<!-- Config for the Sensitive App Lock app -->
<install-in-user-type package="com.android.car.sensitiveapplock">
<!-- Sensitive App Lock is only available to secondary users. Do not install app in Guest users. -->
<install-in user-type="android.os.usertype.full.SECONDARY" />
</install-in-user-type>
</config>