Блокировка приложения

Функция блокировки приложений позволяет пользователям защищать отдельные приложения с помощью уникального PIN-кода. Это защищает конфиденциальные данные от доступа гостей или третьих лиц, особенно когда основной пользователь отсутствует в автомобиле.

Функция блокировки приложений работает независимо от блокировки профиля. Такая конструкция предоставляет пользователям возможность защитить определенные конфиденциальные приложения, не блокируя при этом весь профиль пользователя.

Приложение App Lock доступно в виде отдельного приложения для Android 14 (уровень API 34) и выше. Вы можете разрабатывать это приложение отдельно от основной платформы Android Automotive OS (AAOS). Однако вы должны развернуть приложение App Lock как привилегированное приложение с платформенной подписью, включенное в образ вашей платформы.

Пользователи получают уведомление о функции блокировки приложений при их установке:

Уведомление о блокировке приложения отображается после установки приложения.

Рисунок 1. Уведомление о блокировке приложения, отображаемое после установки приложения.

Функция блокировки приложений отключена по умолчанию. После включения этой функции пользователю будет предложено установить PIN-код. Этот PIN-код впоследствии потребуется для доступа к любому приложению, защищенному функцией блокировки приложений:

Блокировка приложения настройки

Рисунок 2. Настройки блокировки приложений.

При попытке открыть заблокированное приложение пользователю предлагается ввести PIN-код блокировки приложения:

При попытке открыть заблокированное приложение появляется сообщение App Lock.

Рисунок 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 Media App, начиная с версии 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>

Функция App Lock сбрасывает PIN-код и удаляет личные данные приложения, когда пользователь проходит аутентификацию с помощью учетной записи, тип которой соответствует config_recoveryAccountType .

Оформите ссылочный код

Для настройки эталонного кода используйте наложения ресурсов времени выполнения (RRO) для наложения SensitiveAppLockOverlayableResources .

Поскольку App Lock использует библиотеку Car UI Library, ваши существующие RRO-файлы из библиотеки Car UI Library также могут быть применены к App Lock.

Клавиши 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>

Поддержка режима приостановки работы в оперативной памяти

Для поддержки режима приостановки работы в оперативной памяти необходимо добавить службу блокировки приложений в 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>

Приложение App Lock необходимо импортировать в файл 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>