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

Рисунок 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 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>