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 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 fase, 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 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 ou
mudar sua 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 do Android 8.0 para o Android Emulator. Ele está listado no
SDK Manager no
Android 8.0 como Google APIs Intel x86 Atom System Image.
Observação:a imagem do sistema Android 8.0 está disponível para download no Android Studio 3.0 e versões mais recentes. Para mais informações, consulte a seção abaixo sobre como fazer o download do SDK do Android 8.0.
Realizar testes de compatibilidade
Na maioria dos casos, testar a compatibilidade com o Android 8.0 (API de nível 26) 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 mude
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.
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 menos frequentes no Android 8.0 (API de nível 26) 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) vai gerar uma SocketException
se o método connect(InetAddress, int) executado anteriormente falhar.
|
Mudanças de comportamento: conectividade de rede e HTTP(S) |
NullPointerException adequados 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: gerenciamento de coleta |
NullPointerException adequada 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 (nível 26 da API) atualizando a targetSdkVersion
para a versão 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 a versão 26. Como algumas mudanças de comportamento
podem exigir mudanças de 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, conclua essas etapas primeiro.
Instalar o SDK do Android 8.0
Você pode obter 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 (é recomendável usar a versão 3.0 ou posterior). 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, pode usar 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:
- Inicie o Android Studio e abra o SDK Manager clicando em Tools > SDK Manager.
- 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)
- 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
- Clique em OK para instalar todos os pacotes de SDK selecionados.
Agora está tudo 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 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 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 da execução, mas não terá efeito quando ele for executado no Android 8.0.
As transmissões às quais apenas seu app pode responder (intents de transmissão explícitas e transmissões enviadas especificamente para o nome do pacote do app) continuam funcionando da mesma maneira 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 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 ao ser direcionado ao Android 8.0 (API de nível 26). Esse também é um bom momento para analisar as principais diretrizes 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 seu app ou até mesmo corrompê-lo
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.
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 destinados à versão 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 o app vai gerar uma exceção devido ao 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 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.