O APK enviado por upload precisa atender aos requisitos de nível de API do Google Play. Novos apps e atualizações precisam segmentar o Android 10 (nível 29 da API) ou versões mais recentes. Já os apps para Wear OS precisam segmentar o nível 28 da API ou versões mais recentes.
A partir de agosto de 2021, os novos apps precisarão:
- publicar material com o formato Android App Bundle;
- usar o Play Asset Delivery ou o Play Feature Delivery para enviar os recursos que excedam o tamanho de download de 150 MB. Os arquivos de expansão (OBBs) não serão mais compatíveis com novos apps;
- segmentar o nível 30 da API (Android 11) ou versões mais recentes e ajustar as mudanças comportamentais. Os apps para Wear OS precisam continuar segmentando o nível 28 da API ou versões mais recentes.
A partir de novembro de 2021, as atualizações de apps precisarão segmentar o nível 30 da API ou versões mais recentes e ajustar as mudanças comportamentais no Android 11. Os apps atuais que não receberem atualizações não serão afetados e continuarão disponíveis na Play Store. Os apps para Wear OS precisam continuar segmentando o nível 28 da API ou versões recentes.
A mudança para o envio do Android App Bundle também afetará as experiências instantâneas que usam o formato ZIP legado de app instantâneos. A partir de agosto de 2021, será necessário publicar pacotes de apps instantâneos para novas experiências instantâneas e atualizações nas existentes.
Por que segmentar SDKs mais recentes?
Cada nova versão do Android inclui mudanças que trazem melhorias significativas de segurança e
desempenho e aprimoram a experiência do usuário no Android
em geral. Algumas dessas mudanças se aplicam somente a apps que declaram o suporte explicitamente pelo
atributo de manifesto targetSdkVersion
, também conhecido como o nível desejado
da API.
Configurar o app para segmentar um nível de API recente garante que os usuários se beneficiem dessas melhorias. Ao mesmo tempo, o app poderá ser executado em versões mais antigas do Android. Segmentar um nível de API recente também permite que o app aproveite os últimos recursos da plataforma para conquistar seus usuários. Além disso, a partir do Android 10 (nível 29 da API), os usuários verão um aviso ao iniciarem um app pela primeira vez se o app segmentar o Android 5.1 (nível 22 da API) ou versões anteriores.
Este documento destaca pontos importantes que você precisa saber ao atualizar o nível desejado da API para atender ao requisito do Google Play.
Observação: se o arquivo Gradle contiver
entradas de manifesto, será possível confirmar ou mudar o valor atual de
targetSdkVersion
no arquivo Gradle do app, conforme descrito em
Configurar a versão.
Como alternativa, é possível usar o atributo android:targetSdkVersion
no arquivo de manifesto, conforme descrito na documentação
do elemento de manifesto
<uses-sdk>.
Migrar do Android 10 (nível 29 da API) para o Android 11 (nível 30 da API)
- Privacidade
- Aplicação do armazenamento com escopo: os apps precisam adotar o modelo de armazenamento com escopo. Nele, mídia e outros tipos de arquivo específicos do app são salvos e acessados por locais exclusivos.
- Redefinição automática de permissões: se os usuários não interagirem com um app por alguns meses, o sistema redefinirá automaticamente as permissões confidenciais do app. Isso não afetará a maioria dos apps. Caso o app funcione principalmente em segundo plano, sem interações com o usuário, solicite que os usuários desativem a redefinição automática.
- Acesso à localização em segundo plano: os apps precisam solicitar a permissão de localização em primeiro plano e em segundo plano separadamente. Só é possível conceder acesso à permissão de localização em segundo plano nas configurações do app, não em caixas de diálogo de permissão de execução.
- Visibilidade do
pacote: quando um app
consulta a lista de apps e serviços instalados no dispositivo, a lista retornada é
filtrada.
- Se você usar os serviços de
conversão de texto em voz ou
de reconhecimento de fala,
será necessário adicionar elementos
<queries>
para serviços ao arquivo de manifesto.
- Se você usar os serviços de
conversão de texto em voz ou
de reconhecimento de fala,
será necessário adicionar elementos
- Segurança
- Arquivos
resource.arsc
compactados não são mais compatíveis. - O esquema de assinatura do APK v2 é obrigatório. Por motivos de compatibilidade com versões anteriores, os desenvolvedores também precisam continuar a assinar com o Esquema de assinatura do APK v1.
- Restrição da interface não SDK. Não é recomendável usar interfaces não SDK para apps destinados ao nível 30 da API porque algumas delas foram bloqueadas. Consulte Interfaces não SDK que agora estão bloqueadas no Android 11 para ver a lista completa.
- Arquivos
Para as alterações introduzidas no Android 11 (nível 30 da API), consulte a página Mudanças de comportamento.
Migrar de versões anteriores para o Android 10 (nível 29 da API)
Selecione a versão do Android que será migrada:
Migrar para o Android 5 (nível 21 da API)
Consulte cada uma das seguintes versões na página "Mudanças de comportamento" para garantir que o app registrou as alterações apresentadas nelas:
Continue seguindo as instruções na próxima seção.
Migrar para o Android 6 (nível 23 da API)
As seguintes considerações se aplicam a apps que segmentam o Android 6.0 e versões mais recentes da plataforma:
-
Permissões de tempo de execução
-
Permissões perigosas são concedidas somente em tempo de execução. Os fluxos de interface do usuário precisam fornecer recursos para conceder essas permissões.
-
Sempre que possível, o app precisa estar preparado para lidar com a rejeição de solicitações de permissão. Por exemplo, se um usuário recusar uma solicitação para acessar o GPS do dispositivo, o app precisará ter outra maneira de prosseguir.
-
Para ver uma lista completa das alterações introduzidas no Android 6.0 (nível 23 da API), consulte a página Mudanças de comportamento dessa versão da plataforma.
Continue seguindo as instruções na próxima seção.
Migrar para o Android 7 (nível 24 da API)
As seguintes considerações se aplicam a apps que segmentam o Android 7.0 e versões mais recentes da plataforma:
-
Soneca e App em espera
Projete os comportamentos descritos no artigo sobre como otimizar para o "Soneca" e "App em espera", que engloba outras mudanças introduzidas em várias versões de plataforma.
Quando um dispositivo está nos modos Soneca e App em espera, o sistema se comporta da seguinte maneira:
- Restringe o acesso à rede.
- Adia alarmes, sincronizações e trabalhos.
- Restringe as verificações de GPS e Wi-Fi.
- Restringe mensagens do Firebase Cloud Messaging de prioridade normal.
-
Alterações de permissão
- O sistema restringe o acesso aos diretórios privados do app.
-
A exposição de um URI
file://
fora do app aciona umaFileUriExposedException
. Caso você precise compartilhar arquivos fora do app, implemente oFileProvider
.
-
O sistema proíbe a vinculação a bibliotecas não NDK.
Para ver uma lista completa das alterações introduzidas no Android 7.0 (nível 24 da API), consulte a página Mudanças de comportamento dessa versão da plataforma.
Continue seguindo as instruções na próxima seção.
Migrar para o Android 8 (nível 26 da API)
As seguintes considerações se aplicam a apps que segmentam o Android 8.0 e versões mais recentes da plataforma:
-
Limites de execução em segundo plano
-
O sistema restringe serviços para apps que não estão sendo executados em primeiro plano.
-
startService()
agora gera uma exceção quando um app tenta invocá-lo enquantostartService()
está proibido. -
Para iniciar serviços em primeiro plano, um app precisa usar
startForeground()
estartForegroundService()
. - Analise com atenção as alterações feitas na API JobScheduler, conforme documentado na página Mudanças de comportamento do Android 8.0 (nível 26 da API).
- O Firebase Cloud Messaging requer a versão 10.2.1 do SDK do Google Play Services ou superior.
- Ao usar o Firebase Cloud Messaging, a entrega de mensagens está sujeita a limites de execução em segundo plano. Quando o trabalho em segundo plano é necessário no recebimento da mensagem, como para executar a sincronização de dados em segundo plano, o app precisa agendar tarefas por meio do Firebase Job Dispatcher ou do JobIntentService. Para saber mais, consulte a documentação do Firebase Cloud Messaging.
-
-
Transmissões implícitas
-
Transmissões implícitas são restritas. Para saber mais sobre como lidar com eventos em segundo plano, consulte a documentação da API
JobScheduler
.
-
Transmissões implícitas são restritas. Para saber mais sobre como lidar com eventos em segundo plano, consulte a documentação da API
-
Limites da localização em segundo plano
-
Os apps executados em segundo plano têm acesso limitado aos dados de localização.
- Em dispositivos com o Google Play Services, use o provedor de localização combinada para receber atualizações periódicas sobre a localização.
-
Os apps executados em segundo plano têm acesso limitado aos dados de localização.
-
O sistema restringe serviços para apps que não estão sendo executados em primeiro plano.
-
Canais de notificação
- É necessário definir as propriedades de interrupção de notificação por canal.
- Atribua notificações a um canal para que elas apareçam.
-
Esta versão da plataforma é compatível com
NotificationCompat.Builder
.
-
Privacidade
- O ANDROID_ID é delimitado por chave de assinatura do app.
Para ver uma lista completa das alterações introduzidas no Android 8.0 (nível 26 da API), consulte a página Mudanças de comportamento dessa versão da plataforma.
Migrar do Android 8 (nível 26 da API) para o Android 9 (nível 28 da API)
-
Gerenciamento de energia
- Os intervalos do App em espera trazem novas restrições para segundo plano com base no engajamento do app, como tarefas adiadas, alarmes e cotas em mensagens de alta prioridade
- Os aprimoramentos da Economia de bateria aumentam as limitações do recurso App em espera.
-
Permissão de serviço de primeiro plano
- É preciso solicitar a permissão normal
FOREGROUND_SERVICE
(não a permissão de tempo de execução)
- É preciso solicitar a permissão normal
-
Mudanças de privacidade
- Acesso limitado a sensores em segundo plano
- Acesso restrito a registros de chamadas, agora no
grupo de permissões
CALL_LOG
- Acesso restrito a números de telefone, exigindo
a permissão
READ_CALL_LOG
- Acesso restrito a informações de Wi-Fi
Para ver uma lista completa de alterações introduzidas no Android 9.0 (nível 28 da API), consulte as Mudanças de comportamento.
Migrar do Android 9 (nível 28 da API) para o Android 10 (nível 29 da API)
-
Notificações
com uma intent de tela cheia
-
É preciso solicitar a permissão normal
USE_FULL_SCREEN_INTENT
(não a permissão de execução).
-
É preciso solicitar a permissão normal
-
Compatibilidade com dispositivos dobráveis
e de tela grande
-
Agora várias atividades podem ser colocadas no estado "retomada" ao mesmo tempo, mas somente uma delas receberá destaque.
-
Essa mudança afeta
o comportamento
de
onResume()
eonPause()
. -
Novo conceito de ciclo de vida de "principal atividade retomada", que pode ser detectado
ao se inscrever em
onTopResumedActivityChanged()
.- É possível marcar somente um item como "principal atividade retomada".
-
Essa mudança afeta
o comportamento
de
-
Quando
resizeableActivity
é definido comofalse
, os apps também poderão especificar umminAspectRatio
que coloca automaticamente o app com efeito letterbox em proporções mais estreitas.
-
Agora várias atividades podem ser colocadas no estado "retomada" ao mesmo tempo, mas somente uma delas receberá destaque.
-
Mudanças de privacidade
-
Armazenamento com escopo
- O acesso ao armazenamento externo é limitado somente a um diretório específico do app e a tipos específicos de mídia criados por ele.
-
O acesso ao local fica restrito enquanto o app estiver em segundo plano,
o que exige
a permissão
ACCESS_BACKGROUND_LOCATION
. - O acesso a identificadores não redefiníveis, como IMEI e número de série, fica restrito.
-
O acesso a informações de atividades físicas, como a
contagem de passos do usuário, fica restrito,
exigindo a permissão
ACTIVITY_RECOGNITION
. -
O acesso a
algumas APIs de
telefonia, Bluetooth e Wi-Fi fica restrito, que exigem
a permissão
ACCESS_FINE_LOCATION
. -
O acesso a configurações de Wi-Fi fica restrito.
- Os apps não podem mais ativar ou desativar o Wi-Fi diretamente e precisam fazer isso com painéis de configurações.
-
Há restrições para iniciar uma conexão a uma rede Wi-Fi,
que exige o uso de
WifiNetworkSpecifier
ouWifiNetworkSuggestion
.
-
Armazenamento com escopo
Atualize para o nível 30 da API pelas instruções da seção anterior.
Modernizar os apps
Ao atualizar o nível desejado da API para os apps, considere adotar recursos recentes da plataforma para modernizá-los e conquistar os usuários.
- Use o CameraX, que está em Beta, para aproveitar ao máximo o uso da câmera.
- Use os componentes do Jetpack para seguir as práticas recomendadas, eliminar a escrita de código de texto clichê e simplificar tarefas complexas para que você possa se concentrar no código de seu interesse.
- Use o Kotlin para escrever apps melhores, mais rapidamente e com menos código.
- Verifique se você está seguindo os requisitos e as práticas recomendadas de privacidade.
- Adicione compatibilidade com tema escuro aos seus apps.
- Adicione compatibilidade com a navegação por gestos aos seus apps.
- Migre o app do Google Cloud Messaging (GCM) para a versão mais recente do Firebase Cloud Messaging.
- Aproveite o gerenciamento avançado de janelas.
- Seja compatível com proporções maiores (mais que 16:9) para aproveitar os avanços recentes no hardware. Certifique-se de que o app seja redimensionado para preencher o espaço disponível na tela. Declare uma proporção máxima somente como último recurso. Para saber mais sobre as proporções máximas, consulte Declaração de suporte restrito à tela.
- Adicione compatibilidade com várias janelas para ajudar seu app a aumentar a produtividade e gerenciar várias telas.
- Se uma ótima experiência de app minimizado melhorar a experiência do usuário, adicione suporte à funcionalidade picture-in-picture.
- Otimize para dispositivos com corte de tela.
- Não presuma a altura da barra de status. Em vez disso, use
WindowInsets
eView.OnApplyWindowInsetsListener
. Assista a este vídeo para ver uma explicação. - Não presuma que o app tem a janela inteira. Em vez disso, confirme o
local usando
View.getLocationInWindow()
. Não useView.getLocationOnScreen()
. - Ao processar
MotionEvent
, useMotionEvent.getX()
eMotionEvent.getY()
. Não useMotionEvent.getRawX()
,MotionEvent.getRawY()
.
Verificar e atualizar SDKs e bibliotecas
Verifique se as dependências de terceiros do SDK oferecem suporte à API 29: alguns provedores de SDK as publicam no manifesto; outros exigirão uma investigação maior. Se você usa um SDK incompatível com a API 29, defina como prioridade o trabalho com o provedor do SDK para resolver o problema.
Além disso, observe que o targetSdkVersion
do app ou jogo pode restringir
o acesso a bibliotecas privadas da plataforma Android. Consulte Vinculação de apps NDK
às bibliotecas de plataforma para saber mais.
Também é necessário verificar quaisquer restrições
que possam existir na versão da Biblioteca de Suporte do Android que você está usando.
Como sempre, é preciso garantir a compatibilidade entre a versão principal
da Biblioteca de Suporte do Android e o compileSdkVersion
do app.
É recomendável escolher um targetSdkVersion
menor ou igual à versão principal
da Biblioteca de Suporte. Sugerimos a atualização para uma
biblioteca de suporte compatível mais recente, a fim de aproveitar os
recursos de compatibilidade e correções de bugs mais novos.
Testar seu app
Após atualizar o nível e os recursos da API do app, conforme apropriado, teste alguns casos de uso principais. As sugestões a seguir não são completas, mas visam orientar o processo de teste. Sugerimos testar nos seguintes casos:
- Se o app compila para a API 29 sem erros nem avisos.
- Se o app tem uma estratégia para os casos em que o usuário rejeita solicitações de
permissão e solicita ao usuário autorizações. Para fazer isso:
- Vá para a tela Informações do app e desative cada permissão.
- Abra o app e garanta que não haja falhas.
- Execute os principais testes de caso de uso e garanta que as permissões necessárias sejam solicitadas novamente.
- Se lida com a Soneca com os resultados esperados e sem erros.
- Usando o adb, coloque seu dispositivo de teste em Soneca enquanto o app estiver em execução.
- Teste todos os casos de uso que acionam mensagens do Firebase Cloud Messaging.
- Teste todos os casos de uso que usam alarmes ou tarefas.
- Elimine todas as dependências nos serviços de segundo plano.
- Teste todos os casos de uso que acionam mensagens do Firebase Cloud Messaging.
- Teste todos os casos de uso que usam alarmes.
- Verifique se o app
lida com as transmissões restritas
ACTION_NEW_PICTURE
eACTION_NEW_VIDEO
corretamente, ou seja, se foi movido para as tarefas do JobScheduler. - Verifique se todos os casos de uso críticos que dependem desses eventos ainda funcionam.
- Teste qualquer caso de uso que compartilhe dados de arquivos com qualquer outro app (até do mesmo desenvolvedor).
- Verifique se o conteúdo é visível no outro app e não aciona falhas.
Mais informações
Ative os e-mails no Google Play Console para que possamos enviar atualizações e comunicados importantes do Android e do Google Play, incluindo nossa newsletter de parceiros.