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.

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

The intention of the package FLAG_STOPPED state (which users can engage in AOSP builds by long-pressing an app icon and selecting "Force Stop") has always been to keep apps in this state until the user explicitly removes the app from this state by directly launching the app or indirectly interacting with the app (through the sharesheet or a widget, selecting the app as live wallpaper, etc.). In Android 15, we've updated the behavior of the system to be aligned with this intended behavior. Apps should only be removed from the stopped state through direct or indirect user action.

To support the intended behavior, in addition to the existing restrictions, the system also cancels all pending intents when the app enters the stopped state on a device running Android 15. When the user's actions remove the app from the stopped state, the ACTION_BOOT_COMPLETED broadcast is delivered to the app providing an opportunity to re-register any pending intents.

You can call the new ApplicationStartInfo.wasForceStopped() method to confirm whether the app was put into the stopped state.

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

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

The legacy, PNG-based emoji font file (NotoColorEmojiLegacy.ttf) has been removed, leaving just the vector-based file. Beginning with Android 13 (API level 33), the emoji font file used by the system emoji renderer changed from a PNG-based file to a vector based file. The system retained the legacy font file in Android 13 and 14 for compatibility reasons, so that apps with their own font renderers could continue to use the legacy font file until they were able to upgrade.

To check if your app is affected, search your app's code for references to the NotoColorEmojiLegacy.ttf file.

You can choose to adapt your app in a number of ways:

  • Use platform APIs for text rendering. You can render text to a bitmap-backed Canvas and use that to get a raw image if necessary.
  • Add COLRv1 font support to your app. The FreeType open source library supports COLRv1 in version 2.13.0 and higher.
  • As a last resort, you can bundle the legacy emoji font file (NotoColorEmoji.ttf) into your APK, although in that case your app will be missing the latest emoji updates. For more information, see the Noto Emoji GitHub project page.

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

Android 15 introduces robust measures to combat one-time passcode (OTP) fraud and to protect the user's sensitive content, focusing on hardening the Notification Listener Service and screenshare protections. Key enhancements include redacting OTPs from notifications accessible to untrusted apps, hiding notifications during screenshare, and securing app activities when OTPs are posted. These changes aim to keep the user's sensitive content safe from unauthorized actors.

Developers need to be aware of the following to ensure their apps are compatible with the changes in Android 15:

OTP Redaction

Android will stop untrusted apps that implement a NotificationListenerService from reading unredacted content from notifications where an OTP has been detected. Trusted apps such as companion device manager associations are exempt from these restrictions.

Screenshare Protection

  • Notification content is hidden during screen sharing sessions to preserve the user's privacy. If the app implements setPublicVersion(), Android shows the public version of the notification which serves as a replacement notification in insecure contexts. Otherwise, the notification content is redacted without any further context.
  • Sensitive content like password input is hidden from remote viewers to prevent revealing the user's sensitive information.
  • Activities from apps that post notifications during screenshare where an OTP has been detected will be hidden. App content is hidden from the remote viewer when launched.
  • Beyond Android's automatic identification of sensitive fields, developers can manually mark parts of their app as sensitive using setContentSensitivity, which is hidden from remote viewers during screenshare.
  • Developers can choose to toggle the Disable screen share protections option under Developer Options to be exempted from the screenshare protections for demo or testing purposes. The default system screen recorder is exempted from these changes, since the recordings remain on-device.

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 direta e de descarga de áudio invalida as faixas de áudio diretas ou de descarga abertas anteriormente quando os limites de recursos são atingidos.

Before Android 15, if an app requested direct or offload audio playback while another app was playing audio and the resource limits were reached, the app would fail to open a new AudioTrack.

Beginning with Android 15, when an app requests direct or offload playback and the resource limits are reached, the system invalidates any currently open AudioTrack objects which prevent fulfilling the new track request.

(Direct and offload audio tracks are typically opened for playback of compressed audio formats. Common use-cases for playing direct audio include streaming encoded audio over HDMI to a TV. Offload tracks are typically used to play compressed audio on a mobile device with hardware DSP acceleration.)

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

Beginning in Android 15, the developer option for predictive back animations has been removed. System animations such as back-to-home, cross-task, and cross-activity now appear for apps that have opted in to the predictive back gesture either entirely or at an activity level. If your app is affected, take the following actions:

  • Ensure that your app has been properly migrated to use the predictive back gesture.
  • Ensure that your fragment transitions work with predictive back navigation.
  • Migrate away from animation and framework transitions and use animator and androidx transitions instead.
  • Migrate away from back stacks that FragmentManager doesn't know about. Use back stacks managed by FragmentManager or by the Navigation component instead.

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

Screen projection exploits expose private user data such as financial information because users don't realize their device screen is being shared.

For apps running on devices with Android 15 QPR1 or higher, a status bar chip that is large and prominent alerts users to any in‑progress screen projection. Users can tap the chip to stop their screen from being shared, cast, or recorded. Also, screen projection automatically stops when the device screen is locked.

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

Check if your app is impacted

By default, your app includes the status bar chip and automatically suspends screen projection when the lock screen activates.

To learn more about how to test your app for these use cases, see Status bar chip and auto stop.

Restrições de acesso à rede em segundo plano

In Android 15, apps that start a network request outside of a valid process lifecycle receive an exception. Typically, an UnknownHostException or other socket-related IOException. Network requests that happen outside of a valid lifecycle are usually due to apps unknowingly continuing a network request even after the app is no longer active.

To mitigate this exception, ensure your network requests are lifecycle aware and cancelled upon leaving a valid process lifecycle by using lifecycle aware components. If it is important that the network request should happen even when the user leaves the application, consider scheduling the network request using WorkManager or continue a user visible task using Foreground Service.

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.