Migração para o Android 8.0

O Android 8.0 (nível 26 da API) introduz mudanças de comportamento, além de novos recursos e APIs que você pode aproveitar nos seus apps. Este documento fornece uma visão geral das etapas para migrar seus apps para o Android 8.0 em duas fases principais:

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

  2. Atualizar a versão de destino e usar os recursos do Android 8.0

    Quando estiver tudo pronto para você 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 como está no Android 8.0 (nível 26 da API). Como algumas mudanças na plataforma podem afetar a forma como o app se comporta, alguns ajustes podem ser necessários, mas não é necessário usar novas APIs nem mudar sua targetSdkVersion.

Instruções detalhadas para garantir a compatibilidade com o Android 8.0

Preparar um dispositivo com 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 seu app. Esse é um bom momento para analisar as Diretrizes principais de qualidade de apps 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 completamente, mesmo que você não mude a targetSdkVersion. Por esse motivo, é importante revisar as principais mudanças na Tabela 1 e testar todas as correções implementadas para acomodar as mudanças.

Tabela 1. Mudanças importantes que afetam todos os apps executados em dispositivos Android 8.0.

Mudar 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, ele receberá atualizações com menos frequência no Android 8.0 (nível 26 da API) em comparação com versões mais antigas do Android. Especificamente, um serviço em segundo plano não pode receber atualizações de localização mais de algumas vezes por hora. No entanto, enquanto o app estiver em primeiro plano, a taxa de atualizações de localização não vai mudar. Limites da localização em segundo plano
net.hostname não são mais compatíveis Consultar a propriedade do sistema net.hostname produz 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 adequada dos métodos AbstractCollection. AbstractCollection.removeAll(null) e AbstractCollection.retainAll(null) agora sempre geram uma NullPointerException. Antes, a NullPointerException não era gerada quando a coleta estava vazia Essa mudança deixa o comportamento mais coerente com a documentação. Mudanças de comportamento: gerenciamento de coleta
NullPointerException próprio de Currency.getDisplayName(null) Chamar Currency.getDisplayName(null) gera uma NullPointerException. Mudanças de comportamento: localidades e internacionalização

Para ver uma lista mais extensa de mudanças de comportamento no Android 8.0 (nível 26 da API), consulte também 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 (API de nível 26) atualizando a 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 sua targetSdkVersion para a versão 26. Como algumas mudanças de comportamento podem exigir mudanças no código para evitar falhas, primeiro é necessário entender como o app pode ser afetado ao mudar a targetSdkVersion analisando todas as mudanças de comportamento para apps destinados 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 ao Android 8.0. Portanto, não deixe de concluir essas etapas primeiro.

Atualizar a versão de destino e usar os recursos do Android 8.0 por etapas

Instalar o SDK do Android 8.0

Você pode fazer o download dos 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 (é recomendável usar o Android Studio 3.0 ou mais recente). O Android Studio 3.0 e versões mais recentes incluem ferramentas para ajudar você com os recursos do Android 8.0, como ícones adaptativos 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 versão do Android Studio, siga estas etapas:

  1. Inicie o Android Studio e abra o SDK Manager clicando em Tools > SDK Manager.
  2. Na guia SDK Platforms, marque Show Package Details. Abaixo da Visualização do Android 8.0, marque o seguinte:
    • Plataforma do SDK do Android 26
    • Google APIs Intel x86 Atom System Image (necessária apenas para o emulador)
  3. Alterne 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 precisa incluir as versões mais recentes dos seguintes itens necessários:
    • Android SDK Build-Tools 26.0.0
    • Android SDK Platform-Tools 26.0.0
    • Android Emulator 26.0.0
  4. Clique em OK para instalar todos os pacotes de SDK selecionados.

Agora está tudo pronto para você 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 revisões mais recentes 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 (API de nível 26) introduz novas limitações para broadcast receivers, remova todos os broadcast receivers que estão registrados para intents de transmissão implícitas. Se você não fizer isso, o app não será corrompido no momento da compilação ou execução, mas não terá efeito quando o app for executado no Android 8.0.

As transmissões às quais apenas seu app pode responder (intents de transmissão e transmissões explícitas enviadas especificamente para o nome do pacote do app) continuam funcionando da mesma forma no Android 8.0.

Há algumas exceções a essa nova restrição. Para ver uma lista de transmissões implícitas que ainda funcionam em apps destinados ao Android 8.0, consulte Exceções da transmissão implícita.

Testar seu app para Android 8.0

Com as preparações acima concluídas, você pode criar seu app e testá-lo para garantir que ele funcione corretamente quando destinado ao Android 8.0 (API de nível 26). Esse também é um bom momento para analisar as Diretrizes principais de qualidade de apps e as Práticas recomendadas para testes.

Ao criar 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 fazer com que ele seja completamente corrompido, 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.

Tabela 2. Principais mudanças que afetam os apps quando a targetSdkVersion é definida como 26.

Mudar Resumo Mais informações
Privacidade O Android 8.0 (API de nível 26) 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 direcionados à versão do Android 8.0 (API de nível 26) do SDK precisam implementar um ou mais canais de notificação para postar notificações aos usuários. Visão geral da API: notificações
Método List.sort() As implementações desse método não podem mais chamar Collections.sort(), ou seu app vai gerar uma exceção devido a um estouro de pilha. Mudanças de comportamento: gerenciamento 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 ver 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.

Para explorar os novos recursos e APIs disponíveis com o Android 8.0 (nível 26 da API), consulte Recursos e APIs do Android 8.0.