应用锁

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