Migração para o Android 8.0

O Android 8.0 (API de nível 26) introduz mudanças de comportamento, além de novos recursos e APIs que que você pode aproveitar nos seus apps. Este documento apresenta 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 necessários.

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

    Quando estiver pronto para aproveitar os novos recursos do plataforma, atualize a targetSdkVersion para 26, verifique se o app continua para funcionar como esperado e começar a usar as novas APIs.

Garantir a compatibilidade com o Android 8.0

O objetivo aqui é garantir que seu app funcione como está no Android 8.0 (nível 26 da API). Como algumas mudanças na plataforma podem afetar o comportamento do app, alguns ajustes podem ser necessários, mas você não precisa usar novas APIs ou mude o targetSdkVersion.

Passo a passo para garantir a compatibilidade com o Android 8.0

Preparar um dispositivo que executa 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 seu dispositivo.
  • Ou faça o download da imagem do sistema Android 8.0 para o Android Emulator. Ele está listado 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 em Android Studio 3.0 e 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 seu app. Este é um bom momento para analisar as principais diretrizes de qualidade de apps e as práticas recomendadas para testes.

No entanto, há outro aspecto no teste: o Android 8.0 introduz mudanças no sistema plataforma que possa afetar o comportamento do seu aplicativo ou corrompê-lo totalmente, mesmo que você não altere seu targetSdkVersion. Por isso, é importante revisar as principais mudanças na tabela 1 e testar as correções que você implementar para acomodar as alterações.

Tabela 1. Principais mudanças que afetam todos os apps em execução em dispositivos Android 8.0.

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, ele vai receber menos atualizações no Android 8.0 (nível 26 da API) em comparação com versões mais antigas do Android. Especificamente, um plano de fundo não recebe atualizações de local mais do que algumas vezes por hora. No entanto, embora sua estiver em primeiro plano, a taxa de atualizações de localização não será alterada. 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 falhou. Mudanças de comportamento: conectividade de rede e HTTP(S)
NullPointerException adequada de Métodos AbstractCollection AbstractCollection.removeAll(null) e AbstractCollection.retainAll(null) agora sempre gera uma NullPointerException antes, a NullPointerException não era gerada quando a coleção estava vazia. Essa mudança deixa o comportamento mais coerente com a documentação. Mudanças de comportamento: gerenciamento de coleta
NullPointerException adequada de Currency.getDisplayName(null) Ligando para Currency.getDisplayName(null) gera uma NullPointerException. Mudanças de comportamento: localidades e internacionalização

Para uma lista mais extensa de mudanças de comportamento no Android 8.0 (nível 26 da API), também 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 a targetSdkVersion para 26. e adicionar novos recursos disponíveis no Android 8.0.

Além de oferecer novas APIs, o Android 8.0 introduz alguns comportamentos muda quando você atualiza a targetSdkVersion para 26. Como algumas mudanças de comportamento exige alterações no código para evitar falhas. Primeiro é preciso entender como o app pode afetadas quando você 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 aplicativo para o 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 passo a passo

Instalar o SDK do Android 8.0

É possível acessar 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 (recomendamos o Android Studio 3.0 ou uma versão 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 aplicativo com o Android 8.0 e usar as novas APIs.

Para configurar qualquer uma das versões do Android Studio, siga estas etapas:

  1. Inicie o Android Studio e abra o SDK Manager clicando em Ferramentas > SDK Manager.
  2. Na guia SDK Platforms, marque Show Package Details. Abaixo Na versão de pré-lançamento do Android 8.0, verifique o seguinte:
    • Plataforma SDK do Android 26
    • Imagem do sistema Atom Intel x86 das APIs do Google (necessário apenas para o emulador)
  3. Mude para a guia SDK Tools e verifique todos os itens que têm atualizações disponíveis (clique em cada caixa de seleção que mostra um traço ). Isso deve incluir 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 (link em inglês)
  4. 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 o compileSdkVersion, targetSdkVersion e a versão da Biblioteca de Suporte para a versão mais recente 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 (API de nível 26) introduz novos limitações para broadcast receivers, remova todos os broadcast receivers registrada para intents de transmissão implícitas. Deixar tudo no lugar não corrompe o app no tempo de compilação ou execução, mas eles não têm efeito quando o aplicativo é executado no Android 8.0.

Transmissões às quais somente seu app pode responder: intents de transmissão explícitas e transmitidas especificamente para o nome do pacote do seu app. Elas continuam funcionando da mesma forma Android 8.0

Há algumas exceções a essa nova restrição. Para um 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 o app para Android 8.0

Depois de concluir os preparativos acima, você pode criar seu aplicativo e testar para garantir que ele funcione corretamente quando destinado ao Android 8.0 (nível 26 da API). Esse é outro bom momento para analisar App principal diretrizes de qualidade e Melhores práticas Práticas para testes (em inglês).

Ao criar seu app com a targetSdkVersion definida como 26, há mudanças específicas na plataforma que você precisa conhecer. Alguns essas mudanças podem afetar significativamente o comportamento do aplicativo corromper seu aplicativo completamente, 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 targetSdkVersion for definido como 26.

Mudança Resumo Mais informações
Privacidade O Android 8.0 (API de nível 26) não é compatível com o uso do net.dns1, net.dns2, net.dns3 ou net.dns4 sistema 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 que os dados não devem ser executáveis e o código não deve 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 no cabeçalho ELF e cabeçalhos de seção e falhará se forem inválidos. Mudanças de comportamento: Bibliotecas nativas
Notificações Apps destinados à versão do SDK para Android 8.0 (nível 26 da API) deve implementar um ou mais canais de notificação para publicar enviar 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 o 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. Comportamento Mudanças: gerenciamento de coleta

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