Mudanças de comportamento: todos os apps

A plataforma Android 14 inclui mudanças de comportamento que podem afetar seu app. As mudanças de comportamento abaixo se aplicam a todos os apps 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 está definida como 517 para o primeiro cliente GATT que solicita uma MTU

No Android 14 e versões mais recentes, a pilha Bluetooth do Android está de acordo com a versão 5.2 da especificação principal do Bluetooth e solicita a MTU BLE ATT para 517 bytes quando o primeiro cliente GATT solicita uma MTU usando a API BluetoothGatt#requestMtu(int) e desconsidera todas as solicitações de MTU posteriores nessa conexão de ACL.

Para resolver essa mudança e tornar seu app mais robusto, considere as seguintes opções:

  • O dispositivo periférico precisa responder à solicitação de MTU do dispositivo Android com um valor razoável que possa ser acomodado pelo periférico. O valor final negociado será um mínimo do valor solicitado pelo Android e do valor fornecido remotamente (por exemplo, min(517, remoteMtu)).
    • A implementação dessa correção pode exigir uma atualização de firmware para periféricos
  • Como alternativa, limite as gravações de características do GATT com base no mínimo entre o valor compatível conhecido do periférico e a alteração da MTU recebida.
    • Um lembrete de que você precisa reduzir 5 bytes do tamanho permitido para os cabeçalhos
    • Por exemplo: arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5

Novo motivo para um app ser colocado no bucket de espera restrito

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 aos tempos limite dos métodos onStartJob, onStopJob ou onBind. Consulte JobScheduler reforça o comportamento do callback e da rede para mudanças em onStartJob e onStopJob.

Para rastrear se o app entrou ou não no bucket de espera restrito, recomendamos a geração de registros com a API UsageStatsManager.getAppStandbyBucket() na execução do job ou UsageStatsManager.queryEventsForSelf() na inicialização do app.

mlock limitado a 64 KB

No Android 14 (nível 34 da API) e versões mais recentes, a plataforma reduz a memória máxima que pode ser bloqueada usando mlock() para 64 KB por processo. Nas versões anteriores, o limite era de 64 MB por processo. Essa restrição promove um melhor gerenciamento de memória entre apps e no sistema. Para oferecer mais consistência em todos os dispositivos, o Android 14 adiciona um novo teste de CTS para o novo limite de mlock() em dispositivos compatíveis.

O sistema impõe o uso de recursos de apps armazenados em cache

从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,Activity 实例在调用并返回 onStop() 方法后执行的任何工作均不可靠,强烈建议不要这样做。

Android 14 对此设计引入了一致性和强制执行要求。在应用进程进入缓存状态后不久,系统会禁止后台工作,直到进程组件重新进入生命周期的活跃状态。

使用框架支持的典型生命周期 API(例如服务JobSchedulerJetpack WorkManager)的应用应该不受这些变化的影响。

Experiência do usuário

Mudanças na experiência dos usuários com notificações não dispensáveis

如果您的应用向用户显示不可关闭的前台通知,请注意:Android 14 已更改此行为,允许用户关闭此类通知。

这项变更适用于通过 Notification.Builder#setOngoing(true)NotificationCompat.Builder#setOngoing(true) 设置 Notification.FLAG_ONGOING_EVENT 来阻止用户关闭前台通知的应用。FLAG_ONGOING_EVENT 的行为已发生变化,使用户实际上能够关闭此类通知。

在以下情况下,此类通知仍不可关闭:

  • 当手机处于锁定状态时
  • 如果用户选择全部清除通知操作(有助于防止意外关闭)

此外,这种新行为不适用于以下用例中的通知:

  • CallStyle 通知
  • 企业设备政策控制器 (DPC) 和支持软件包
  • 媒体通知
  • 默认的搜索选择器软件包

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%

从 Android 14 开始,系统支持字体放大高达 200%,为弱视用户提供了符合网络内容无障碍指南 (WCAG) 的其他无障碍功能选项。

如果您已使用放大像素 (sp) 单位来定义文本大小,这项更改可能不会对您的应用产生太大影响。不过,您应在启用最大字号 (200%) 的情况下执行界面测试,确保应用能够在不影响易用性的情况下适应较大的字号。

Segurança

Nível mínimo desejado para a instalação da API

从 Android 14 开始,targetSdkVersion 低于 23 的应用无法安装。要求应用满足这些最低目标 API 级别要求有助于提高用户的安全性和隐私性。

恶意软件通常会以较旧的 API 级别为目标平台,以绕过在较新版本 Android 中引入的安全和隐私保护机制。例如,有些恶意软件应用使用 targetSdkVersion 22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 Android 14 变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低 API 级别为目标平台的应用将导致安装失败,并且 Logcat 中会显示以下消息:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7

在升级到 Android 14 的设备上,targetSdkVersion 低于 23 的所有应用都将继续保持安装状态。

如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 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 如何出于隐私保护目的而过滤软件包可见性