O tema da transição para o Androidx está agora no ar. Já existe um
pequeno artigo em inglês de Daniel Lew , há um
relatório . Mas todos consideram superficialmente o cenário de transição descrito na
documentação do
Google .
Eu quero compartilhar minha experiência. Meu projeto usa Moxy e Cicerone, acho minha experiência interessante, porque nos canais oficiais de telegrama dessas bibliotecas a pergunta surge periodicamente quando eles serão transferidos para o Androidx.
Basta migrar para o AndroidX ...
Para transferir o projeto para o Androidx, você precisa seguir alguns passos simples:
1. Instale o
compileSdkVersion 28 e o
targetSdkVersion 28 , atualize todas as bibliotecas de suporte para as versões mais recentes.
2. No arquivo
gradle.properties, adicione as linhas:
android.useAndroidX=true android.enableJetifier=true
3. Se você já estiver usando o Android Studio 3.2, use a refatoração:
Ele fará a maior parte (ou menos) do trabalho para você.
Se, por algum motivo, você não estiver usando o Git ou outro sistema de controle de versão, nesse estágio, você terá a chance de criar um arquivo de projeto:
Clique no botão Migrar, selecione onde salvar o arquivo morto e, após algum tempo, obtemos o resultado da verificação do projeto antes de refatorar:
Aqui, vemos quais dependências nas diretivas build.gradle e import serão substituídas. No exemplo da classe MainActivity, como pode ser visto na captura de tela acima, uma dependência será substituída:
android.support.v4.view.GravityCompat , mas se abrirmos essa classe, veremos que na verdade existem mais três dependências que precisam ser substituídas:
Não entendi o motivo desse comportamento seletivo, mas essas dependências precisarão ser corrigidas manualmente. Clique em "Refatorar".
Se você não estiver usando o Android Studio 3.2, todas as dependências serão corrigidas manualmenteSerá necessário alterar as dependências no
build.gradle (para maior clareza, comentei as antigas dependências):

Uma lista completa de substituições pode ser encontrada
aqui .
Em seguida, sincronize o projeto com o Gradle e obtenha vários erros. Estas são diretivas de importação em suas classes, elas se referem a pacotes antigos, você precisa alterá-las de acordo com
esta tabela .
Portanto, como o estúdio não pôde substituir todas as dependências (talvez você possa, então você pode ser parabenizado), ao tentar criar um projeto, você verá uma lista semelhante de erros:
Abrindo a classe com erros, veremos algo assim:
Removemos dependências obsoletas e, com as teclas de atalho Alt + Enter, importamos classes do pacote
androidxAssim, corrigimos todas as classes. Se o erro não estiver relacionado à "importação", não preste atenção nele, provavelmente devido aos mesmos problemas em outra classe.
Por exemplo:
Os erros aqui estão relacionados ao fato de que na classe TimelineView você também precisa eliminar problemas de importação. Quando todos os erros são corrigidos, executamos novamente a construção do projeto e, talvez, recebamos a lista de erros novamente, apenas em outras classes, continuamos o processo iterativo.
Para erros com classes geradas (Dagger ou DataBinding), não preste atenção nesta fase. Se não houver erros nas suas aulas e o estúdio jurar apenas no código gerado, será necessário executar o Projeto Limpo e o Projeto de Reconstrução.
Se isso não ajudar, você pode tentar limpar o cache do estúdio:
Você precisará limpar o cache pelo menos uma vez, para que as classes que geram o DataBinding ou Room sejam criadas corretamente.
Bibliotecas externas
Em geral, definimos o sinalizador
android.enableJetifier = true apenas para que, no estágio da construção do projeto, as dependências das bibliotecas externas sejam substituídas pelas dependências correspondentes do AndroidX automaticamente, mas por algum motivo isso não ocorra.
De qualquer forma, antes de fazer o que é descrito abaixo, verifique se você tem esse problema e se as versões mais recentes das bibliotecas que você está usando ainda não foram traduzidas para o AndroidX.
Moxy
MainActivity no meu projeto é herdada de
MvpAppCompatActivity é a classe Moxy, que, no momento da redação deste documento, ainda não foi traduzida para AndroidX. Para resolver esse problema, copiei a classe para o meu projeto, em um pacote
androidx separado, e
corrigi as dependências nele. É melhor deixar o nome da classe inalterado, para que seja mais fácil atualizar as dependências.
O mesmo procedimento precisa ser feito para fragmentos, para a classe
MvpAppCompatFragment .
Observe que existe um genérico nessas classes, no campo
mMvpDelegate , não esqueça de corrigir a dependência, é fácil não notar, pois é uma dependência da classe Moxy e não da classe da biblioteca de suporte.
Cicerone
Para resolver problemas com o Cicerone, tive que criar uma cópia das classes
SupportAppScreen e
SupportAppNavigator no meu projeto. Observe que a classe SupportAppNavigator depende do SupportAppScreen. Lembre-se de corrigir essa dependência em sua cópia.
Conclusões
Mudar para o AndroidX é uma experiência emocionante e, se você não tiver uma necessidade urgente, deve esperar um pouco. Afinal, quando a maior parte do rake for removida do seu caminho, será mais fácil e rápido fazê-lo. Mas, pessoalmente, estou satisfeito por esse caminho ter passado, os inchaços na testa se curarem e a experiência útil permanecerá comigo.