La plate-forme Android 14 apporte des modifications de comportement susceptibles d'affecter votre application. Les modifications de comportement suivantes s'appliquent à toutes les applications lorsqu'elles s'exécutent sur Android 14, peu importe la targetSdkVersion
. Vous devez tester votre application, puis la modifier si nécessaire afin de prendre en charge ces modifications, le cas échéant.
Veillez également à consulter la liste des modifications de comportement qui n'affectent que les applications ciblant Android 14.
Fonctionnalité de base
Les alarmes exactes programmées sont refusées par défaut
Les alarmes exactes sont destinées aux notifications ou aux actions intentionnelles de l'utilisateur qui doivent se produire à une heure précise. À partir d'Android 14, l'autorisation SCHEDULE_EXACT_ALARM
n'est plus disponible pour la plupart des applications récemment installées sur Android 13 ou version ultérieure. L'autorisation est refusée par défaut.
En savoir plus sur les modifications apportées aux autorisations de planification d'alarmes exactes
Les annonces diffusées en contexte sont mises en file d'attente pendant que les applications sont mises en cache.
Sur Android 14, le système peut placer les diffusions enregistrées en contexte dans une file d'attente pendant que l'application est à l'état "mis en cache" ; Ce comportement est similaire à celui de la mise en file d'attente sous d'Android 12 (niveau d'API 31) pour les transactions de binder asynchrones. Les diffusions déclarées par le fichier manifeste ne sont pas placées en file d'attente, et les applications sont supprimées de l'état mis en cache pour la diffusion.
Lorsque l'application quitte l'état mis en cache, par exemple lorsqu'elle revient au premier plan, le système diffuse toutes les diffusions en file d'attente. Plusieurs instances de certaines diffusions peuvent être fusionnées en une seule diffusion. En fonction d'autres facteurs, les applications peuvent être retirées de l'état mis en cache, et toute application précédemment mise en file d'attente de diffusions.
Les applications ne peuvent fermer que leurs propres processus en arrière-plan
从 Android 14 开始,当您的应用调用 killBackgroundProcesses()
时,该 API 只能终止您自己应用的后台进程。
如果您传入另一个应用的软件包名称,此方法对该应用的后台进程没有影响,并且 Logcat 中会显示以下消息:
Invalid packageName: com.example.anotherapp
您的应用不应使用 killBackgroundProcesses()
API,也不得以其他方式尝试影响其他应用的进程生命周期,即使在旧版操作系统上也是如此。Android 旨在让缓存应用在后台运行,并在系统需要内存时自动终止它们。如果您的应用会不必要地终止其他应用,则由于之后需要完全重启这些应用,因此可能会降低系统性能并增加耗电量,这比恢复现有缓存应用所消耗的资源要多得多。
La MTU est définie sur 517 pour le premier client GATT qui demande une MTU.
À partir d'Android 14, la pile Bluetooth Android respecte plus strictement la version 5.2 de la spécification de base Bluetooth et demande que la MTU ATT BLE soit définie sur 517 octets lorsque le premier client GATT demande une MTU à l'aide de l'API BluetoothGatt#requestMtu(int)
, et ignore toutes les requêtes MTU ultérieures sur cette connexion ACL.
Pour faire face à cette modification et rendre votre application plus robuste, envisagez les options suivantes:
- Votre appareil périphérique doit répondre à la requête MTU de l'appareil Android avec une valeur raisonnable pouvant être prise en charge par le périphérique. La valeur finale négociée correspondra au minimum de la valeur demandée par Android et de la valeur fournie à distance (par exemple,
min(517, remoteMtu)
).- La mise en œuvre de ce correctif peut nécessiter une mise à jour du micrologiciel du périphérique.
- Vous pouvez également limiter les écritures de la caractéristique GATT en fonction de la valeur minimale entre la valeur compatible connue de votre périphérique et la modification de l'MTU reçue.
- Rappel : vous devez réduire de cinq octets la taille compatible pour les en-têtes.
- Par exemple :
arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5
Nouveau motif pour lequel une application peut être placée dans le bucket de mise en veille limitée
Android 14 引入了一种可将应用放入受限待机模式存储分区的新原因。由于 onStartJob
、onStopJob
或 onBind
方法超时,应用的作业多次触发 ANR 错误。(如需了解对 onStartJob
和 onStopJob
的更改,请参阅 JobScheduler 强化了回调和网络行为。)
如需跟踪应用是否已进入受限待机分桶,我们建议您在作业执行时使用 API UsageStatsManager.getAppStandbyBucket()
进行日志记录,或在应用启动时使用 UsageStatsManager.queryEventsForSelf()
进行日志记录。
mlock limité à 64 Ko
在 Android 14(API 级别 34)及更高版本中,平台将可使用 mlock()
锁定的最大内存量减少到每个进程 64 KB。在之前的版本中,每个进程的上限为 64 MB。此限制有助于更好地管理应用和系统的内存。为了在各种设备上提供更一致的体验,Android 14 针对兼容设备上的新 mlock()
限制添加了一项新的 CTS 测试。
Le système applique l'utilisation des ressources des applications mises en cache
Dès la conception, le processus d'une application est mis en cache lorsqu'elle est déplacée en arrière-plan et qu'aucun autre composant de processus d'application n'est en cours d'exécution. Un tel processus d'application peut être fermé en raison de la pression de la mémoire système. Tout travail effectué par les instances Activity
après l'appel et le retour de la méthode onStop()
est, dans cet état, peu fiable et fortement déconseillé.
Android 14 introduit une conception cohérente et appliquée. Peu de temps après qu'un processus d'application soit à l'état mis en cache, le travail en arrière-plan est interdit, jusqu'à ce qu'un composant de processus passe à nouveau à un état actif du cycle de vie.
Les applications qui utilisent des API de cycle de vie compatibles avec le framework, telles que services, JobScheduler
et Jetpack WorkManager, ne doivent pas être impactées par ces modifications.
Expérience utilisateur
Modifications apportées à la façon dont les utilisateurs gèrent les notifications qu'ils ne peuvent pas ignorer
Si votre application affiche des notifications au premier plan que les utilisateurs peuvent ignorer, Android 14 a changé leur comportement pour permettre aux utilisateurs d'ignorer ces notifications.
Cette modification s'applique aux applications qui empêchent les utilisateurs d'ignorer les notifications de premier plan en définissant Notification.FLAG_ONGOING_EVENT
à l'aide de Notification.Builder#setOngoing(true)
ou NotificationCompat.Builder#setOngoing(true)
. Le comportement de FLAG_ONGOING_EVENT
a été modifié afin que l'utilisateur puisse ignorer ces notifications.
Vous ne pouvez pas ignorer ces types de notifications dans les conditions suivantes :
- Lorsque le téléphone est verrouillé
- Si l'utilisateur sélectionne une action de notification Tout effacer (ce qui facilite la fermeture accidentelle)
Ce nouveau comportement ne s'applique pas non plus aux notifications les cas d'utilisation suivants:
- Notifications
CallStyle
- Outil de contrôle des règles relatives aux appareils (DPC) et packages compatibles pour les entreprises
- Notifications multimédias
- Package Search Selector par défaut
Amélioration de la visibilité des informations sur la sécurité des données
为了加强用户隐私保护,Android 14 增加了系统显示您在 Play 管理中心表单中声明的信息的位置数量。目前,用户可以在 Google Play 中的应用详情的数据安全部分查看此信息。
我们建议您查看应用的位置数据分享政策,并花一点时间对应用的 Google Play“数据安全”部分进行任何适用的更新。
如需了解详情,请参阅有关如何在 Android 14 上以更显眼的方式显示数据安全信息的指南。
Accessibilité
Mise à l'échelle non linéaire de la police à 200 %
从 Android 14 开始,系统支持字体放大高达 200%,为弱视用户提供了符合网络内容无障碍指南 (WCAG) 的其他无障碍功能选项。
如果您已使用放大像素 (sp) 单位来定义文本大小,这项更改可能不会对您的应用产生太大影响。不过,您应在启用最大字号 (200%) 的情况下执行界面测试,确保应用能够在不影响易用性的情况下适应较大的字号。
Sécurité
Niveau d'API cible installable minimal
À partir d'Android 14, il est impossible d'installer des applications avec une targetSdkVersion
inférieure à 23. Demander aux applications de répondre à ces exigences minimales de niveau d'API cible améliore la sécurité et la confidentialité pour les utilisateurs.
Les logiciels malveillants ciblent souvent les anciens niveaux d'API afin de contourner les mesures de sécurité et de protection de la confidentialité introduites dans les nouvelles versions d'Android. Par exemple, certaines applications de logiciel malveillant utilisent une targetSdkVersion
de 22 pour éviter d'être soumises au modèle d'autorisation d'exécution introduit en 2015 par Android 6.0 Marshmallow (niveau d'API 23). Cette modification d'Android 14 rend plus difficile pour les logiciels malveillants de contourner les améliorations de sécurité et de confidentialité.
Si vous tentez d'installer une application ciblant un niveau d'API inférieur, l'installation échouera et le message suivant apparaîtra dans Logcat :
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7
Sur les appareils passant à Android 14, les applications dont la version de targetSdkVersion
est inférieure à 23 restent installées.
Si vous devez tester une application ciblant un niveau d'API plus ancien, utilisez la commande ADB suivante :
adb install --bypass-low-target-sdk-block FILENAME.apk
Les noms de package du propriétaire média peuvent être masqués
Le Media Store accepte les requêtes pour la colonne OWNER_PACKAGE_NAME
, qui indique l'application qui a stocké un fichier multimédia spécifique. À partir d'Android 14, cette valeur sera masquée, sauf si au moins l'une des conditions suivantes est remplie :
- Le nom de package de l'application qui a stocké le fichier multimédia est toujours visible par les autres applications.
L'application qui interroge le Media Store demande l'autorisation
QUERY_ALL_PACKAGES
.
Découvrez comment Android filtre la visibilité des packages à des fins de confidentialité.