Blokada aplikacji umożliwia zabezpieczenie poszczególnych aplikacji za pomocą unikalnego kodu PIN. Chroni to dane wrażliwe przed dostępem gości lub użytkowników dodatkowych, zwłaszcza gdy użytkownik główny nie znajduje się w pojeździe.
Blokada aplikacji działa niezależnie od blokady profilu. Dzięki temu użytkownicy mogą zabezpieczać konkretne aplikacje zawierające dane wrażliwe bez konieczności blokowania całego profilu użytkownika.
Blokada aplikacji jest dostępna jako osobna aplikacja na Androidzie 14 (API na poziomie 34) i nowszym. Możesz opracować tę aplikację niezależnie od podstawowej platformy systemu operacyjnego Android Automotive (AAOS). Musisz jednak wdrożyć aplikację Blokada aplikacji jako podpisaną przez platformę aplikację uprzywilejowaną, która jest częścią obrazu platformy.
Użytkownicy są informowani o funkcji blokady aplikacji podczas instalowania aplikacji:
Rysunek 1. Powiadomienie o blokadzie aplikacji wyświetlane po zainstalowaniu aplikacji.
Blokada aplikacji jest domyślnie wyłączona. Po włączeniu tej funkcji użytkownik zostanie poproszony o ustawienie kodu PIN. Ten kod PIN jest później wymagany do uzyskania dostępu do dowolnej aplikacji zabezpieczonej przez blokadę aplikacji:
Rysunek 2. Ustawienia blokady aplikacji.
Gdy użytkownik spróbuje otworzyć zablokowaną aplikację, pojawi się prośba o wpisanie kodu PIN blokady aplikacji:
Rysunek 3. Komunikat blokady aplikacji podczas próby otwarcia zablokowanej aplikacji.
Konfigurowanie blokady aplikacji
Aby zastosować konfiguracje aplikacji, edytuj plik 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>
Dostosowywanie aplikacji, które można zablokować
Domyślnie aplikacji systemowych nie można zablokować. Aplikacje systemowe, które mają być blokowane, możesz określić za pomocą konfiguracji system_lockable_packages.
Kluczowych aplikacji, takich jak Ustawienia, aplikacje do nawigacji i asystenci głosowi, nie można zablokować, ponieważ może to spowodować nieprzewidywalne działanie systemu.
Aby włączyć blokowanie aplikacji systemowej, użyj listy 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>
Konfigurowanie zawieszenia multimediów
Domyślnie aplikacje multimedialne mogą być blokowane, jeśli platforma obsługuje aplikację multimedialną w samochodzie w wersji Car-apps-release 17 lub nowszej. Jeśli nie obsługujesz wersji 17 lub nowszej Car-apps-release, możesz wyłączyć blokowanie aplikacji do multimediów:
<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">false</bool>
Konfigurowanie procesu odzyskiwania
Użytkownicy mogą zapomnieć kodu PIN blokady aplikacji. Użyj config_recoveryAccountType, aby dostosować rodzaj konta używanego do odzyskiwania kodu PIN.
<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>
Blokada aplikacji resetuje kod PIN i usuwa prywatne dane aplikacji, gdy użytkownik uwierzytelni się za pomocą konta o typie pasującym do config_recoveryAccountType.
Stylizowanie kodu referencyjnego
Aby dostosować kod referencyjny, użyj nakładek zasobów w czasie działania (RRO), aby nałożyć SensitiveAppLockOverlayableResources.
Blokada aplikacji korzysta z biblioteki Car UI, więc istniejące RRO biblioteki Car UI można też zastosować w Blokadzie aplikacji.
Klawisze klawiatury PIN mają ten sam styl co zdefiniowany w 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>
Możesz też określić wymiary klawiatury 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>
Obsługa zawieszania do pamięci RAM
Aby obsługiwać zawieszanie do pamięci RAM, musisz dodać usługę blokady aplikacji do 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>
Konfiguracja kompilacji
Blokada aplikacji wymaga uprawnień systemowych. Platformy, które obsługują blokadę aplikacji, muszą też deklarować funkcję systemową com.android.car.sensitive_app_lock.
Dodaj deklarację funkcji i uprawnienia do 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>
Aplikację blokującą należy zaimportować jako podpisaną aplikację systemową w pliku 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,
}
Tryb użytkownika systemu bez monitora (HSUM) i użytkownicy-goście nie obsługują blokady aplikacji, dlatego musisz włączyć blokadę aplikacji tylko w profilach dodatkowych. Użyj tej konfiguracji, aby włączyć aplikację dla użytkowników dodatkowych.
Na przykład w pliku 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>