应用锁

应用锁定功能可让用户使用唯一的 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>