O que é Jetifier?

97

O que é Jetifier? Por exemplo, para criar um novo projeto usando as dependências empacotadas do androidx, esse novo projeto precisa adicionar a seguinte linha ao arquivo gradle.properties :

android.enableJetifier=true

Então, o que significa - "ativar o jetificador"?

Ksenia
fonte
29
IIRC, Jetifier é um bit não documentado da tecnologia Googly que deve converter automaticamente dependências transitivas para usar bibliotecas AndroidX. Por exemplo, suponha que você tenha implementation "com.commonsware.cwac:document:0.3.0"em seu dependencies. Essa versão da biblioteca tem uma dependência transitiva de com.android.support:support-annotations:27.0.2. No entanto, você deseja usar androidx.annotation:annotationcomo parte do uso de outras dependências do AndroidX. Jetifier iria de alguma forma atualizar com.commonsware.cwac:documentpara usar androidx.annotation:annotation.
CommonsWare

Respostas:

67

No Google I / O deste ano (18), o Google anunciou o Jetpack que é um conjunto / coleção de bibliotecas para tornar a vida do desenvolvedor mais fácil.

O Jetpack inclui componentes de arquitetura Android introduzidos anteriormente (ViewModel, Room, Paging, LiveData etc.), bem como componentes de arquitetura recém-introduzidos como WorkManager, Navigation. Além disso, o Jetpack também possui outro conjunto de bibliotecas como AndroidX, AndroidKTX etc.

AndroidX é uma nova estrutura de pacote para bibliotecas de suporte Android, como suporte, ligação de dados, design, etc.

por exemplo, agora em wards, os desenvolvedores usarão androidx.databinding. em vez de android.databinding. ao importar bibliotecas em nossos projetos

Isso permite que o Google adicione SemVer ou Controle de versão semântica em seus pacotes de biblioteca. Para desenvolvedores, isso significa que não precisamos usar a mesma versão da biblioteca de suporte para todas as bibliotecas de suporte. Todo suporte ou melhor, a biblioteca AndroidX manterá seu próprio controle de versão.

Outra vantagem para os desenvolvedores é que não precisamos nos preocupar em manter a mesma versão para todas as bibliotecas de suporte em nosso projeto.

Sobre o Jetifier, ele converte todo o pacote de suporte de dependência em tempo de construção. De acordo com a documentação oficial do Jetifier

A ferramenta Jetifier migra bibliotecas dependentes da biblioteca de suporte para contar com os pacotes AndroidX equivalentes. A ferramenta permite migrar uma biblioteca individual diretamente, em vez de usar o plug-in gradle do Android fornecido com o Android Studio.

Para usar o AndroidX em um projeto, temos que definir targetSdkVersion para nosso projeto como 28 e adicionar as 2 linhas seguintes no arquivo gradle.properties .

android.useAndroidX=true

android.enableJetifier=true

Espero que isso responda à sua consulta.

EDITAR

Este link possui o mapeamento de todos os componentes da biblioteca de suporte com sua contraparte AndroidX.

Consulte também este blog para obter uma explicação detalhada sobre o AndroidX

Silwar
fonte
34
Você não está realmente respondendo à pergunta "O que é Jetifier?", Apenas falando sobre AndroidX e Jetpack.
David Miguel,
2
@DavidMiguel Respondi à pergunta principal: o que isso significa - "habilitar o jato" ?. Embora se você achar que minha resposta é parcial, atualizarei minha resposta de acordo.
silwar,
71

Supondo que você esteja familiarizado AndroidX. Se não, por favor veja @ este post .

Jetifierirá converter support librariestodas as suas dependências para AndroidXautomaticamente, se você não definir como trueentão seu projeto terá ambos, o suporte ( obsoleto após a versão 28.0.0 ) e o pacote AndroidX , que é redundante.

Por exemplo

Se você tem PhotoView.javaem sua dependência. Que usa biblioteca de suporte AppCompatImageView.

import android.support.v7.widget.AppCompatImageView;

Esta classe foi movida agora para o androidxpacote, então como PhotoViewobter o androidx AppCompatImageView? E o aplicativo ainda funciona no dispositivo.

Quem fez esta corrida?

Jetifier , que converte todo o pacote de suporte de dependência no momento da construção.

Jetifier será convertido android.support.v7.widget.AppCompatImageViewpara androidx.appcompat.widget.AppCompatImageViewdurante a construção do projeto.

Conclusão

Ativar o Jetifier é importante ao migrar das bibliotecas de suporte para o AndroidX .

Veja esta postagem para entender mais sobre o AndroidX.

Informações

Seu código pode mostrar erros de tempo de compilação após ativar o Jetifier ao usar classes de dependência. que você pode remover apagando .idea, .gradlee projeto de re-sincronização.

imagem2

imagem1

Khemraj
fonte
10
Você pode se livrar dos erros de tempo de compilação excluindo .idea / bibliotecas e ressincronizando o Gradle.
Clo Knibbe,
1
Acho que o Jetifier funciona em tempo de construção e não em tempo de execução, conforme mencionado aqui. Você pode usar android.enableJetifier = true no gradle ou usar a ferramenta jetifier independente developer.android.com/studio/command-line/jetifier para migrar para o androidx. Ambas as opções substituem os nomes dos pacotes no momento da construção, portanto, as bibliotecas de suporte antigas nem mesmo fazem parte do pacote.
Nishanth 01 de
6

Jetifier ajuda na migração de um projeto Android para AndroidX .

Jetifier ajuda a tornar a biblioteca de terceiros compatível com seu projeto AndroidX.

Se você não estiver usando nenhuma biblioteca de terceiros em seu projeto Android, não precisa usar o Jetifier porque o Jetifier ajuda apenas a "tornar a biblioteca de terceiros" compatível com seu projeto, caso você esteja migrando para o AndroidX. Então, para fazer seu projeto usar o Jetifier, você escreve o código abaixo em gradle.properties .

android.enableJetifier=true
android.useAndroidX=true

Se você não estiver migrando para o AndroidX e usando a forma anterior de usar bibliotecas Android (por exemplo: com.android.support ), essas bibliotecas de terceiros não precisam ser compatíveis, pois essas bibliotecas de terceiros já são compatíveis com a forma anterior de usando bibliotecas Android. Nesse caso, você não precisa usar o Jetifier, então agora, você não precisa escrever as linhas fornecidas acima ou pode simplesmente escrever como abaixo para alterar os valores no futuro para mover para o androidx: -

android.enableJetifier=false
android.useAndroidX=false
Abhishek Kumar
fonte
4

Jetifier

O jetificador é uma ferramenta útil que migra automaticamente dependenciespara o AndroidXno momento da construção. Sem ele, você precisaria de cada dependência usada para ter uma versão do AndroidX antes de poder migrar e isso provavelmente não acontecerá por algum tempo.

Há uma limitação importante a ser observada: o jetificador só funciona em artefatos embalados. Não funciona no seu código-fonte, que deve ser atualizado por conta própria

para habilitar o AndroidX, você precisa adicionar 2 sinalizadores ao seu gradle.propertiesarquivo. O primeiro sinalizador diz ao plug-in do Android para usar AndroidXpacotes em vez de AppCompat, e o segundo sinalizador habilita Jetifier:

android.useAndroidX=true
android.enableJetifier=true

Veja esta , este post para entender mais sobre AndroidX

Basi
fonte
3

Do doc oficial

Quando este sinalizador é definido como verdadeiro, o plug-in do Android migra automaticamente as bibliotecas existentes de terceiros para usar as dependências do AndroidX reescrevendo seus binários. O sinalizador é falso por padrão se não for especificado.

É útil para compatibilidade. Quando um consumidor usa androidXe um produtor usa support. Por exemplo, quando seu projeto em AndroidXdeseja usar uma dependência que usa em support libraryvez de AndroidX[Exemplo]

yoAlex5
fonte
0

Adicione estas duas linhas android.useAndroidX = true

android.enableJetifier = true

em buid.gradle funcionou para mim

Apurva Aggarwal
fonte