Nouveautés concernant les produits

Troisième version bêta d'Android 17

5 minutes de lecture
Matthew McCullough
Vice-président, gestion des produits, développeur Android

Android 17 a officiellement atteint la stabilité de la plate-forme aujourd'hui avec la version bêta 3. Cela signifie que la surface de l'API est verrouillée. Vous pouvez effectuer les tests de compatibilité finaux et envoyer vos applications ciblant Android 17 sur le Play Store. De plus, la version bêta 3 apporte de nombreuses nouvelles fonctionnalités pour vous aider à créer des applications de meilleure qualité, plus sécurisées et hautement intégrées.

Préparez vos applications, bibliothèques, outils et moteurs de jeu

Si vous développez un SDK, une bibliothèque, un outil ou un moteur de jeu, il est encore plus important de préparer dès maintenant les mises à jour nécessaires pour éviter que vos développeurs d'applications et de jeux en aval ne soient bloqués par des problèmes de compatibilité et pour leur permettre de cibler les dernières fonctionnalités du SDK. Veuillez informer vos développeurs en aval si des mises à jour sont nécessaires pour prendre en charge pleinement Android 17.

large_Android17Timeline01.png

Les tests consistent à installer votre application de production ou une application de test utilisant votre bibliothèque ou votre moteur à l'aide de Google Play ou d'autres moyens sur un appareil ou un émulateur exécutant Android 17 version bêta 3. Parcourez tous les flux de votre application et recherchez les problèmes fonctionnels ou d'interface utilisateur. Examinez les modifications de comportement pour cibler vos tests. Chaque version d'Android contient des modifications de la plate-forme qui améliorent la confidentialité, la sécurité et l'expérience utilisateur globale. Ces modifications peuvent affecter vos applications. Voici quelques modifications sur lesquelles vous concentrer :

  • Redimensionnement sur les grands écrans : une fois que vous ciblez Android 17, vous ne pouvez plus désactiver le maintien de l'orientation, du redimensionnement et des contraintes de format sur les grands écrans.
  • Chargement dynamique du code : si votre application cible Android 17 ou une version ultérieure, la protection de chargement dynamique du code plus sécurisé (DCL) introduite dans Android 14 pour les fichiers DEX et JAR s'étend désormais aux bibliothèques natives. Tous les fichiers natifs chargés à l'aide de System.load() doivent être marqués en lecture seule. Sinon, le système génère une exception UnsatisfiedLinkError.
  • Activer CT par défaut : la transparence des certificats (CT) est activée par défaut. (Sur Android 16, CT est disponible, mais les applications devaient l'activer.)
  • Protections du réseau local : les applications ciblant Android 17 ou une version ultérieure ont l'accès au réseau local bloqué par défaut. Si possible, passez à l'utilisation de sélecteurs préservant la confidentialité et utilisez le nouveau ACCESS_LOCAL_NETWORK pour un accès étendu et persistant.

Améliorations apportées aux médias et à l'appareil photo

Options de personnalisation du sélecteur de photos

Android vous permet désormais d'adapter la présentation visuelle du sélecteur de photos pour mieux compléter l'interface utilisateur de votre application. En tirant parti de la nouvelle API PhotoPickerUiCustomizationParams, vous pouvez modifier le format de la vue en grille, qui passe du carré standard 1:1 à un affichage portrait 9:16. Cette flexibilité s'étend à la fois à l'intent ACTION_PICK_IMAGES et au sélecteur de photos intégré, ce qui vous permet de conserver une esthétique cohérente lorsque les utilisateurs interagissent avec des médias.

large_(Default)11aspectratio.png

Tout cela fait partie de nos efforts pour que le sélecteur de photos Android préservant la confidentialité s'intègre parfaitement à l'expérience de votre application. Découvrez comment intégrer le sélecteur de photos directement dans votre application pour une expérience plus native.

  val params = PhotoPickerUiCustomizationParams.Builder()
.setAspectRatio(PhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16)
.build()
val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply {
putExtra(MediaStore.EXTRA_PICK_IMAGES_UI_CUSTOMIZATION_PARAMS, params)
}
startActivityForResult(intent, REQUEST_CODE)

Compatibilité avec le format d'image RAW14 : Android 17 est compatible avec le format d'image RAW14, la norme de facto du secteur pour la photographie numérique haut de gamme, via la nouvelle constante ImageFormat.RAW14. RAW14 est un format à canal unique de 14 bits par pixel qui utilise une mise en page compacte où chaque groupe de quatre pixels consécutifs est compressé en sept octets.

Extensions d'appareil photo définies par le fournisseur : Android 17 ajoute des extensions définies par le fournisseur pour permettre aux partenaires matériels de définir et d'implémenter des modes d'extension d'appareil photo personnalisés afin de vous donner accès aux fonctionnalités d'appareil photo les plus récentes et les plus performantes, telles que la "super résolution" ou les améliorations de pointe basées sur l'IA. Vous pouvez interroger ces modes à l'aide de l'API isExtensionSupported(int).

API de type d'appareil photo : les nouvelles API Android 17 vous permettent d'interroger le type d'appareil sous-jacent pour déterminer si un appareil photo est un matériel intégré, une webcam USB externe ou un appareil photo virtuel.

Compatibilité avec les appareils auditifs Bluetooth LE Audio

Android inclut désormais une catégorie d'appareils spécifique pour les appareils auditifs Bluetooth Low Energy (BLE) Audio. Avec l'ajout de la constante AudioDeviceInfo.TYPE_BLE_HEARING_AID, votre application peut désormais distinguer les appareils auditifs des casques classiques.

  val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
val isHearingAidConnected = devices.any { it.type == AudioDeviceInfo.TYPE_BLE_HEARING_AID }

Routage audio précis pour les appareils auditifs

Android 17 permet aux utilisateurs de gérer indépendamment l'emplacement de lecture des sons système spécifiques. Ils peuvent choisir de router les notifications, les sonneries et les alarmes vers les appareils auditifs connectés ou le haut-parleur intégré de l'appareil.

Encodeur logiciel HE-AAC étendu

Android 17 introduit un encodeur logiciel HE-AAC étendu fourni par le système. Cet encodeur est compatible avec les débits faibles et élevés à l'aide d'un codage unifié de la parole et de l'audio. Vous pouvez accéder à cet encodeur via l'API MediaCodec à l'aide du nom c2.android.xheaac.encoder ou en interrogeant le type MIME audio/mp4a-latm.

  val encoder = MediaCodec.createByCodecName("c2.android.xheaac.encoder")
val format = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 48000, 1)
format.setInteger(MediaFormat.KEY_BIT_RATE, 24000)
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectXHE)
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)

Améliorations des performances et de la batterie

Réduire les wakelocks grâce à la compatibilité des écouteurs avec les alarmes autorisées en mode veille

Android 17 introduit une nouvelle variante d'AlarmManager.setExactAndAllowWhileIdle qui accepte un OnAlarmListener au lieu d'un PendingIntent. Ce nouveau mécanisme basé sur un rappel est idéal pour les applications qui s'appuient actuellement sur des wakelocks continus pour effectuer des tâches périodiques, telles que les applications de messagerie qui maintiennent des connexions de socket.

  val alarmManager = getSystemService(AlarmManager::class.java)
val listener = AlarmManager.OnAlarmListener {
// Do work here
}
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000,
listener,
null
)

Mises à jour concernant la confidentialité

Bouton de localisation fourni par le système

localcafe.jpg

Android introduit un bouton de localisation rendu par le système que vous pourrez intégrer directement dans la mise en page de votre application à l'aide d'une bibliothèque Android Jetpack. Lorsqu'un utilisateur appuie sur ce bouton système, votre application reçoit un accès précis à la position pour la session en cours uniquement. Pour implémenter cette fonctionnalité, vous devez déclarer l'autorisation USE_LOCATION_BUTTON.

Paramètres de visibilité des mots de passe distincts pour les claviers tactiles et physiques

Cette fonctionnalité divise le paramètre système existant "Afficher les mots de passe" en deux préférences utilisateur distinctes : une pour les entrées tactiles et une autre pour les entrées de clavier physique (matériel). Les caractères saisis via des claviers physiques sont désormais masqués immédiatement par défaut.

  val isPhysical = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD
val shouldShow = android.text.ShowSecretsSetting.shouldShowPassword(context, isPhysical)

Sécurité

Chargement de code dynamique en lecture seule obligatoire

Pour améliorer la sécurité contre les attaques par injection de code, Android impose désormais que les bibliothèques natives chargées dynamiquement soient en lecture seule. Si votre application cible Android 17 ou une version ultérieure, tous les fichiers natifs chargés à l'aide de System.load() doivent être marqués en lecture seule au préalable.

  val libraryFile = File(context.filesDir, "my_native_lib.so")
// Mark the file as read-only before loading to comply with Android 17+ security requirements
libraryFile.setReadOnly()
System.load(libraryFile.absolutePath)

Signature hybride d'APK avec cryptographie post-quantique (PQC)

Pour se préparer aux futures avancées de l'informatique quantique, Android introduit la compatibilité avec la cryptographie post-quantique (PQC) via le nouveau schéma de signature d'APK v3.2. Ce schéma utilise une approche hybride, combinant une signature classique avec une signature ML-DSA.

Expérience utilisateur et UI du système

Meilleure compatibilité avec les widgets sur les écrans externes

Cette fonctionnalité améliore la cohérence visuelle des widgets d'application lorsqu'ils sont affichés sur des écrans connectés ou externes avec différentes densités de pixels à l'aide d'unités DP ou SP.

  val options = appWidgetManager.getAppWidgetOptions(appWidgetId)
val displayId = options.getInt(AppWidgetManager.OPTION_APPWIDGET_DISPLAY_ID)
val remoteViews = RemoteViews(context.packageName, R.layout.widget_layout)
remoteViews.setViewPadding(
R.id.container,
16f, 8f, 16f, 8f,
TypedValue.COMPLEX_UNIT_DIP
)

Masquer les libellés d'application sur l'écran d'accueil

Hiddenapplabelsonthehomescreen.png

Android fournit désormais un paramètre utilisateur permettant de masquer les noms d'application (libellés) dans l'espace de travail de l'écran d'accueil. Assurez-vous que l'icône de votre application est distincte et reconnaissable.

Picture-in-picture interactif sur ordinateur

Contrairement au mode Picture-in-picture traditionnel, ces fenêtres épinglées restent interactives tout en restant toujours au-dessus des autres fenêtres d'application en mode ordinateur.

  val appTask: ActivityManager.AppTask = activity.getSystemService(ActivityManager::class.java).appTasks[0]
appTask.requestWindowingLayer(
ActivityManager.AppTask.WINDOWING_LAYER_PINNED,
context.mainExecutor,
object : OutcomeReceiver<Int, Exception> {
override fun onResult(result: Int) {
if (result == ActivityManager.AppTask.WINDOWING_LAYER_REQUEST_GRANTED) {
// Task successfully moved to pinned layer
}
}
override fun onError(error: Exception) {}
}
)

Barre d'outils d'enregistrement d'écran repensée

large_Recording-redesign.png

Fonctionnalité de base

Paramètres d'exclusion des applications VPN

En utilisant le nouvel intent ACTION_VPN_APP_EXCLUSION_SETTINGS, votre application peut lancer un écran de paramètres géré par le système où les utilisateurs peuvent sélectionner les applications à exclure du tunnel VPN.

  val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}

Mises à jour des API OpenJDK 25 et 21

Cette mise à jour apporte de nombreuses fonctionnalités et améliorations d'OpenJDK 21 et d'OpenJDK 25, y compris la dernière compatibilité Unicode et une compatibilité SSL améliorée pour les groupes nommés dans TLS.

Premiers pas avec Android 17

Vous pouvez enregistrer n'importe quel appareil Pixel compatible ou utiliser les images système 64 bits avec l'émulateur Android.

  • Compilez le nouveau SDK et signalez les problèmes sur la page de commentaires.
  • Testez la compatibilité de votre application actuelle et découvrez si elle est affectée par les modifications apportées à Android 17.

Pour obtenir des informations complètes, consultez le site pour les développeurs Android 17.

Écrit par :

Lire la suite