Mudanças de comportamento: todos os apps

A plataforma Android 15 inclui mudanças de comportamento que podem afetar seu app. As mudanças de comportamento 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 oferecer suporte a essas mudanças, quando aplicável.

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 de pacotes interrompidos

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ó oferece suporte a tamanhos de página de memória de 4 KB, o que desempenho de memória do sistema otimizado para a quantidade média de memória total que dispositivos Android normalmente tiveram. A partir do Android 15, o AOSP oferece suporte dispositivos configurados para usar um tamanho de página de 16 KB (16 KB) dispositivos). Se o app usa alguma biblioteca NDK diretamente ou indiretamente por meio de um SDK, você precisará recriar seu aplicativo para que ele funcionam nesses dispositivos de 16 KB.

À medida que os fabricantes continuam a construir dispositivos com quantidades na memória física (RAM), a maioria desses dispositivos adotará 16 KB tamanhos de página maiores) para otimizar o desempenho do dispositivo. Adicionando o suporte a dispositivos com tamanho de página de 16 KB permite que seu app seja executado nesses dispositivos. e ajuda seu app a se beneficiar do desempenho associado melhorias. Sem a recompilação, os apps podem não funcionar em dispositivos de 16 KB quando forem colocados em produção em versões futuras do Android.

Para ajudar você a adicionar a compatibilidade com seu app, oferecemos orientações sobre como verificar caso seu app seja afetado, como recriar o app (se aplicável) e como testá-lo na em um ambiente de 16 KB usando emuladores (incluindo o Android 15); imagens do sistema para o Android Emulator).

Benefícios e ganhos de desempenho

Os dispositivos configurados com tamanhos de página de 16 KB usam um pouco mais de memória em média, mas também têm várias melhorias de desempenho para o sistema e os apps:

  • Tempos de inicialização do app mais rápidos enquanto o sistema está sob pressão de memória: 3,16% mais baixos em média, com melhorias mais significativas (até 30%) em alguns apps testados.
  • Redução do consumo de energia durante o lançamento do app: redução média de 4,56%
  • Lançamento mais rápido da câmera: 4,48% mais rápido em média e 6,60% mais rápido em média
  • Tempo de inicialização do sistema melhorado: melhoria de 8% (aproximadamente 950 milissegundos) em média

Essas melhorias são baseadas nos testes iniciais, e os resultados em dispositivos reais provavelmente serão diferentes. Forneceremos análises adicionais de ganhos em potencial para apps à medida que continuarmos nossos testes.

Verificar se o app é afetado

Se o app usar algum código nativo, recompile o app com suporte a 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á algum código nativo e verifique o alinhamento dos segmentos ELF para encontrar bibliotecas compartilhadas.

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 seu 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 que alguns apps ofereçam suporte ao espaço particular

Private space is a new feature in Android 15 that lets users create a separate space on their device where they can keep sensitive apps away from prying eyes, under an additional layer of authentication. Because apps in the private space have restricted visibility, some types of apps need to take additional steps to be able to see and interact with apps in a user's private space.

All apps

Because apps in the private space are kept in a separate user profile, similar to work profiles, apps shouldn't assume that any installed copies of their app that aren't in the main profile are in the work profile. If your app has logic related to work profile apps that make this assumption, you'll need to adjust this logic.

Medical apps

When a user locks the private space, all apps in the private space are stopped, and those apps can't perform foreground or background activities, including showing notifications. This behavior might critically impact the use and function of medical apps installed in the private space.

The private space setup experience warns users that the private space is not suitable for apps that need to perform critical foreground or background activities, such as showing notifications from medical apps. However, apps can't determine whether or not they're being used in the private space, so they can't show a warning to the user for this case.

For these reasons, if you develop a medical app, review how this feature might impact your app and take appropriate actions—such as informing your users not to install your app in the private space—to avoid disrupting critical app capabilities.

Launcher apps

If you develop a launcher app, you must do the following before apps in the private space will be visible:

  1. Your app must be assigned as the default launcher app for the device—that is, possessing the ROLE_HOME role.
  2. Your app must declare the ACCESS_HIDDEN_PROFILES normal permission in your app's manifest file.

Launcher apps that declare the ACCESS_HIDDEN_PROFILES permission must handle the following private space use cases:

  1. Your app must have a separate launcher container for apps installed in the private space. Use the getLauncherUserInfo() method to determine which type of user profile is being handled.
  2. The user must be able to hide and show the private space container.
  3. The user must be able to lock and unlock the private space container. Use the requestQuietModeEnabled() method to lock (by passing true) or unlock (by passing false) the private space.
  4. While locked, no apps in the private space container should be visible or discoverable through mechanisms such as search. Your app should register a receiver for the ACTION_PROFILE_AVAILABLE and ACTION_PROFILE_UNAVAILABLE broadcasts and update the UI in your app when the locked or unlocked state of the private space container changes. Both of these broadcasts include EXTRA_USER, which your app can use to refer to the private profile user.

    You can also use the isQuietModeEnabled() method to check whether the private space profile is locked or not.

App store apps

The private space includes an "Install Apps" button that launches an implicit intent to install apps into the user's private space. In order for your app to receive this implicit intent, declare an <intent-filter> in your app's manifest file with a <category> of CATEGORY_APP_MARKET.

A fonte de emoji baseada em PNG foi 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 项目页面

Aumento da versão mínima do SDK de destino de 23 para 24

Android 15 基于 在 Android 14 中进行的更改,并扩展了 安全性。在 Android 15 中, 无法安装低于 24 的 targetSdkVersion。 要求应用符合现代 API 级别有助于确保更好的安全性和 保护隐私。

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

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

在升级到 Android 15 的设备上,targetSdkVersion 级别较低的任何应用 安装在 Google Play 上

如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 ADB 命令:

adb install --bypass-low-target-sdk-block FILENAME.apk

Segurança e privacidade

O Android 15 apresenta medidas robustas para combater a fraude de senha única (OTP, na sigla em inglês) e proteger o conteúdo sensível do usuário, com foco em aumentar a proteção do serviço de listener de notificações e do compartilhamento de tela. As principais melhorias incluem a edição de OTPs de notificações acessíveis a apps não confiáveis, o ocultamento de notificações durante o compartilhamento de tela e a proteção de atividades do app quando OTPs são publicadas. O objetivo dessas mudanças é proteger o conteúdo sensível do usuário contra atores não autorizados.

Os desenvolvedores precisam estar cientes do seguinte para garantir que os apps sejam compatíveis com as mudanças no Android 15:

OTP Redaction

O Android vai impedir que apps não confiáveis que implementam um NotificationListenerService leiam conteúdo não editado de notificações em que um OTP foi detectado. Os apps confiáveis, como as associações de gerenciador de dispositivos secundário, estão isentos dessas restrições.

Proteção de compartilhamento de tela

  • O conteúdo da notificação é ocultado durante as sessões de compartilhamento de tela para preservar a privacidade do usuário. Se o app implementar setPublicVersion(), o Android vai mostrar a versão pública da notificação, que serve como uma notificação de substituição em contextos não seguros. Caso contrário, o conteúdo da notificação será editado sem nenhum outro contexto.
  • Conteúdo sensível, como a entrada de senha, fica oculto para os espectadores remotos para evitar a revelação de informações sensíveis do usuário.
  • As atividades de apps que postam notificações durante o compartilhamento de tela em que um OTP foi detectado serão ocultas. O conteúdo do app fica oculto do espectador remoto quando é iniciado.
  • Além da identificação automática de campos sensíveis do Android, os desenvolvedores podem marcar manualmente partes do app como sensíveis usando setContentSensitivity, que é ocultado dos espectadores remotos durante o compartilhamento de tela.
  • Os desenvolvedores podem ativar a opção Desativar proteções do compartilhamento de tela em Opções do desenvolvedor para serem dispensados das proteções do compartilhamento de tela para fins de demonstração ou teste. O gravador de tela padrão do sistema está isento dessas mudanças, já que as gravações permanecem no dispositivo.

Câmera e mídia

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

A reprodução de áudio direto e de transferência invalida as faixas de áudio direto ou de transferência abertas anteriormente quando os limites de recursos são atingidos

Antes do Android 15, se um app solicitasse a reprodução de áudio direta ou de transferência enquanto outro app estava reproduzindo áudio e os limites de recursos fossem alcançados, o app não conseguiria abrir uma nova AudioTrack.

A partir do Android 15, quando um app solicita a reprodução direta ou de descarga e os limites de recurso são alcançados, o sistema invalida todos os objetos AudioTrack abertos que impedem o atendimento da nova solicitação de faixa.

As faixas de áudio diretas e de transferência geralmente são abertas para a reprodução de formatos de áudio compactados. Os casos de uso comuns para a reprodução de áudio direto incluem o streaming de áudio codificado por HDMI para uma TV. As faixas de transferência são geralmente usadas para reproduzir áudio compactado em um dispositivo móvel com aceleração de DSP de hardware.

Experiência do usuário e interface do sistema

O Android 15 inclui algumas mudanças que têm como objetivo 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 interrompe um app

如果用户在搭载 Android 15 的设备上强制停止应用,系统会暂时停用该应用的所有微件。这些 widget 会灰显,用户无法与其互动。这是因为,从 Android 15 开始,当系统强制停止应用时,会取消应用的所有待处理 intent。

系统会在用户下次启动应用时重新启用这些微件。

如需了解详情,请参阅对软件包停止状态的更改

O ícone da barra de status da projeção de mídia alerta os usuários sobre o compartilhamento, a transmissão e a 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 precisar 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 usar 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 descontinuações.