Mudanças de comportamento: todos os apps

A plataforma Android 15 inclui mudanças de comportamento que podem afetar seu app. As mudanças a seguir se aplicam a todos os apps quando executados no Android 15, independente da targetSdkVersion. Teste o app e modifique-o conforme necessário para que ele ofereça suporte a essas mudanças, se necessário.

Consulte também a lista de mudanças de comportamento que afetam apenas os apps destinados ao Android 15.

Principal recurso

O Android 15 modifica ou expande vários recursos principais do sistema Android.

Mudanças no estado parado do pacote

A intenção do estado FLAG_STOPPED do pacote (que os usuários podem acionar em builds do AOSP pressionando um ícone de app por muito tempo e selecionando "Forçar Parar") sempre foi manter os apps nesse estado até que o usuário os remova explicitamente, iniciando o app diretamente ou interagindo indiretamente com ele (pela sharesheet ou um widget, selecionando o app como papel de parede animado etc.). No Android 15, atualizamos o comportamento do sistema para estar alinhado com esse comportamento pretendido. Os apps só podem ser removidos do estado de interrupção por uma ação direta ou indireta do usuário.

Para oferecer suporte ao comportamento pretendido, além das restrições atuais, o sistema também cancela todas as intenções pendentes quando o app entra no estado parado em um dispositivo com o Android 15. Quando as ações do usuário removem o app do estado parado, a transmissão ACTION_BOOT_COMPLETED é enviada ao app, oferecendo a oportunidade de registrar novamente todas as intents pendentes.

Chame o novo método ApplicationStartInfo.wasForceStopped() para confirmar se o app foi colocado no estado parado.

Suporte a tamanhos de página de 16 KB

Historicamente, o Android só ofereceu suporte a tamanhos de página de memória de 4 KB, o que otimizou o desempenho da memória do sistema para a quantidade média de memória total que os dispositivos Android normalmente tinham. A partir do Android 15, o AOSP oferece suporte a dispositivos configurados para usar um tamanho de página de 16 KB (dispositivos de 16 KB). Se o app usar alguma biblioteca do NDK, seja direta ou indiretamente por um SDK, será necessário recriar o app para que ele funcione nesses dispositivos de 16 KB.

À medida que os fabricantes de dispositivos continuam criando dispositivos com quantidades maiores de memória física (RAM), muitos deles vão adotar tamanhos de página de 16 KB (e eventualmente maiores) para otimizar o desempenho do dispositivo. Ao adicionar suporte para dispositivos com tamanho de página de 16 KB, você permite que o app seja executado nesses dispositivos e aproveite as melhorias de desempenho associadas. Sem recompilação, os apps não vão funcionar em dispositivos de 16 KB em versões futuras do Android.

Para ajudar você a adicionar suporte ao app, fornecemos orientações sobre como verificar se o app foi afetado, como recompilar o app (se aplicável) e como testar o app em um ambiente de 16 KB usando emuladores (incluindo imagens do sistema Android 15 para o Android Emulator).

Benefícios e ganhos de desempenho

配置为使用 16 KB 页面大小的设备平均会使用略多一些的内存,但系统和应用的性能也会得到各种提升:

  • 缩短了系统内存压力时的应用启动时间:平均降低了 3.16%;对于我们测试的某些应用而言,改进幅度更大(最高可达 30%)
  • 应用启动期间的功耗降低:平均降低了 4.56%
  • 相机启动更快:热启动速度平均提高了 4.48%,冷启动速度平均提高了 6.60%
  • 缩短了系统启动时间:平均缩短了 8%(约 950 毫秒)

这些改进基于我们的初始测试,实际设备上的结果可能会有所不同。随着测试的继续进行,我们将进一步分析应用的潜在收益。

Verificar se o app é afetado

Se o app usar código nativo, recompile o app com suporte para dispositivos de 16 KB. Se você não tiver certeza se o app usa código nativo, use o APK Analyzer para identificar se há código nativo e verifique o alinhamento dos segmentos ELF de bibliotecas compartilhadas encontradas. O Android Studio também oferece recursos que ajudam a detectar automaticamente problemas de alinhamento.

Se o app usa apenas código escrito na linguagem de programação Java ou Kotlin, incluindo bibliotecas ou SDKs, ele já oferece suporte a dispositivos de 16 KB. No entanto, recomendamos que você teste o app em um ambiente de 16 KB para verificar se não há regressões inesperadas no comportamento do app.

Mudanças necessárias para alguns apps funcionarem no espaço privado

O espaço privado é um novo recurso do Android 15 que permite aos usuários criar um espaço separado no dispositivo para manter os apps sensíveis longe de olhares curiosos e sob uma camada adicional de autenticação. Como os apps no espaço particular têm visibilidade restrita, alguns tipos de apps precisam seguir outras etapas para poderem ser vistos e interagir com os apps no espaço particular de um usuário.

Todos os apps

Como os apps no espaço pessoal são mantidos em um perfil de usuário separado, semelhante aos perfis de trabalho, os apps não podem presumir que as cópias instaladas do app que não estão no perfil principal estão no perfil de trabalho. Se o app tiver uma lógica relacionada a apps de perfil de trabalho que fazem essa suposição, você precisará ajustar essa lógica.

Apps de medicina

Quando um usuário bloqueia o espaço particular, todos os apps nele são interrompidos e não podem realizar atividades em primeiro ou segundo plano, incluindo a exibição de notificações. Esse comportamento pode afetar significativamente o uso e a função de apps médicos instalados no espaço privado.

A experiência de configuração do espaço privado alerta os usuários de que ele não é adequado para apps que precisam realizar atividades importantes em primeiro ou segundo plano, como mostrar notificações de apps médicos. No entanto, os apps não podem determinar se estão sendo usados no espaço particular, portanto, não podem mostrar um aviso ao usuário nesse caso.

Por esses motivos, se você desenvolve um app médico, analise como esse recurso pode afetar seu app e tome as medidas adequadas, como informar aos usuários para não instalar o app no espaço privado, para evitar interromper os recursos essenciais do app.

Apps da tela de início

Se você desenvolver um app de tela de início, faça o seguinte antes que os apps no espaço privado fiquem visíveis:

  1. Seu app precisa ser atribuído como o app de inicialização padrão do dispositivo, ou seja, ter o papel de ROLE_HOME.
  2. O app precisa declarar a permissão normal ACCESS_HIDDEN_PROFILES no arquivo de manifesto do app.

Os apps de inicialização que declaram a permissão ACCESS_HIDDEN_PROFILES precisam processar os seguintes casos de uso do espaço privado:

  1. O app precisa ter um contêiner de inicialização separado para apps instalados no espaço privado. Use o método getLauncherUserInfo() para determinar qual tipo de perfil de usuário está sendo processado.
  2. O usuário precisa poder ocultar e mostrar o contêiner de espaço privado.
  3. O usuário precisa poder bloquear e desbloquear o contêiner do espaço privado. Use o método requestQuietModeEnabled() para bloquear (transmitindo true) ou desbloquear (transmitindo false) o espaço privado.
  4. Enquanto estiver bloqueado, nenhum app no contêiner do espaço privado poderá ser visível ou detectável por mecanismos como a pesquisa. O app precisa registrar um receptor para as transmissões ACTION_PROFILE_AVAILABLE e ACTION_PROFILE_UNAVAILABLE e atualizar a interface quando o estado bloqueado ou desbloqueado do contêiner do espaço privado mudar. Ambas as transmissões incluem EXTRA_USER, que o app pode usar para se referir ao usuário do perfil privado.

    Também é possível usar o método isQuietModeEnabled() para verificar se o perfil do espaço particular está bloqueado ou não.

Apps da app store

O espaço privado inclui um botão "Instalar apps" que inicia uma intent implícita para instalar apps no espaço privado do usuário. Para que o app receba essa intent implícita, declare uma <intent-filter> no arquivo de manifesto do app com uma <category> de CATEGORY_APP_MARKET.

Fonte de emoji baseada em PNG removida

我们移除了基于 PNG 的旧版表情符号字体文件 (NotoColorEmojiLegacy.ttf),只保留了基于矢量的文件。从 Android 13(API 级别 33)开始,系统表情符号渲染程序使用的表情符号字体文件已从基于 PNG 的文件更改为基于矢量的文件。出于兼容性原因,系统在 Android 13 和 14 中保留了旧版字体文件,以便具有自己的字体渲染程序的应用在能够升级之前继续使用旧版字体文件。

如需检查您的应用是否受到影响,请在应用的代码中搜索对 NotoColorEmojiLegacy.ttf 文件的引用。

您可以通过多种方式自适应应用:

  • 使用平台 API 进行文本渲染。您可以将文本渲染到基于位图的 Canvas,并在必要时使用该 Canvas 获取原始图片。
  • 为您的应用添加 COLRv1 字体支持。FreeType 开源库在 2.13.0 版及更高版本中支持 COLRv1。
  • 作为最后的手段,您可以将旧版表情符号字体文件 (NotoColorEmoji.ttf) 捆绑到 APK 中,但在这种情况下,您的应用将缺少最新的表情符号更新。如需了解详情,请参阅 Noto Emoji GitHub 项目页面

Aumentamos a versão mínima do SDK de destino de 23 para 24.

O Android 15 se baseia no das mudanças feitas no Android 14 e amplia essa aumentar a segurança. No Android 15, os apps com uma Não é possível instalar uma targetSdkVersion anterior a 24. Exigir que os aplicativos atendam aos níveis modernos da API ajuda a garantir melhor segurança e privacidade.

O malware geralmente tem como alvo níveis mais baixos de API para contornar a segurança e a privacidade de segurança que foram introduzidas em 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 15 dificulta que malwares evitem melhorias de segurança e privacidade. Tentar instalar um app destinado a uma API anterior resulta em falha na instalação, com uma mensagem como a seguinte que aparecem no Logcat:

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

Em dispositivos que fizerem upgrade para o Android 15, todos os apps com uma targetSdkVersion anterior de 24 permanecem 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

Segurança e privacidade

Android 15 引入了强大的措施来防范动态密码 (OTP) 欺诈并保护用户的敏感内容,重点是增强通知监听器服务和屏幕共享保护措施。主要增强功能包括从可供不可信应用访问的通知中隐去 OTP、在屏幕共享期间隐藏通知,以及在发布 OTP 时保护应用 activity。这些变更旨在保护用户的敏感内容,使其免受未经授权的操作者的侵害。

开发者需要注意以下事项,以确保其应用与 Android 15 中的变更兼容:

动态密码隐去

Android 会阻止实现 NotificationListenerService 的不受信任应用读取已检测到 OTP 的通知中的未隐去的内容。配套设备管理器关联等受信任应用不受这些限制。

屏幕共享保护

  • 在屏幕共享会话期间,系统会隐藏通知内容,以保护用户的隐私。如果应用实现了 setPublicVersion(),Android 会显示通知的公开版本,该版本在不安全情境中用作替换通知。否则,系统会隐去通知内容,不提供任何其他背景信息。
  • 系统会向远程观看者隐藏密码输入等敏感内容,以防止泄露用户的敏感信息。
  • 如果在屏幕共享期间检测到动态密码,系统会隐藏在该时间段内发布通知的应用的活动。应用内容在启动时会向远程查看器隐藏。
  • 除了 Android 自动识别敏感字段之外,开发者还可以使用 setContentSensitivity 手动将应用的部分标记为敏感,在屏幕共享期间,这些敏感字段会对远程观看者隐藏。
  • 开发者可以选择切换开发者选项下的停用屏幕共享防护选项,以便出于演示或测试目的豁免屏幕共享防护。默认的系统屏幕录制工具不受这些更改的影响,因为录制内容会保留在设备上。

Câmera e mídia

O Android 15 faz as seguintes mudanças no comportamento de mídia e câmera para todos os apps.

A reprodução de áudio direta e de descarga invalida as faixas de áudio diretas ou de descarga abertas anteriormente quando os limites de recursos são atingidos.

在 Android 15 之前,如果某个应用在另一个应用播放音频且达到资源限制时请求直接或分流音频播放,该应用将无法打开新的 AudioTrack

从 Android 15 开始,当应用请求直接播放或分流播放且达到资源限制时,系统会使任何当前打开的 AudioTrack 对象失效,以防止执行新轨道请求。

(直接音轨和分流音轨通常会打开,以播放压缩音频格式。播放直接音频的常见用例包括通过 HDMI 将编码的音频流式传输到电视。分流轨道通常用于在具有硬件 DSP 加速的移动设备上播放压缩音频。)

Experiência do usuário e interface do sistema

O Android 15 inclui algumas mudanças que visam criar uma experiência do usuário mais consistente e intuitiva.

Animações de volta preditiva ativadas para apps que ativaram a opção

A partir do Android 15, a opção para desenvolvedores de animações de volta preditiva foi removida. Animações do sistema, como voltar à tela inicial, entre tarefas e atividades, agora aparecem para apps que ativaram o gesto de volta preditivo inteiramente ou em um nível de atividade. Se o app for afetado, realize as seguintes ações:

  • Confira se o app foi migrado corretamente para usar o gesto de volta previsivo.
  • Verifique se as transições de fragmentos funcionam com a navegação de volta preditiva.
  • Migrar de animações e transições de framework e usar animações e transições do androidx.
  • Migração de backstacks que FragmentManager não conhece. Use backstacks gerenciadas por FragmentManager ou pelo componente de navegação.

Widgets desativados quando o usuário força a interrupção de um app

Se um usuário interromper um app em um dispositivo com o Android 15, o sistema desativará temporariamente todos os widgets do app. Os widgets estão esmaecidos, e o usuário não pode interagir com eles. Isso ocorre porque, a partir do Android 15, o sistema cancela todas as intents pendentes de um app quando ele é forçado a parar.

O sistema reativa esses widgets na próxima vez que o usuário abrir o app.

Para mais informações, consulte Mudanças no estado de pacotes interrompidos.

O ícone da barra de status de projeção de mídia alerta os usuários sobre compartilhamento, transmissão e gravação de tela

As explorações de projeção de tela expõem dados privados do usuário, como informações financeiras, porque os usuários não percebem que a tela do dispositivo está sendo compartilhada.

Para apps executados em dispositivos com o Android 15 QPR1 ou mais recente, um ícone grande e visível na barra de status alerta os usuários sobre qualquer projeção de tela em andamento. Os usuários podem tocar no ícone para impedir que a tela seja compartilhada, transmitida ou gravada. Além disso, a projeção da tela é interrompida automaticamente quando a tela do dispositivo é bloqueada.

Bloco da barra de status para compartilhamento de tela, transmissão e gravação.

Verificar se o app é afetado

Por padrão, o app inclui o ícone da barra de status e suspende automaticamente a projeção de tela quando a tela de bloqueio é ativada.

Para saber mais sobre como testar seu app para esses casos de uso, consulte Ícone da barra de status e parada automática.

Restrições de acesso à rede em segundo plano

No Android 15, os apps que iniciam uma solicitação de rede fora de um ciclo de vida de processo válido recebem uma exceção. Normalmente, um UnknownHostException ou outro IOException relacionado ao soquete. As solicitações de rede que acontecem fora de um ciclo de vida válido geralmente são devido a apps que continuam uma solicitação de rede sem saber, mesmo depois que o app não está mais ativo.

Para reduzir essa exceção, use componentes com reconhecimento de ciclo de vida para garantir que as solicitações de rede tenham reconhecimento de ciclo de vida e sejam canceladas ao sair de um ciclo de vida de processo válido. Se for importante que a solicitação de rede aconteça mesmo quando o usuário sair do aplicativo, programe a solicitação de rede usando o WorkManager ou continue uma tarefa visível para o usuário usando o Serviço em primeiro plano.

Suspensões de uso

A cada versão, algumas APIs específicas do Android podem se tornar obsoletas ou precisarem ser refatoradas para fornecer uma melhor experiência aos desenvolvedores ou oferecer compatibilidade com as novas funcionalidades da plataforma. Nesses casos, descontinuamos oficialmente as APIs obsoletas e direcionamos os desenvolvedores para APIs alternativas.

Descontinuação significa que encerramos o suporte oficial para as APIs, mas elas continuarão disponíveis para os desenvolvedores. Para saber mais sobre as descontinuações importantes nesta versão do Android, consulte a página de descontinuações.