A plataforma Android 15 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 15:
independente de targetSdkVersion
. Teste seu app e modifique-o
conforme necessário para apoiá-las adequadamente, quando aplicável.
Consulte também a lista de mudanças de comportamento que afetam apenas apps. destinados ao Android 15.
Principal recurso
O Android 15 modifica ou expande vários recursos principais do sistema Android.
Alterações no estado de pacote interrompido
A intenção do estado do pacote FLAG_STOPPED
(que os usuários
podem interagir em builds do AOSP ao tocar e manter pressionado um ícone do app e selecionar "Forçar
Parar") sempre foi manter os apps nesse estado até que o usuário o
remova explicitamente desse estado, iniciando o app diretamente ou interagindo indiretamente com o app (por meio do Sharesheet ou de um widget, selecionando o app
como plano de fundo interativo etc.). No Android 15, estamos atualizando o comportamento do
sistema para que ele fique alinhado a esse comportamento pretendido. Os apps só podem ser removidos
do estado interrompido com ação direta ou indireta do usuário.
Para oferecer suporte ao comportamento pretendido, além das restrições já existentes, o
sistema também cancela todas as intents pendentes quando o app entra no
estado interrompido em um dispositivo com o Android 15. Quando as ações do usuário removem o
app do estado interrompido, a transmissão ACTION_BOOT_COMPLETED
é entregue ao app, oferecendo uma oportunidade de registrar novamente qualquer
intent pendente.
Você pode chamar o novo método
ApplicationStartInfo.wasForceStopped()
para confirmar se o app foi colocado no estado interrompido.
Suporte a tamanhos de página de 16 KB
一直以来,Android 仅支持 4 KB 的内存页面大小,针对 Android 设备通常拥有的平均总内存量,系统内存性能进行了优化。从 Android 15 开始,Android 支持配置为使用 16 KB 页面大小的设备(即 16 KB 设备)。
随着设备制造商不断打造具有更大物理内存 (RAM) 的设备,这些设备中的许多可能会配置 16 KB(最终更大)的页面大小,以优化设备的性能。添加对 16 KB 设备的支持可让您的应用在这些设备上运行,并帮助您的应用从相关性能改进中受益。为了帮助您解决此问题,我们提供了一些指南,帮助您了解如何检查您的应用是否受到影响、如何重新构建应用(如果适用),以及如何同时使用模拟器和实体设备在 16 KB 的环境中测试应用。
Benefícios e ganhos de desempenho
Dispositivos configurados com tamanhos de página de 16 KB usam um pouco mais de memória em média, mas também recebem várias melhorias de desempenho para o sistema e os apps:
- Menor tempo de inicialização do app enquanto o sistema está sob pressão de memória: 3,16% menor, em média, com melhorias mais significativas (até 30%) para alguns apps testados.
- Consumo de energia reduzido durante a inicialização do app: em média, 4,56% de redução
- Lançamento mais rápido da câmera: inicializações a quente 4,48% mais rápidas, em média, e inicializações a frio 6,60% mais rápidas, em média.
- Melhoria no tempo de inicialização do sistema: melhoria de 1,5% (aproximadamente 0,8 segundo) em média.
Essas melhorias são baseadas em nossos testes iniciais, e os resultados em dispositivos reais provavelmente serão diferentes. Forneceremos análises adicionais de ganhos potenciais para apps à medida que continuarmos nossos testes.
Verificar se o app vai ser afetado
Se o app usar código nativo, recrie-o com suporte a dispositivos de 16 KB. Se você não tem certeza se o app usa código nativo, use o APK Analyzer para identificar se há algum código nativo.
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 dele.
Mudanças necessárias para que alguns apps sejam compatíveis com o espaço privado
O espaço privado é um novo recurso do Android 15 que permite que os usuários criem um espaço separado no dispositivo para manter apps sensíveis longe de curiosos, com uma camada extra de autenticação. Como os apps no espaço particular têm visibilidade restrita, alguns tipos de apps precisam tomar outras medidas para poder ver e interagir com apps no espaço particular de um usuário.
Todos os apps
Como os apps no espaço particular são mantidos em um perfil de usuário separado, como perfis de trabalho, não presuma que todas as cópias instaladas do app que não estejam no perfil principal estejam no perfil de trabalho. Se o app tiver uma lógica relacionada a apps do perfil de trabalho que fazem essa suposição, será necessário ajustar essa lógica.
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:
- Seu app precisa ser atribuído à tela de início padrão do dispositivo, ou seja,
ter o papel
ROLE_HOME
. - O app precisa declarar a permissão normal
ACCESS_HIDDEN_PROFILES
no arquivo de manifesto.
Os apps de tela de início que declaram a permissão ACCESS_HIDDEN_PROFILES
precisam processar
os seguintes casos de uso de espaço privado:
- Seu app precisa ter um contêiner da tela de início separado para apps instalados no
espaço privado. Use o método
getLauncherUserInfo()
para determinar que tipo de perfil de usuário está sendo processado. - O usuário precisa conseguir ocultar e mostrar o contêiner do espaço privado.
- O usuário precisa conseguir bloquear e desbloquear o contêiner do espaço privado. Use o método
requestQuietModeEnabled()
para bloquear (transmitindotrue
) ou desbloquear (transmitindofalse
) o espaço privado. Enquanto ele estiver bloqueado, nenhum app no contêiner do espaço privado poderá ficar visível ou detectável por mecanismos como a pesquisa. Seu app precisa registrar um receptor para as transmissões
ACTION_PROFILE_AVAILABLE
eACTION_PROFILE_UNAVAILABLE
e atualizar a interface no app quando o estado bloqueado ou desbloqueado do contêiner do espaço privado mudar. Essas duas transmissões incluemEXTRA_USER
, que seu app pode usar para se referir ao usuário do perfil particular.Você também pode usar o método
isQuietModeEnabled()
para verificar se o perfil do espaço privado 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 um <intent-filter>
no arquivo de manifesto do app com um <category>
de
CATEGORY_APP_MARKET
.
Fonte de emoji baseada em PNG removida
O arquivo legado de fonte de emojis baseada em PNG (NotoColorEmojiLegacy.ttf
) foi
deixando apenas o arquivo baseado em vetor. Do Android 13 em diante (API)
nível 33), o arquivo de fonte de emojis usado pelo renderizador de emojis do sistema mudou de um
arquivo baseado em PNG para um arquivo vetorial. O sistema manteve
o arquivo de fonte legado no Android 13 e 14 por motivos de compatibilidade,
os apps com os próprios renderizadores de fonte podem continuar usando o arquivo de fonte legado.
até conseguirem fazer upgrade.
Há várias maneiras de adaptar o app:
- Usar APIs da plataforma para renderização de texto. É possível renderizar texto em uma
Canvas
e use isso para conseguir 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 alto.
- Como último recurso, você pode agrupar o arquivo de fonte de emojis legado
(
NotoColorEmoji.ttf
) ao seu APK, mas, nesse caso, seu app não terá as atualizações mais recentes de emojis. Para mais informações, consulte o projeto Noto Emoji do GitHub .
Aumento da versão mínima do SDK de destino de 23 para 24
O Android 15 se baseia nas
mudanças feitas no Android 14 e amplia
ainda mais essa segurança. No Android 15, não é possível instalar apps com uma
targetSdkVersion
anterior à 24.
Exigir que os apps atendam a níveis modernos de API ajuda a garantir melhor segurança e
privacidade.
Geralmente, um malware é direcionado a níveis mais baixos de API para contornar as proteções de segurança e
privacidade 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. A tentativa de instalar um app direcionado a um nível de API anterior
resulta em uma falha na instalação, com uma mensagem como esta
aparecendo no Logcat:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7
Em dispositivos que passam por upgrade para o Android 15, todos os apps com uma targetSdkVersion
anterior
à 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
Câmera e mídia
O Android 15 faz as mudanças abaixo no comportamento da câmera e da mídia para todos apps.
A reprodução de áudio direta e descarregada agora invalida faixas de áudio diretas ou descarregadas 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 versão mais consistente, experiência do usuário intuitiva.
Animações de volta preditiva ativadas para apps em que o recurso foi ativado
No Android 15 e versões mais recentes, a opção de animações de volta preditiva foi removida. As animações do sistema, como voltar à tela inicial, entre tarefas e entre atividades, agora aparecem para apps que ativaram o gesto de volta preditivo inteiramente ou no nível da atividade. Se o app for afetado, faça o seguinte:
- Verifique se o app foi migrado corretamente para usar o gesto de volta previsto.
- Verifique se as transições de fragmento funcionam com a navegação de volta preditiva.
- Migrar das transições de animação e framework e usar transições Animator e androidx.
- Migrar das backstacks que o
FragmentManager
não conhece. Use backstacks gerenciadas porFragmentManager
ou pelo componente Navigation.
Widgets desativados quando o usuário força o fechamento de um app
Se um usuário forçar o fechamento de um app em um dispositivo com o Android 15, o sistema desativará temporariamente todos os widgets do app. Os widgets ficam esmaecidos, e o usuário não consegue interagir com eles. Isso ocorre porque, no Android 15 e versões mais recentes, o sistema cancela todas as intents pendentes de um app com fechamento forçado.
O sistema reativará esses widgets na próxima vez que o usuário iniciar o aplicativo.
Para mais informações, consulte Mudanças no estado de pacote interrompido.
Suspensões de uso
A cada versão, APIs específicas do Android podem se tornar obsoletas ou ter que ser refatorado para fornecer uma melhor experiência ao desenvolvedor ou oferecer suporte a nova plataforma capabilities. Nesses casos, descontinuamos oficialmente as APIs obsoletas e direcionar os desenvolvedores para APIs alternativas.
Descontinuação significa que encerramos o suporte oficial para as APIs, mas elas ainda continuam disponíveis para os desenvolvedores. Para saber mais sobre eventos descontinuações nesta versão do Android, consulte a página de descontinuações.