A plataforma Android 14 inclui mudanças de comportamento que podem afetar seu app.
As mudanças de comportamento a seguir se aplicam a todos os apps quando eles são executados no Android 14,
independente de
targetSdkVersion. Teste seu app e modifique-o conforme necessário para ficar compatível com essas mudanças, quando aplicável.
Consulte também a lista de mudanças de comportamento que afetam apenas os apps destinados ao Android 14.
Principal recurso
Programar alarmes exatos não é permitido por padrão
精确的闹钟适用于用户指定的通知,或是在确切时间需要执行的操作。从 Android 14 开始,系统不再向以 Android 13 及更高版本为目标平台的大多数新安装应用预先授予 SCHEDULE_EXACT_ALARM 权限,该权限默认处于拒绝状态。
详细了解安排精确闹钟的权限变化。
As transmissões registradas em contexto são enfileiradas enquanto os apps são armazenados em cache
在 Android 14 中,当应用处于缓存状态时,系统可以将上下文注册的广播放入队列中。这与 Android 12(API 级别 31)为异步 binder 事务引入的队列行为类似。在清单中声明的广播不会加入队列,并且应用会从缓存状态中移除以进行广播传递。
当应用离开缓存状态(例如返回前台)时,系统会传递所有已加入队列的广播。某些广播的多个实例 可能会合并为一个广播。取决于其他因素,如系统 运行状况,则可能会从缓存状态中移除应用,以及之前排队 广播。
Os apps só podem encerrar os próprios processos em segundo plano
从 Android 14 开始,当您的应用调用 killBackgroundProcesses() 时,该 API 只能终止您自己应用的后台进程。
如果您传入另一个应用的软件包名称,此方法对该应用的后台进程没有影响,并且 Logcat 中会显示以下消息:
Invalid packageName: com.example.anotherapp
您的应用不应使用 killBackgroundProcesses() API,也不得以其他方式尝试影响其他应用的进程生命周期,即使在旧版操作系统上也是如此。Android 旨在让缓存应用在后台运行,并在系统需要内存时自动终止它们。如果您的应用会不必要地终止其他应用,则由于之后需要完全重启这些应用,因此可能会降低系统性能并增加耗电量,这比恢复现有缓存应用所消耗的资源要多得多。
A MTU é definida como 517 para o primeiro cliente GATT que solicita uma MTU
从 Android 14 开始,Android 蓝牙堆栈会更严格地遵循 蓝牙核心规范 5.2 版,并在第一个 GATT 客户端使用 BluetoothGatt#requestMtu(int) API 请求 MTU 时将 BLE ATT MTU 请求设为 517 字节,并忽略该 ACL 连接上的所有后续 MTU 请求。
如需解决此更改并使您的应用更为稳健,请考虑以下选项:
- 您的外围设备应使用外围设备可以容纳的合理值来响应 Android 设备的 MTU 请求。最终协商的值将是 Android 请求的值和远程提供的值(例如
min(517, remoteMtu))的较小值- 实现此修复程序可能需要更新外围设备的固件
- 或者,您也可以根据外围设备的已知支持值与收到的 MTU 更改值之间的最小值来限制 GATT 特征写入
- 提醒您,应将标头的支持大小减小 5 个字节
- 例如:
arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5
Novo motivo para um app ser colocado no bucket restrito para apps em espera
O Android 14 apresenta um novo motivo para um app ser colocado no bucket de espera restrito.
Os jobs do app acionam erros de ANR várias vezes devido a tempos limite de método onStartJob,
onStopJob ou onBind.
Consulte O JobScheduler reforça o callback e o comportamento de rede para ver as mudanças
em onStartJob e onStopJob.
Para acompanhar se o app entrou ou não no bucket de espera restrito,
recomendamos fazer o registro com a API UsageStatsManager.getAppStandbyBucket()
na execução do job ou UsageStatsManager.queryEventsForSelf() na inicialização do app.
mlock limitado a 64 KB
在 Android 14(API 级别 34)及更高版本中,平台将可使用 mlock() 锁定的最大内存量减少到每个进程 64 KB。在之前的版本中,每个进程的上限为 64 MB。此限制有助于更好地管理应用和系统的内存。为了在各种设备上提供更一致的体验,Android 14 针对兼容设备上的新 mlock() 限制添加了一项新的 CTS 测试。
O sistema impõe o uso de recursos de apps armazenados em cache
从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,Activity 实例在调用并返回 onStop() 方法后执行的任何工作均不可靠,强烈建议不要这样做。
Android 14 对此设计引入了一致性和强制执行要求。在应用进程进入缓存状态后不久,系统会禁止后台工作,直到进程组件重新进入生命周期的活跃状态。
使用框架支持的典型生命周期 API(例如服务、JobScheduler 和 Jetpack WorkManager)的应用应该不受这些变化的影响。
Experiência do usuário
Mudanças na experiência dos usuários com notificações não dispensáveis
Caso seu app mostre notificações não dispensáveis em primeiro plano para os usuários, saiba que o Android 14 mudou o comportamento para permitir que os usuários dispensem essas notificações.
Essa mudança se aplica aos apps que impedem os usuários de dispensar as notificações
em primeiro plano ao definir Notification.FLAG_ONGOING_EVENT usando
Notification.Builder#setOngoing(true) ou
NotificationCompat.Builder#setOngoing(true). O comportamento de
FLAG_ONGOING_EVENT mudou para que essas notificações possam
ser dispensadas pelo usuário.
Esses tipos de notificação ainda não podem ser dispensados nas seguintes condições:
- Quando o smartphone está bloqueado.
- Quando o usuário seleciona uma ação de notificação Limpar tudo, que pode dispensar notificações acidentalmente.
Além disso, esse novo comportamento não se aplica às notificações na os seguintes casos de uso:
CallStylenotificações- Controlador de política de dispositivo (DPC) e pacotes de suporte para empresas.
- Notificações de mídia
- O pacote padrão de seletor de pesquisa
As informações de segurança dos dados estão mais visíveis
Para melhorar a privacidade do usuário, o Android 14 aumenta o número de lugares em que o sistema mostra as informações declaradas no formulário do Play Console. Atualmente, os usuários podem ver essas informações na seção Segurança dos dados da página de detalhes do app no Google Play.
Recomendamos revisar as políticas de compartilhamento de dados de local do app e atualizar a seção "Segurança dos dados" no Google Play.
Saiba mais no guia sobre como as informações de segurança dos dados estão mais visíveis no Android 14.
Acessibilidade
Dimensionamento de fonte não linear para 200%
Starting in Android 14, the system supports font scaling up to 200%, providing users with additional accessibility options.
If you already use scaled pixels (sp) units to define text sizing, then this change probably won't have a high impact on your app. However, you should perform UI testing with the maximum font size enabled (200%) to ensure that your app can accommodate larger font sizes without impacting usability.
Segurança
Nível mínimo desejado para a instalação da API
A partir do Android 14, não é possível instalar
apps com uma targetSdkVersion
anterior a 23. Exigir que os apps atendam a esses requisitos mínimos do nível
da API melhora a segurança e a privacidade para os usuários.
Geralmente, um malware é direcionado a níveis de API mais antigos para contornar as proteções de segurança e
privacidade lançadas nas versões mais recentes do Android. Por exemplo,
alguns apps de malware usam uma targetSdkVersion de 22 para evitar serem submetidos ao
modelo de permissão de execução apresentado em 2015 pelo Android 6.0 Marshmallow (nível
23 da API). Essa mudança do Android 14 dificulta que malwares evitem melhorias de segurança
e privacidade.
A tentativa de instalar um app direcionado a um nível de API anterior resultará em uma
falha na instalação, com a seguinte mensagem no Logcat:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7
Em dispositivos que fizerem upgrade para o Android 14, todos os apps com uma targetSdkVersion anterior
à 23 permanecerão instalados.
Se você precisar testar um app destinado a um nível de API mais antigo, use o seguinte comando adb:
adb install --bypass-low-target-sdk-block FILENAME.apk
Os nomes dos pacotes de proprietários de mídia podem ser editados
媒体库支持查询 OWNER_PACKAGE_NAME 列,该列表示存储特定媒体文件的应用。从 Android 14 开始,除非满足以下条件之一,否则系统会隐去此值:
- 存储媒体文件的应用有一个软件包名称始终对其他应用可见。
查询媒体库的应用会请求
QUERY_ALL_PACKAGES权限。
详细了解 Android 如何出于隐私保护目的而过滤软件包可见性。