Comme les versions précédentes, Android 17 apporte des modifications de comportement pouvant affecter votre application. Les modifications de comportement suivantes s'appliquent exclusivement aux applications qui ciblent Android 17 ou version ultérieure. Si votre application cible Android 17 ou une version ultérieure, vous devez la modifier pour qu'elle prenne en charge ces comportements, le cas échéant.
Veillez également à consulter la liste des modifications de comportement qui affectent toutes les applications
exécutées sur Android 17, peu importe la targetSdkVersion de votre application.
Fonctionnalité de base
Android 17 inclut les modifications suivantes qui modifient ou étendent diverses fonctionnalités de base du système Android.
Nouvelle implémentation sans verrouillage de MessageQueue
À partir d'Android 17, les applications ciblant Android 17 (niveau d'API 37)
ou une version ultérieure reçoivent une nouvelle implémentation sans verrouillage de
android.os.MessageQueue. La nouvelle implémentation améliore les performances et réduit le nombre d'images manquées, mais peut interrompre les clients qui reflètent les champs et méthodes privés MessageQueue.
Pour en savoir plus, y compris sur les stratégies d'atténuation, consultez le guide sur les modifications du comportement de MessageQueue behavior change guidance.
Les champs statiques finals ne sont plus modifiables
Les applications exécutées sur Android 17 ou version ultérieure qui ciblent Android 17 (niveau d'API 37) ou version ultérieure ne peuvent pas modifier les champs static final. Si une application tente de modifier un champ static final à l'aide de la réflexion, cela entraînera une IllegalAccessException. Toute tentative de modification de l'un de ces champs via les API JNI (telles que SetStaticLongField()) entraînera le plantage de l'application.
Accessibilité
Android 17 apporte les modifications suivantes pour améliorer l'accessibilité.
Prise en charge de l'accessibilité pour la saisie au clavier physique IME complexe
Cette fonctionnalité introduit de nouvelles AccessibilityEvent et TextAttribute
API pour améliorer le retour vocal du lecteur d'écran pour la saisie de langues CJKV. Les applications IME CJKV peuvent désormais indiquer si un candidat de conversion de texte a été sélectionné lors de la composition de texte. Les applications avec des champs de modification peuvent spécifier des types de modification de texte lors de l'envoi d'événements d'accessibilité de texte modifié.
Par exemple, les applications peuvent spécifier qu'une modification de texte s'est produite lors de la composition de texte ou qu'elle résulte d'un commit.
Cela permet aux services d'accessibilité tels que les lecteurs d'écran de fournir des commentaires plus précis en fonction de la nature de la modification du texte.
Nombre d'applications utilisant le SDK
Applications IME : lors de la définition de la composition de texte dans les champs de modification, les IME peuvent utiliser
TextAttribute.Builder.setTextSuggestionSelected()pour indiquer si un candidat de conversion spécifique a été sélectionné.Applications avec des champs de modification : les applications qui gèrent un
InputConnectionpersonnalisé peuvent récupérer les données de sélection des candidats en appelantTextAttribute.isTextSuggestionSelected(). Ces applications doivent ensuite appelerAccessibilityEvent.setTextChangeTypes()lors de la distribution d'événementsTYPE_VIEW_TEXT_CHANGED. Cette fonctionnalité est activée par défaut pour les applications ciblant Android 17 (niveau d'API 37) qui utilisent leTextViewstandard. (Autrement dit,TextViewgère la récupération des données de l'IME et la définition des types de modification de texte lors de l'envoi d'événements aux services d'accessibilité.)Services d'accessibilité : les services d'accessibilité qui traitent les événements
TYPE_VIEW_TEXT_CHANGEDpeuvent appelerAccessibilityEvent.getTextChangeTypes()pour identifier la nature de la modification et ajuster leurs stratégies de commentaires en conséquence.
Confidentialité
Android 17 inclut les modifications suivantes pour améliorer la confidentialité des utilisateurs.
Autorisation de réseau local requise pour les applications ciblant Android 17
| Disponible pour le test ? (version requise) | Oui (Android 17 ou version ultérieure) |
|---|---|
Nécessite le changement de targetSDKVersion ? (niveau d'API) |
Oui (niveau d'API 37) Pour en savoir plus sur cette valeur, consultez la documentation sur l'attribut de fichier manifeste. |
Android 17 introduit l'autorisation d'exécution ACCESS_LOCAL_NETWORK
pour protéger les utilisateurs contre les accès non autorisés au réseau local. Comme elle fait partie du groupe d'autorisations NEARBY_DEVICES existant, les utilisateurs qui ont déjà accordé d'autres autorisations NEARBY_DEVICES ne sont pas invités à le faire à nouveau. Cette nouvelle exigence empêche les applications malveillantes d'exploiter un accès illimité au réseau local pour le suivi et l'empreinte numérique des utilisateurs. En déclarant et en demandant cette autorisation, votre application peut détecter des appareils sur le réseau local (LAN), tels que des appareils connectés ou des récepteurs de diffusion, et s'y connecter.
Les applications ciblant Android 17 (niveau d'API 37) ou une version ultérieure disposent désormais de deux moyens de communiquer avec les appareils du réseau local : adopter des sélecteurs d'appareils intermédiés par le système et respectueux de la confidentialité pour ignorer l'invite d'autorisation, ou demander explicitement cette nouvelle autorisation au moment de l'exécution pour maintenir la communication avec le réseau local.
Pour en savoir plus, consultez la documentation sur l'autorisation d'accès au réseau local.
Masquage des mots de passe sur les appareils physiques
Si une application cible Android 17 (niveau d'API 37) ou une version ultérieure et que l'utilisateur utilise un périphérique d'entrée physique (par exemple, un clavier externe), le système d'exploitation Android applique le nouveau paramètre show_passwords_physical à tous les caractères du champ de mot de passe. Par défaut, ce paramètre masque tous les caractères du mot de passe.
Le système Android affiche le dernier caractère du mot de passe saisi pour aider l'utilisateur à voir s'il a fait une erreur de frappe. Toutefois, cela est beaucoup moins nécessaire avec les grands claviers externes. De plus, les appareils dotés de claviers externes ont souvent des écrans plus grands, ce qui augmente le risque que quelqu'un voie le mot de passe saisi.
Si l'utilisateur utilise l'écran tactile de l'appareil, le système applique le nouveau paramètre show_passwords_touch.
Sécurité
Android 17 apporte les améliorations suivantes à la sécurité des appareils et des applications.
Sécurité des activités
Dans Android 17, la plate-forme poursuit sa transition vers une architecture "sécurisée par défaut", en introduisant une série d'améliorations conçues pour atténuer les failles de sécurité de haute gravité telles que le hameçonnage, le détournement d'interaction et les attaques par délégation confuse. Cette mise à jour exige des développeurs qu'ils activent explicitement les nouvelles normes de sécurité pour maintenir la compatibilité des applications et la protection des utilisateurs.
Voici les principaux impacts pour les développeurs :
- Renforcement de BAL et amélioration de l'activation : nous affinons les restrictions concernant le lancement d'activités en arrière-plan (BAL, Background Activity Launch) en étendant les protections à
IntentSender. Les développeurs doivent migrer depuis la constanteMODE_BACKGROUND_ACTIVITY_START_ALLOWEDhéritée. À la place, vous devez adopter des contrôles précis commeMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, qui limite les démarrages d'activité aux scénarios où l'application appelante est visible, ce qui réduit considérablement la surface d'attaque. - Outils d'adoption : les développeurs doivent utiliser le mode strict et les vérifications lint mises à jour pour identifier les anciens modèles et s'assurer d'être prêts pour les futures exigences du SDK cible.
Activer CT par défaut
Si une application cible Android 17 (niveau d'API 37) ou version ultérieure, la transparence des certificats (CT) est activée par défaut. (Sur Android 16, la CT est disponible, mais les applications doivent l'activer.)
DCL natif plus sûr—C
Si votre application cible Android 17 (niveau d'API 37) ou une version ultérieure, la protection Safer Dynamic Code Loading (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.
Nous vous recommandons d'éviter le chargement dynamique de code dans la mesure du possible, car cela augmente considérablement le risque que l'application soit compromise par une injection ou une falsification de code.
Facteurs de forme d'appareil
Android 17 inclut les modifications suivantes pour améliorer l'expérience utilisateur sur une gamme de tailles et de facteurs de forme d'appareils.
Modifications de l'API de la plate-forme pour ignorer les contraintes d'orientation, de redimensionnement et de format sur les grands écrans (sw>=600dp)
Nous avons introduit des modifications de l'API de la plate-forme dans Android 16 pour ignorer les restrictions d'orientation, de format et de redimensionnement sur les grands écrans (sw >= 600 dp) pour les applications ciblant le niveau d'API 36 ou supérieur. Les développeurs ont la possibilité de désactiver ces modifications avec le SDK 36, mais cette désactivation ne sera plus disponible pour les applications ciblant Android 17 (niveau d'API 37) ou une version ultérieure.
Pour en savoir plus, consultez la section Les restrictions d'orientation et de redimensionnement sont ignorées.