Nouveautés d'Android 8.0

Cette page présente les nouvelles API, fonctionnalités et modifications de comportement introduites dans Android 8.0 (niveau d'API 26) qui affectent Android dans l'entreprise.

Nouvelles API et fonctionnalités

Nous avons rendu les modes de gestion du propriétaire de profil et du propriétaire de l'appareil plus puissants, plus productifs et plus faciles à provisionner que jamais. Nous avons également mis en place un tout nouveau scénario de déploiement : les profils professionnels sur des appareils entièrement gérés. Ces fonctionnalités et d'autres sont décrites dans les sections suivantes.

Profils professionnels sur des appareils entièrement gérés

Sous Android 8.0, les appareils entièrement gérés peuvent également disposer de profils professionnels. Cela permet aux entreprises de séparer les applications et les règles tout en conservant contrôle et visibilité sur les deux profils. Le propriétaire existant de l'appareil ou un autre outil de contrôle des règles relatives aux appareils (DPC) peut créer le profil géré.

Avec les profils professionnels sur les appareils entièrement gérés, les propriétaires d'appareils peuvent:

  • Créez un profil géré sans interaction de l'utilisateur en appelant EXTRA_PROVISIONING_SKIP_USER_CONSENT.
  • Recevez des notifications lorsque des utilisateurs secondaires ou des profils gérés sont créés ou supprimés. Les rappels sont onUserAdded() et onUserRemoved().
  • Empêchez les autres DPC de créer des profils gérés à l'aide de DISALLOW_ADD_MANAGED_PROFILE. Il s'agit du paramètre par défaut dans Android 8.0 pour les propriétaires d'appareils nouvellement provisionnés ou mis à niveau vers Android 8.0.
  • Les propriétaires d'appareils peuvent également empêcher les utilisateurs de supprimer des profils gérés existants à l'aide de DISALLOW_REMOVE_MANAGED_PROFILE.

Les propriétaires d'appareils et les propriétaires de profils peuvent communiquer entre eux s'ils proviennent du même fichier APK et que les propriétaires sont affiliés (voir Affiliation des utilisateurs ci-dessous).

Pour plus d'informations sur la prise en charge de ce nouveau scénario de déploiement, consultez la page dédiée aux profils professionnels sur les appareils entièrement gérés.

Affiliation des utilisateurs

Lorsque le propriétaire de l'appareil et le propriétaire du profil représentent la même organisation:

  • Les propriétaires de l'appareil et du profil peuvent communiquer entre eux dans le même fichier APK. Ils peuvent partager des règles ou un état (voir Profils professionnels sur les appareils entièrement gérés ci-dessus).

  • Les fonctionnalités à l'échelle de l'appareil, telles que la journalisation ou l'ajout du mode tâches de verrouillage à la liste d'autorisation, peuvent s'appliquer aux utilisateurs affiliés.

Les ID d'affiliation associés à un profil ou à un utilisateur permettent d'identifier des organisations. Lorsque les ID d'affiliation correspondent, les utilisateurs deviennent affiliés. Les propriétaires d'appareils et de profils utilisent setAffiliationIds() pour définir leurs ID d'affiliation. Représente des organisations utilisant des ID de chaîne longs et difficiles à deviner.

Nouvel accès pour les utilisateurs affiliés

Si tous les profils et utilisateurs secondaires d'un appareil sont affiliés au propriétaire de l'appareil, les fonctionnalités suivantes sont disponibles:

Auparavant, la journalisation de la sécurité et les rapports de bugs n'étaient disponibles que pour les appareils à utilisateur unique, ou avec un seul profil et un seul utilisateur.

Le mode tâches verrouillées est disponible pour les utilisateurs secondaires et les profils gérés s'ils sont affiliés au propriétaire de l'appareil via setLockTaskPackages(). Pour en savoir plus sur l'affiliation des utilisateurs, consultez Utilisateurs affiliés.

Clauses de non-responsabilité concernant le provisionnement personnalisé

Les DPC peuvent désormais afficher leurs propres clauses de non-responsabilité auprès des utilisateurs lors du provisionnement. Utilisez EXTRA_PROVISIONING_DISCLAIMERS, EXTRA_PROVISIONING_DISCLAIMER_HEADER et EXTRA_PROVISIONING_DISCLAIMER_CONTENT pour fournir des clauses de non-responsabilité sous forme de texte stylisé. Les clauses de non-responsabilité personnalisées d'un DPC apparaissent dans la liste des termes réductibles.

Sécurité

Les propriétaires de profils et d'appareils peuvent utiliser setRequiredStrongAuthTimeout() pour configurer un délai avant expiration pour le déverrouillage d'un appareil ou d'un profil avec une méthode d'authentification secondaire, telle que les empreintes digitales ou les agents de confiance. À l'expiration du délai, l'utilisateur doit déverrouiller l'appareil ou le profil à l'aide d'une méthode d'authentification forte, telle qu'un mot de passe, un code ou un schéma.

Les propriétaires d'appareils et de profils peuvent réinitialiser de manière sécurisée les mots de passe des appareils et des profils professionnels à l'aide de resetPasswordWithToken(). Pour les appareils compatibles avec le chiffrement basé sur les fichiers, cette API est disponible avant qu'un utilisateur ne déverrouille son appareil ou son profil, à condition que le DPC soit compatible avec le chiffrement.

Lors du verrouillage d'un profil professionnel sur un appareil compatible avec le chiffrement basé sur les fichiers, lockNow(int) peut éventuellement supprimer les clés de chiffrement principales du profil professionnel à l'aide de FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY. Les clés de chiffrement sont également supprimées si l'utilisateur désactive son profil professionnel.

Les propriétaires d'appareils peuvent également utiliser setNetworkLoggingEnabled() pour activer la journalisation réseau des requêtes DNS et des connexions TCP initiées à partir d'appareils appartenant à l'entreprise. Pour en savoir plus, consultez la section Journalisation de l'activité réseau.

Les propriétaires de profils peuvent limiter les packages de l'utilisateur principal autorisés à observer les notifications du profil professionnel. Appelez setPermittedCrossProfileNotificationListeners() pour définir les packages sur liste d'autorisation qui reçoivent des événements via un NotificationListenerService. Définir les écouteurs autorisés sur null (valeur par défaut) désactive la liste d'autorisation et tous les packages peuvent écouter les notifications. Pour limiter les événements aux packages système, transmettez un ensemble "Set" vide. Pour afficher les applications qui n'ont pas accès aux notifications du profil professionnel, les utilisateurs peuvent appuyer sur Paramètres > Applications et notifications > Accès spéciaux des applications > Accès aux notifications.

Enfin, les propriétaires de profils et d'appareils peuvent récupérer des informations sur les mises à jour du système en attente disponibles sur un appareil à l'aide de getPendingSystemUpdate().

Délégation de l'API de gestion des applications

La délégation d'API permet aux propriétaires d'appareils et de profils de décharger entièrement la gestion des applications vers d'autres applications. La classe DevicePolicyManager fournit des méthodes permettant de gérer les champs d'application de délégation que les propriétaires d'appareils et de profils peuvent accorder à un package:

  • La méthode setDelegatedScopes() permet aux propriétaires d'appareils et de profils d'accorder à d'autres applications l'accès aux API privilégiées.
  • La méthode getDelegatedScopes() renvoie les niveaux d'accès accordés à un package.
  • getDelegatePackages() renvoie les packages qui ont un champ d'application.

Le tableau suivant montre comment les différentes méthodes de DevicePolicyManager sont organisées selon le champ d'application:

Tableau 1. Correspondance entre les champs d'application et les méthodes des règles relatives aux appareils

Group Méthodes
DELEGATION_CERT_INSTALL
DELEGATION_APP_RESTRICTIONS
DELEGATION_BLOCK_UNINSTALL setUninstallBlocked()
DELEGATION_PERMISSION_GRANT
DELEGATION_PACKAGE_ACCESS
DELEGATION_ENABLE_SYSTEM_APP enableSystemApp()

Services d'arrière-plan de longue durée

Les propriétaires d'appareils et de profils peuvent sous-classer DeviceAdminService pour créer des services d'arrière-plan. Le système Android tente de maintenir le service actif pendant que l'utilisateur est en cours d'exécution. Si vous souhaitez exécuter des tâches périodiques, envisagez d'utiliser JobScheduler avant de créer un service d'arrière-plan.

Contrôler le service de sauvegarde

Les propriétaires d'appareils peuvent activer ou désactiver l'Android Backup Service à l'aide de nouvelles méthodes dans DevicePolicyManager. Activez et désactivez le service de sauvegarde à l'aide de setBackupServiceEnabled(). Vérifiez l'état du service de sauvegarde à l'aide de isBackupServiceEnabled().

Configuration du proxy Wi-Fi

Les propriétaires d'appareils et de profils peuvent configurer des serveurs proxy HTTP pour les réseaux Wi-Fi. Utilisez un fichier PAC ou des paramètres manuels pour configurer un serveur proxy pour chaque réseau Wi-Fi. Pour définir ou supprimer le proxy pour un objet WifiConfiguration, appelez sa méthode setHttpProxy(). Pour obtenir les paramètres du proxy, appelez getHttpProxy().

Boîtes de dialogue d'explication pour les fonctionnalités désactivées par l'administrateur

Votre application doit afficher une explication utile aux utilisateurs qui essaient d'utiliser une fonctionnalité désactivée par l'administrateur. Toutes les applications peuvent désormais utiliser createAdminSupportIntent() pour créer un intent qui affiche une boîte de dialogue d'explication lorsqu'elle est transmise à startActivity(Intent). Les intents incluent des explications personnalisées et localisées pour les appareils photo désactivés, les captures d'écran désactivées et toutes les restrictions UserManager.

Limitation du Bluetooth

Les propriétaires d'appareils peuvent désactiver le Bluetooth, ce qui concerne tous les utilisateurs et tous les profils de l'appareil. Pour désactiver le Bluetooth, ajoutez la restriction utilisateur DISALLOW_BLUETOOTH.

Les propriétaires d'appareils et de profils peuvent empêcher les utilisateurs d'envoyer des fichiers via le Bluetooth à l'aide de DISALLOW_BLUETOOTH_SHARING. La réception de fichiers n'est pas affectée. Lorsqu'il est défini par le propriétaire d'un appareil, DISALLOW_BLUETOOTH_SHARING s'applique à tous les utilisateurs de l'appareil. Dans Android 8.0, ce paramètre est le paramètre par défaut pour les nouveaux profils et les profils existants sur les appareils mis à niveau vers Android 8.0.

Changements de comportement

Si vous créez des applications pour les entreprises, y compris les DPC, vous devez consulter les modifications de comportement suivantes dans Android 8.0 et modifier votre application en conséquence.

Suppression d'utilisateurs

Les propriétaires d'appareils peuvent supprimer des utilisateurs secondaires et des profils gérés à l'aide de removeUser(), même si DISALLOW_REMOVE_USER est activé.

Sécurité

Authentification

Les modifications suivantes ont été appliquées à la classe DevicePolicyManager:

  • La méthode lockNow() ne verrouille le profil professionnel que si une question professionnelle distincte est active.
  • La méthode resetPassword() n'est plus disponible pour les DPC qui agissent en tant que propriétaires d'appareils ou propriétaires de profil et qui ciblent Android 8.0. En cas d'appel, une exception de sécurité est générée. Les DPC doivent plutôt utiliser resetPasswordWithToken().

    Remarque : Les DPC ciblant Android 7.1.1 (niveau d'API 25) ou version antérieure, ainsi que les DPC disposant uniquement de droits d'administrateur d'appareil, ne sont pas concernés par cette modification.

  • Pour les appareils compatibles avec le chiffrement basé sur les fichiers, isActivePasswordSufficient() n'est pas disponible avant que l'utilisateur ne déverrouille l'appareil pour la première fois après un redémarrage. Si elle est appelée avant que l'utilisateur ne déverrouille l'appareil, une exception est générée.

Données des profils professionnels verrouillés

Android 8.0 inclut des modifications de l'interface utilisateur permettant de séparer les données d'un profil professionnel verrouillé.

  • Les notifications pour les applications du profil professionnel peuvent désormais masquer leur contenu. Auparavant, le panneau des notifications affichait le contenu des applications professionnelles d'un profil professionnel verrouillé.
  • L'écran Recents (Éléments récents) affiche maintenant un panneau simple permettant d'exécuter des applications à partir d'un profil professionnel verrouillé. Le panneau simple et coloré contient l'icône et le nom d'une application. Auparavant, les activités ou les tâches d'un profil professionnel verrouillé affichaient un aperçu sur l'écran "Récents".

Intégrité de l'appareil

  • L'option ENSURE_VERIFY_APPS est désormais une restriction utilisateur globale. Si un utilisateur de l'appareil est soumis à cette restriction, la vérification de l'application est appliquée à tous les utilisateurs de l'appareil. Par exemple, si un propriétaire de profil définit la restriction sur le profil professionnel, la validation de l'application est appliquée au profil personnel de l'utilisateur.
  • La méthode onSystemUpdatePending() est désormais appelée pour les propriétaires de profils en plus des propriétaires d'appareils.
  • Lorsque vous utilisez la classe SystemUpdatePolicy, la règle de report ne s'applique plus aux correctifs de sécurité. Les correctifs de sécurité ne peuvent donc plus être reportés. Toutefois, le comportement des autres types de règles, tels que les règles automatiques et fenêtrées, n'est pas affecté.
  • Les propriétaires d'appareils peuvent déclencher un rétablissement de la configuration d'usine à l'aide de wipeData(), même si DISALLOW_FACTORY_RESET est activé.

VPN permanent

Android 8.0 inclut des modifications de l'interface utilisateur pour aider les utilisateurs à comprendre l'état des connexions VPN permanentes:

  • Lorsque des connexions VPN permanents se déconnectent ou ne peuvent pas se connecter, les utilisateurs voient une notification pouvant être ignorée. Appuyez sur la notification pour afficher les paramètres de configuration du VPN. La notification disparaît lorsque le VPN se reconnecte ou lorsque l'utilisateur désactive l'option "VPN permanent".
  • Le VPN permanent permet à l'utilisateur d'un appareil de bloquer toutes les connexions réseau qui n'utilisent pas le VPN. Lorsque cette option est activée, l'application Paramètres avertit l'utilisateur qu'il n'aura pas de connexion Internet jusqu'à ce que le VPN se connecte. Les paramètres invitent l'utilisateur à continuer ou à annuler.

Le VpnService des applications VPN doit désormais appeler sa méthode startForeground() après le lancement. Étant donné que le système Android démarre directement le service d'une application VPN, la transition au premier plan relève de la responsabilité de l'application. Android 8.0 arrête les applications VPN qui ne font pas passer le service VPN au premier plan.

Rappels pour les mots de passe

Les rappels de changement de mot de passe de DeviceAdminReceiver incluent désormais un paramètre user pour identifier l'utilisateur ou le profil auquel appartient le mot de passe. Les nouvelles signatures de méthode sont les suivantes:

L'implémentation par défaut de chaque nouvelle méthode appelle la version précédente, ce qui supprime l'argument utilisateur. Android 8.0 abandonne les méthodes précédentes.

Délégation de l'API de gestion des applications

Les méthodes suivantes de la classe DevicePolicyManager sont désormais obsolètes:

De plus, il est désormais possible de déléguer un seul champ d'application à plusieurs packages. En d'autres termes, les propriétaires d'appareils et de profils peuvent accorder simultanément l'accès au même ensemble d'API à deux packages différents.