Verrouillage d'application

Le verrouillage d'applications permet aux utilisateurs de sécuriser des applications individuelles avec un code unique. Cela permet de protéger les données sensibles contre l'accès par des invités ou des utilisateurs secondaires, en particulier lorsque l'utilisateur principal n'est pas dans le véhicule.

Le verrouillage des applications fonctionne indépendamment du verrouillage du profil. Cette conception permet aux utilisateurs de sécuriser des applications sensibles spécifiques sans avoir à verrouiller l'intégralité du profil utilisateur.

Le verrouillage d'applis est disponible en tant qu'application distincte sur Android 14 (niveau d'API 34) et versions ultérieures. Vous pouvez développer cette application séparément de la plate-forme Android Automotive OS (AAOS) principale. Toutefois, vous devez déployer l'application App Lock en tant qu'application privilégiée signée par la plate-forme et incluse dans l'image de votre plate-forme.

Les utilisateurs sont informés de la fonctionnalité Verrouillage d'applis lorsqu'ils installent des applications :

Notification de verrouillage d'application affichée après l'installation d'une application

Figure 1. Notification de verrouillage d'appli affichée après l'installation d'une application.

Le verrouillage d'applis est désactivé par défaut. Une fois la fonctionnalité activée, l'utilisateur est invité à définir un code PIN. Ce code est ensuite requis pour accéder à toute application sécurisée par App Lock :

Paramètres de verrouillage d'application

Figure 2. Paramètres du verrouillage d'applications.

Lorsque l'utilisateur tente d'ouvrir une application verrouillée, il est invité à saisir le code PIN de la fonctionnalité Verrouillage d'applis :

Invite de verrouillage d'appli lorsque vous essayez d'ouvrir une application verrouillée

Figure 3. Invite de verrouillage d'appli lorsque vous essayez d'ouvrir une application verrouillée.

Configurer le verrouillage de l'application

Pour appliquer les configurations d'application, modifiez 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>

Personnaliser les applications verrouillables

Par défaut, les applications système ne peuvent pas être verrouillées. Vous pouvez spécifier les applications système qui peuvent être verrouillées à l'aide de la configuration system_lockable_packages.

Les applications principales telles que les paramètres, les applications de navigation et les assistants vocaux ne peuvent pas être verrouillées, car cela pourrait entraîner un comportement imprévisible du système.

Pour activer le verrouillage d'une application système, utilisez la liste 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>

Configurer la suspension des contenus multimédias

Par défaut, les applications multimédias peuvent être verrouillées si la plate-forme est compatible avec l'application multimédia pour voiture à partir de la version 17 de Car-apps-release ou ultérieure. Si vous n'êtes pas compatible avec la version 17 ou ultérieure de Car-apps-release, vous pouvez désactiver le verrouillage des applications multimédias :

<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">false</bool>

Configurer un parcours de récupération

Les utilisateurs peuvent oublier le code secret de leur verrouillage d'applications. Utilisez config_recoveryAccountType pour personnaliser le type de compte utilisé pour la récupération du code.

<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>

Le verrouillage d'applis réinitialise le code et efface les données privées des applications lorsqu'un utilisateur s'authentifie avec un compte dont le type correspond à config_recoveryAccountType.

Mettre en forme le code de référence

Pour personnaliser le code de référence, utilisez des overlays de ressources d'exécution (RRO) pour superposer SensitiveAppLockOverlayableResources.

Comme le verrouillage d'applications utilise la bibliothèque Car UI, vos RRO de la bibliothèque Car UI existants peuvent également être appliqués au verrouillage d'applications.

Les touches du clavier à code utilisent le même style que celui défini dans 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>

Vous pouvez également définir les dimensions du clavier :

<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>

Prise en charge de la suspension vers la RAM

Pour prendre en charge la suspension sur RAM, vous devez ajouter le service App Lock à 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>

Configuration de compilation

Le verrouillage d'applications nécessite des autorisations système privilégiées. Les plates-formes compatibles avec le verrouillage d'applis doivent également déclarer la fonctionnalité système com.android.car.sensitive_app_lock.

Ajoutez la déclaration de fonctionnalité et les autorisations à 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>

Le verrouillage d'applications doit être importé en tant qu'application système signée dans le fichier 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,
}

Étant donné que le mode utilisateur système sans interface (HSUM) et les utilisateurs invités ne sont pas compatibles avec le verrouillage d'applications, vous devez activer cette fonctionnalité uniquement dans les profils secondaires. Utilisez cette configuration pour activer l'application pour les utilisateurs secondaires.

Par exemple, dans votre 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>