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
This feature introduces new AccessibilityEvent and TextAttribute
APIs to enhance screen reader spoken feedback for CJKV language input. CJKV IME
apps can now signal whether a text conversion candidate has been selected during
text composition. Apps with edit fields can specify text change types when
sending text changed accessibility events.
For example, apps can specify that a text change occurred during text
composition, or that a text change resulted from a commit.
Doing this enables accessibility
services such as screen readers to deliver more precise feedback based on the
nature of the text modification.
App adoption
IME Apps: When setting composing text in edit fields, IMEs can use
TextAttribute.Builder.setTextSuggestionSelected()to indicate whether a specific conversion candidate was selected.Apps with Edit Fields: Apps that maintain a custom
InputConnectioncan retrieve candidate selection data by callingTextAttribute.isTextSuggestionSelected(). These apps should then callAccessibilityEvent.setTextChangeTypes()when dispatchingTYPE_VIEW_TEXT_CHANGEDevents. Apps targeting Android 17 (API level 37) that use the standardTextViewwill have this feature enabled by default. (That is,TextViewwill handle retrieving data from the IME and setting text change types when sending events to accessibility services).Accessibility Services: Accessibility services that process
TYPE_VIEW_TEXT_CHANGEDevents can callAccessibilityEvent.getTextChangeTypes()to identify the nature of the modification and adjust their feedback strategies accordingly.
Confidentialité
Android 17 inclut les modifications suivantes pour améliorer la confidentialité des utilisateurs.
Activation opportuniste d'ECH (Encrypted Client Hello)
Android 17 introduit la compatibilité de la plate-forme avec Encrypted Client Hello (ECH), une extension TLS qui renforce la confidentialité des utilisateurs en chiffrant l'indication du nom du serveur (SNI) dans le handshake TLS. Ce chiffrement permet d'empêcher les observateurs du réseau d'identifier facilement le domaine spécifique auquel votre application se connecte.
Pour les applications ciblant Android 17 (niveau d'API 37) ou une version ultérieure, ECH est utilisé de manière opportuniste pour les connexions TLS. ECH n'est actif que si la bibliothèque de gestion de réseaux utilisée par l'application (par exemple, HttpEngine, WebView ou OkHttp) est compatible avec ECH et que le serveur distant prend également en charge le protocole ECH. Si l'ECH ne peut pas être négocié, la connexion revient automatiquement à un handshake TLS standard sans chiffrement SNI.
Pour permettre aux applications de personnaliser ce comportement, Android 17 ajoute un nouvel élément <domainEncryption> au fichier de configuration de la sécurité réseau.
Les développeurs peuvent utiliser <domainEncryption> dans les balises <base-config> ou <domain-config> pour sélectionner un mode ECH (par exemple, "opportunistic", "enabled" ou "disabled") au niveau global ou par domaine.
Pour en savoir plus, consultez la documentation Encrypted Client Hello.
Autorisation de réseau local requise pour les applications ciblant Android 17
Android 17 introduces the ACCESS_LOCAL_NETWORK runtime permission
to protect users from unauthorized local network access. Because this falls
under the existing NEARBY_DEVICES permission group, users who have already
granted other NEARBY_DEVICES permissions aren't prompted again. This new
requirement prevents malicious apps from exploiting unrestricted local network
access for covert user tracking and fingerprinting. By declaring and requesting
this permission, your app can discover and connect to devices on the local area
network (LAN), such as smart home devices or casting receivers.
Apps targeting Android 17 (API level 37) or higher now have two paths to maintain communication with LAN devices: Adopt system-mediated, privacy-preserving device pickers to skip the permission prompt, or explicitly request this new permission at runtime to maintain local network communication.
For more information, see the Local network permission documentation.
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
In Android 17, the platform continues its shift toward a "secure-by-default" architecture, introducing a suite of enhancements designed to mitigate high-severity exploits such as phishing, interaction hijacking, and confused deputy attacks. This update requires developers to explicitly opt in to new security standards to maintain app compatibility and user protection.
Key impacts for developers include:
- BAL hardening & improved opt-in: We are refining Background Activity
Launch (BAL) restrictions by extending protections to
IntentSender. Developers must migrate away from the legacyMODE_BACKGROUND_ACTIVITY_START_ALLOWEDconstant. Instead, you should adopt granular controls likeMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, which restricts activity starts to scenarios where the calling app is visible, significantly reducing the attack surface. - Adoption tools: Developers should utilize strict mode and updated lint checks to identify legacy patterns and ensure readiness for future target SDK requirements.
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écurisé : C
Si votre application cible Android 17 (niveau d'API 37) ou une version ultérieure, la protection du chargement dynamique du code (DCL) plus sécurisé 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.
Limiter les champs PII dans la vue de données CP2
For apps targeting Android 17 (API level Android 17 (API level 37)) and higher, Contacts Provider 2 (CP2) restricts certain columns containing Personally Identifiable Information (PII) from the data view. When this change is enabled, these columns are removed from the data view to enhance user privacy. The restricted columns include:
Apps that are using these columns from ContactsContract.Data
can extract them from ContactsContract.RawContacts
instead, by joining with RAW_CONTACT_ID.
Appliquer des vérifications SQL strictes dans CP2
Pour les applications ciblant Android 17 (niveau d'API 37) ou version ultérieure, Contacts Provider 2 (CP2) applique une validation stricte des requêtes SQL lorsque la table ContactsContract.Data est consultée sans l'autorisation READ_CONTACTS.
Avec ce changement, si une application ne dispose pas de l'autorisation READ_CONTACTS, les options StrictColumns et StrictGrammar sont définies lors de l'interrogation de la table ContactsContract.Data. Si une requête utilise un modèle qui n'est pas compatible avec ceux-ci, elle sera refusée et une exception sera générée.
Contenus multimédias
Android 17 inclut les modifications suivantes concernant le comportement des contenus multimédias.
Renforcement de l'audio en arrière-plan
Beginning with Android 17, the audio framework enforces restrictions on background audio interactions including audio playback, audio focus requests, and volume change APIs to ensure that these changes are started intentionally by the user.
Some audio restrictions apply to all apps. However, the restrictions are more stringent if an app targets Android 17 (API level 37). If one of these apps interacts with audio while it is in the background, it must have a foreground service running. In addition, the app must meet one or both of these requirements:
- The foreground service must have while-in-use (WIU) capabilities.
- The app must have the exact alarm permission and be interacting with
USAGE_ALARMaudio streams.
For more information, including mitigation strategies, see Background audio hardening.
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)
Dans Android 16, nous avons apporté des modifications aux API de plate-forme 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 option ne sera plus disponible pour les applications ciblant Android 17 (niveau d'API 37) ou version ultérieure.
Pour en savoir plus, consultez Les restrictions concernant l'orientation et le redimensionnement sont ignorées.
Connectivité
Android 17 introduit la modification suivante pour améliorer la cohérence et s'aligner sur le comportement Java InputStream standard pour les sockets Bluetooth RFCOMM.
Comportement cohérent de BluetoothSocket read() pour RFCOMM
For apps targeting Android 17 (API level 37), the
read() method of the InputStream obtained from an
RFCOMM-based BluetoothSocket now returns -1 when the
socket is closed or the connection is dropped.
This change makes RFCOMM socket behavior consistent with LE CoC sockets and
aligns with the standard InputStream.read()
documentation, which states that -1 is returned when the end of the stream is
reached.
Apps that rely solely on catching an IOException to break out of a read loop may
be impacted by this change and should update the BluetoothSocket read loops to
explicitly check for a return value of -1. This ensures the loop terminates
correctly when the remote device disconnects or the socket is closed. For an
example of the recommended implementation, see the
code snippet in the Transfer Bluetooth data
guide.