O Android 8.0 (nível 26 da API) introduz mudanças de comportamento e novos recursos e APIs que podem ser aproveitados nos seus apps. Este documento oferece uma visão geral das etapas para migrar seus apps para o Android 8.0 em duas fases principais:
- Garantir a compatibilidade com o Android 8.0
Verifique se o aplicativo funciona perfeitamente na nova versão da plataforma. Nessa etapa, você não usa novas APIs nem muda a
targetSdkVersion
do app, mas pequenas mudanças podem ser necessárias. - Atualizar a versão de destino e usar os recursos do Android 8.0
Quando estiver tudo pronto para aproveitar os novos recursos da plataforma, atualize a
targetSdkVersion
para 26, verifique se o app continua funcionando conforme o esperado e comece a usar as novas APIs.
Garantir a compatibilidade com o Android 8.0
O objetivo é garantir que o app funcione no estado atual no Android 8.0
(nível 26 da API). Como algumas mudanças na plataforma podem afetar a forma como seu app se comporta,
talvez seja necessário fazer alguns ajustes, mas não é necessário usar novas APIs ou
mudar seu targetSdkVersion
.
Preparar um dispositivo com o Android 8.0
- Se você tem um dispositivo compatível (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P ou Nexus Player), siga as instruções para atualizar o dispositivo.
- Ou faça o download da imagem do sistema Android 8.0 para o Android Emulator. Ela está listada no
SDK Manager em
Android 8.0 como Google APIs Intel x86 Atom System Image.
Observação:a imagem do sistema do Android 8.0 está disponível para download no Android Studio 3.0 e em versões mais recentes. Para mais informações, consulte a seção abaixo sobre como instalar o SDK do Android 8.0.
Realizar testes de compatibilidade
Na maioria dos casos, testar a compatibilidade com o Android 8.0 (nível 26 da API) envolve o mesmo tipo de teste que você realiza ao se preparar para lançar o app. Esse é um bom momento para analisar as Principais diretrizes de qualidade do app e as Práticas recomendadas para testes.
No entanto, há outro aspecto a ser testado: o Android 8.0 introduz mudanças na plataforma
Android que podem afetar o comportamento do app ou corrompê-lo totalmente, mesmo que você não altere
o targetSdkVersion
. Por esse motivo, é importante analisar as principais alterações na tabela 1 e testar todas as correções implementadas para acomodar as alterações.
Mudança | Resumo | Mais informações |
---|---|---|
Atualizações de localização em segundo plano menos frequentes | Se o app receber atualizações de localização de um serviço em segundo plano, elas serão menos frequentes no Android 8.0 (nível 26 da API) em comparação com versões mais antigas do Android. Na prática, um serviço em segundo plano não pode receber atualizações de localização mais de poucas vezes por hora. No entanto, se o app estiver em primeiro plano, a taxa de atualização de localização será a mesma. | Limites da localização em segundo plano |
net.hostname não são mais compatíveis
|
Consultar a propriedade do sistema net.hostname gera um resultado nulo.
|
Nenhum |
Nova exceção de send(DatagramPacket) |
O método send(DatagramPacket) gera uma SocketException
se o método connect(InetAddress, int) executado anteriormente falhar.
|
Mudanças de comportamento: conectividade de rede e HTTP(S) |
NullPointerException adequado dos
métodos AbstractCollection
|
AbstractCollection.removeAll(null) e
AbstractCollection.retainAll(null) agora sempre geram uma
NullPointerException .
Antes, o NullPointerException não era gerado quando a coleção estava vazia.
Essa mudança deixa o comportamento mais coerente com a documentação.
|
Mudanças de comportamento: tratamento de coletas |
NullPointerException adequado de
Currency.getDisplayName(null)
|
Chamar Currency.getDisplayName(null)
gera uma NullPointerException .
|
Mudanças de comportamento: localidades e internacionalização |
Para conferir uma lista mais extensa de mudanças de comportamento no Android 8.0 (nível 26 da API), consulte Mudanças de comportamento do Android 8.0.
Atualizar a versão de destino e usar os recursos do Android 8.0
Esta seção explica como ativar o suporte total para o Android 8.0
(nível 26 da API) atualizando o targetSdkVersion
para 26
e adicionando novos recursos disponíveis no Android 8.0.
Além de oferecer novas APIs, o Android 8.0 introduz algumas mudanças de
comportamento quando você atualiza a targetSdkVersion
para 26. Como algumas mudanças de comportamento
podem exigir mudanças no código para evitar interrupções, primeiro entenda como o app pode ser
afetado ao mudar o targetSdkVersion
analisando todas as mudanças de comportamento para apps direcionados ao Android 8.0.
Observação:as etapas descritas acima para garantir a compatibilidade da plataforma são um pré-requisito para direcionar o app para o Android 8.0. Portanto, não deixe de seguir essas etapas primeiro.
Instalar o SDK do Android 8.0
Você pode ter os pacotes de SDK para criar seu app com o Android 8.0 (nível 26 da API) usando a versão mais recente do Android Studio (é recomendado o Android Studio 3.0 ou mais recente). O Android Studio 3.0 e versões mais recentes inclui ferramentas para ajudar com recursos do Android 8.0, como ícones adaptáveis e fontes para download. Se você ainda não precisa desses recursos, use a versão estável do Android Studio 2.3.3 para criar seu app com o Android 8.0 e usar as novas APIs.
Para configurar qualquer uma dessas versões do Android Studio, siga estas etapas:
- Inicie o Android Studio e abra o SDK Manager clicando em Tools > SDK Manager.
- Na guia SDK Platforms, marque Show Package Details. Confira abaixo o que é necessário para a
Prévia do Android 8.0:
- Android SDK Platform 26
- Google APIs Intel x86 Atom System Image (necessário apenas para o emulador)
- Mude para a guia SDK Tools e marque todos os itens que têm atualizações disponíveis (clique
em cada caixa de seleção que mostra um traço ). Isso inclui as versões mais recentes dos seguintes itens
que são necessários:
- Android SDK Build-Tools 26.0.0
- Android SDK Platform-Tools 26.0.0
- Android Emulator 26.0.0
- Clique em OK para instalar todos os pacotes do SDK selecionados.
Agora você está pronto para começar a criar com o Android 8.0.
Atualizar a configuração da compilação
Atualize compileSdkVersion
,
targetSdkVersion
e a versão da Biblioteca de suporte para as últimas
revisões disponíveis, por exemplo:
android { compileSdkVersion 26 defaultConfig { targetSdkVersion 26 } ... } dependencies { compile 'com.android.support:appcompat-v7:26.0.0' } // REQUIRED: Google's new Maven repo is required for the latest // support library that is compatible with Android 8.0 repositories { google() // If you're using a version of Gradle lower than 4.1, you must instead use: // maven { // url 'https://maven.google.com' // } }
Remover receptores de transmissão do arquivo de manifesto
Como o Android 8.0 (nível 26 da API) introduziu novas limitações para broadcast receivers, remova todos os broadcast receivers registrados para intents de transmissão implícita. Defini-las não corrompe seu app durante a compilação nem a execução, mas elas não terão efeito quando ele for executado no Android 8.0.
Transmissões às quais apenas seu app pode responder (intents de transmissão explícitas e transmissões enviadas especificamente ao nome do pacote do app) continuam funcionando da mesma forma no Android 8.0.
Há algumas exceções a essa nova restrição. Para conferir uma lista de transmissões implícitas que ainda funcionam em apps voltados para o Android 8.0, consulte Exceções de transmissão implícita.
Testar seu app para Android 8.0
Com as preparações acima concluídas, você pode compilar o app e testá-lo para garantir que ele funcione corretamente ao ser direcionado ao Android 8.0 (nível 26 da API). Esse também é um bom momento para analisar as Principais diretrizes de qualidade de apps e as Práticas recomendadas para testes.
Quando você cria seu app com a targetSdkVersion
definida como 26,
há mudanças específicas da plataforma que você precisa conhecer. Algumas
dessas mudanças podem afetar significativamente o comportamento do app ou até mesmo
interrompê-lo totalmente, mesmo que você não implemente novos
recursos no Android 8.0.
A tabela 2 fornece uma lista dessas mudanças com links para obter mais informações.
Mudança | Resumo | Mais informações |
---|---|---|
Privacidade | O Android 8.0 (nível 26 da API) não oferece suporte ao uso das propriedades do sistema net.dns1, net.dns2, net.dns3 ou net.dns4. | Mudanças de comportamento: privacidade |
Segmentos graváveis e executáveis impostos | Para bibliotecas nativas, o Android 8.0 (API de nível 26) aplica a regra de que os dados não podem ser executáveis e o código não pode ser gravável. | Mudanças de comportamento: Bibliotecas nativas |
Validação de cabeçalho e seção de ELF | O vinculador dinâmico verifica mais valores nos cabeçalhos de seção e cabeçalho ELF e falha se eles forem inválidos. | Mudanças de comportamento: Bibliotecas nativas |
Notificações | Os apps voltados à versão do SDK do Android 8.0 (nível 26 da API) precisam implementar um ou mais canais de notificação para enviar notificações aos usuários. | Visão geral da API: notificações |
O método List.sort()
|
As implementações desse método não podem mais chamar Collections.sort() , ou o app vai gerar uma exceção devido a um estouro de pilha.
|
Mudanças de comportamento: processamento de coleta |
Método Collections.sort()
|
Em implementações de lista, Collections.sort() agora gera uma
ConcurrentModificationException .
|
Mudanças de comportamento: gerenciamento de coleta |
Para conferir uma lista mais completa das mudanças de comportamento no Android 8.0 (nível 26 da API), consulte Mudanças de comportamento do Android 8.0.
Para conhecer os novos recursos e APIs disponíveis no Android 8.0 (nível 26 da API), consulte Recursos e APIs do Android 8.0.