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

软件包 FLAG_STOPPED 状态(用户可以通过在 AOSP build 中长按应用图标并选择“强制停止”来启用此状态)的用途一直是让应用保持在此状态,直到用户通过直接启动应用或间接与应用互动(通过 Sharesheet 或 widget、将应用选择为动态壁纸等)来明确将应用从此状态移除。在 Android 15 中,我们更新了系统行为,使其与此预期行为保持一致。应用应仅通过直接或间接的用户操作从停止状态移除。

为了支持预期行为,除了现有限制之外,当应用在搭载 Android 15 的设备上进入停止状态时,系统还会取消所有待处理 intent。当用户的操作将应用从停止状态移除时,系统会将 ACTION_BOOT_COMPLETED 广播传送到应用,以便应用有机会重新注册所有待处理 intent。

您可以调用新的 ApplicationStartInfo.wasForceStopped() 方法来确认应用是否已进入停止状态。

Suporte a tamanhos de página de 16 KB

从历史上看,Android 仅支持 4 KB 内存页面大小,这优化了系统内存性能,以适应 Android 设备通常拥有的平均总内存量。从 Android 15 开始,AOSP 支持配置为使用 16 KB 页面大小的设备(16 KB 设备)。如果您的应用直接或通过 SDK 间接使用任何 NDK 库,则需要重新构建应用,才能在这些 16 KB 设备上运行。

随着设备制造商不断制造出具有更大物理内存 (RAM) 的设备,许多此类设备将采用 16 KB(最终甚至更大)的页面大小来优化设备性能。添加对 16 KB 页面大小设备的支持,可让您的应用在这些设备上运行,并帮助您的应用受益于相关的性能改进。如果不重新编译,应用将无法在未来 Android 版本的 16 KB 设备上运行。

为帮助您为应用添加支持,我们提供了相关指南,介绍了如何检查应用是否受到影响、如何重新构建应用(如果适用),以及如何使用模拟器(包括 Android 模拟器的 Android 15 系统映像)在 16 KB 环境中测试应用

优势和性能提升

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.

检查您的应用是否受到影响

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 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

O arquivo de fonte de emoji legada (NotoColorEmojiLegacy.ttf) com base em PNG foi removido, deixando apenas o arquivo baseado em vetor. A partir do Android 13 (nível 33 da API), o arquivo de fonte de emoji usado pelo renderizador de emoji do sistema mudou de um arquivo baseado em PNG para um baseado em vetor. O sistema reteve o arquivo de fonte legada no Android 13 e 14 por motivos de compatibilidade. Assim, apps com renderizadores de fontes próprios podiam continuar usando o arquivo de fonte legada até que pudessem fazer upgrade.

Para verificar se o app foi afetado, procure referências ao arquivo NotoColorEmojiLegacy.ttf no código do app.

Você pode adaptar seu app de várias maneiras:

  • Use APIs da plataforma para renderização de texto. É possível renderizar texto em uma Canvas com suporte a bitmap e usá-la para receber uma imagem bruta, se necessário.
  • Adicione suporte a fontes COLRv1 ao app. A biblioteca de código aberto FreeType oferece suporte a COLRv1 na versão 2.13.0 e mais recentes.
  • Como último recurso, você pode agrupar o arquivo de fonte de emoji legado (NotoColorEmoji.ttf) no APK, mas, nesse caso, o app não terá as atualizações mais recentes de emoji. Para mais informações, consulte a página do projeto Noto Emoji no GitHub (em inglês).

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

Android 15 builds on the the changes that were made in Android 14 and extends this security further. In Android 15, apps with a targetSdkVersion lower than 24 can't be installed. Requiring apps to meet modern API levels helps to ensure better security and privacy.

Malware often targets lower API levels in order to bypass security and privacy protections that have been introduced in higher Android versions. For example, some malware apps use a targetSdkVersion of 22 to avoid being subjected to the runtime permission model introduced in 2015 by Android 6.0 Marshmallow (API level 23). This Android 15 change makes it harder for malware to avoid security and privacy improvements. Attempting to install an app targeting a lower API level results in an installation failure, with a message like the following one appearing in Logcat:

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

On devices upgrading to Android 15, any apps with a targetSdkVersion lower than 24 remain installed.

If you need to test an app targeting an older API level, use the following ADB command:

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

从 Android 15 开始,预测性返回动画的开发者选项已被移除。现在,如果应用已完全或在 activity 级别选择启用预测性返回手势,则系统会为其显示“返回主屏幕”“跨任务”和“跨 activity”等系统动画。如果您的应用受到了影响,请执行以下操作:

  • 确保您的应用已正确迁移,以使用预测性返回手势。
  • 确保 fragment 转场效果可与预测性返回导航搭配使用。
  • 请弃用动画和框架过渡,改用动画和 androidx 过渡。
  • FragmentManager 不认识的返回堆栈迁移。请改用由 FragmentManager 或 Navigation 组件管理的返回堆栈。

Widgets desativados quando o usuário interrompe um app

If a user force-stops an app on a device running Android 15, the system temporarily disables all the app's widgets. The widgets are grayed out, and the user cannot interact with them. This is because beginning with Android 15, the system cancels all an app's pending intents when the app is force-stopped.

The system re-enables those widgets the next time the user launches the app.

For more information, see Changes to package stopped state.

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.

检查您的应用是否受到影响

默认情况下,您的应用会包含状态栏条状标签,并会在锁定屏幕激活时自动暂停屏幕投影。

如需详细了解如何针对这些用例测试应用,请参阅状态栏条状标签和自动停止

Restrições de acesso à rede em segundo plano

在 Android 15 中,如果应用在有效的进程生命周期之外启动网络请求,则会收到异常。通常是 UnknownHostException 或其他与套接字相关的 IOException。在有效生命周期之外发生的网络请求通常是因为应用在不再活跃后,不知不觉地继续发出网络请求。

为缓解此异常,请使用生命周期感知型组件,确保您的网络请求具有生命周期感知功能,并在离开有效的进程生命周期时取消。如果您非常重视即使用户离开应用也要发出网络请求,请考虑使用 WorkManager 调度网络请求,或使用前台服务继续执行对用户可见的任务。

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.