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:
- 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. - 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
.
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.
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.
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:
- Inicie o Android Studio e abra o SDK Manager clicando em Ferramentas > SDK Manager.
- 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)
- 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)
- 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
Com os preparativos acima concluídos, 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.
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.