O Bloqueio de apps permite que os usuários protejam apps individuais com um código PIN exclusivo. Isso protege dados sensíveis contra acesso de convidados ou usuários secundários, principalmente quando o usuário principal não está no veículo.
O Bloqueio de apps funciona de forma independente do bloqueio de perfil. Esse design oferece aos usuários a flexibilidade de proteger apps sensíveis específicos sem precisar bloquear todo o perfil do usuário.
O Bloqueio de apps está disponível como um app não agrupado no Android 14 (nível 34 da API) e versões mais recentes. Você pode desenvolver esse app separadamente da plataforma principal do Android Automotive OS (AAOS). No entanto, é necessário implantar o app Bloqueio de apps como um app privilegiado assinado pela plataforma incluído na imagem da plataforma.
Os usuários são informados sobre o recurso Bloqueio de apps quando instalam apps:
Figura 1. Notificação do Bloqueio de apps mostrada após a instalação de um app.
O Bloqueio de apps fica desativado por padrão. Ao ativar o recurso, o usuário recebe uma solicitação para definir um PIN. Esse PIN é necessário para acessar qualquer app protegido pelo Bloqueio de apps:
Figura 2. Configurações do Bloqueio de apps.
Ao tentar abrir um app bloqueado, o usuário recebe uma solicitação para inserir o código PIN do Bloqueio de apps:
Figura 3. Solicitação do Bloqueio de apps ao tentar abrir um app bloqueado.
Configurar o Bloqueio de apps
Para aplicar as configurações do app, edite 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>
Personalizar apps bloqueáveis
Por padrão, os apps do sistema não podem ser bloqueados. É possível especificar os apps do sistema que podem ser bloqueados usando a configuração system_lockable_packages.
Os apps principais, como Configurações, apps de navegação e assistentes de voz, não podem ser bloqueados porque isso pode causar um comportamento imprevisível do sistema.
Para ativar o Bloqueio de apps para um app do sistema, use a lista 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>
Configurar a suspensão de mídia
Por padrão, os apps de mídia podem ser bloqueados se a plataforma oferecer suporte ao app de mídia para carros da versão 17 ou mais recente do Car-apps-release. Se você não oferece suporte à versão 17 ou mais recente do Car-apps-release, é possível desativar o bloqueio de apps de mídia:
<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">false</bool>
Configurar um fluxo de recuperação
Os usuários podem esquecer o PIN do Bloqueio de apps. Use config_recoveryAccountType para personalizar o tipo de conta usado para a recuperação do PIN.
<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>
O Bloqueio de apps redefine o PIN e limpa os dados do app particular quando um usuário faz a autenticação com uma conta do tipo que corresponde a config_recoveryAccountType.
Estilizar o código de referência
Para personalizar o código de referência, use sobreposições de recursos de ambiente de execução (RROs, na sigla em inglês) para sobrepor
SensitiveAppLockOverlayableResources.
Como o Bloqueio de apps usa a biblioteca Car UI, as RROs da biblioteca Car UI atuais também podem ser aplicadas ao Bloqueio de apps.
As chaves do teclado numérico usam o mesmo estilo definido em 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>
Também é possível definir as dimensões do teclado numérico:
<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>
Oferecer suporte à suspensão para RAM
Para oferecer suporte à suspensão para RAM, adicione o serviço Bloqueio de apps a
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>
Configuração do build
O Bloqueio de apps exige permissões privilegiadas do sistema. As plataformas que oferecem suporte ao Bloqueio de apps também precisam declarar o recurso do sistema com.android.car.sensitive_app_lock.
Adicione a declaração de recurso e as permissões a 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>
O Bloqueio de apps precisa ser importado como um app do sistema assinado no arquivo 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,
}
Como o modo de usuário do sistema sem interface (HSUM, na sigla em inglês) e os usuários convidados não oferecem suporte ao Bloqueio de apps, é necessário ativar o Bloqueio de apps apenas em perfis secundários. Use essa configuração para ativar o app para usuários secundários.
Por exemplo, no seu 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>