应用锁定功能可让用户使用唯一的 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-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>
build 配置
应用锁定需要系统特许权限。支持应用锁的平台还必须声明系统功能 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) 和 Guest 用户不支持应用锁定,因此您必须仅在辅助个人资料中启用应用锁定。使用此配置可为辅助用户启用应用。
例如,在 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>