Qu'est-ce que Jetifier?

97

Qu'est-ce que Jetifier? Par exemple, pour créer un nouveau projet à l'aide des dépendances packagées androidx, ce nouveau projet doit ajouter la ligne suivante au fichier gradle.properties :

android.enableJetifier=true

Alors qu'est-ce que cela signifie - «activer le jetificateur»?

Ksenia
la source
29
IIRC, Jetifier est un élément non documenté de la technologie Googly qui est censé convertir automatiquement les dépendances transitives pour utiliser les bibliothèques AndroidX. Par exemple, supposons que vous ayez implementation "com.commonsware.cwac:document:0.3.0"dans votre fichier dependencies. Cette version de bibliothèque a une dépendance transitive sur com.android.support:support-annotations:27.0.2. Cependant, vous souhaitez utiliser androidx.annotation:annotationdans le cadre de l'utilisation d'autres dépendances AndroidX. Jetifier serait en quelque sorte mis à jour com.commonsware.cwac:documentpour être utilisé androidx.annotation:annotation.
CommonsWare

Réponses:

68

Cette année, Google I / O (18), Google a annoncé Jetpack qui est un ensemble / collection de bibliothèques pour faciliter la vie des développeurs.

Jetpack comprend des composants d'architecture Android précédemment introduits (ViewModel, Room, Paging, LiveData, etc.) ainsi que des composants d'architecture nouvellement introduits tels que WorkManager, Navigation. En dehors de ce Jetpack, il existe également d'autres ensembles de bibliothèques comme AndroidX, AndroidKTX, etc.

AndroidX est une nouvelle structure de package pour les bibliothèques de support Android telles que le support, la liaison de données, la conception, etc.

par exemple, maintenant, les développeurs utiliseront androidx.databinding. au lieu de android.databinding. lors de l'importation de bibliothèques dans nos projets

Cela permet à Google d'ajouter SemVer ou Semantic Versioning dans les packages de bibliothèque. Pour les développeurs, cela signifie que nous n'avons pas à utiliser la même version de bibliothèque de support pour toutes les bibliothèques de support. Chaque support ou mieux pour dire la bibliothèque AndroidX maintiendra sa propre version.

Un autre avantage pour les développeurs est que nous n'avons pas à nous soucier de maintenir la même version pour toutes les bibliothèques de support de notre projet.

À propos de Jetifier, il convertit tous les packages de support de dépendance au moment de la génération. Selon la documentation officielle de Jetifier

L'outil Jetifier migre les bibliothèques dépendant de la bibliothèque de support pour s'appuyer sur les packages AndroidX équivalents à la place. L'outil vous permet de migrer directement une bibliothèque individuelle, au lieu d'utiliser le plug-in Android gradle fourni avec Android Studio.

Pour utiliser AndroidX dans un projet, nous devons définir targetSdkVersion pour notre projet sur 28 et ajouter les 2 lignes suivantes dans le fichier gradle.properties .

android.useAndroidX=true

android.enableJetifier=true

J'espère que cela répondra à votre question.

ÉDITER

Ce lien a un mappage de tous les composants de la bibliothèque de support avec leur homologue AndroidX.

Veuillez également consulter ce blog pour des explications détaillées sur AndroidX

silwar
la source
34
Vous ne répondez pas vraiment à la question "Qu'est-ce que Jetifier?", Mais en parlant d'AndroidX et de Jetpack.
David Miguel
2
@DavidMiguel J'ai fourni une réponse à la question principale posée qu'est-ce que cela signifie - "activer jetifier" ?. Bien que si vous pensez que ma réponse est partielle, je mettrai à jour ma réponse en conséquence.
silwar
72

En supposant que vous êtes familier avec AndroidX. Sinon, veuillez consulter @ this post .

Jetifierconvertira automatiquement support librariestoutes vos dépendances AndroidX, si vous ne le définissez pas sur, truevotre projet aura à la fois le support ( devenu obsolète après la version 28.0.0 ) et le package AndroidX , qui est redondant.

Par exemple

Si vous avez PhotoView.javadans votre dépendance. Cela utilise la bibliothèque de support AppCompatImageView.

import android.support.v7.widget.AppCompatImageView;

Cette classe est maintenant déplacée vers le androidxpackage, alors comment PhotoViewobtiendra androidx AppCompatImageView? Et l'application fonctionne toujours sur l'appareil.

Qui a fait cette course?

Jetifier , qui convertit tous les packages de prise en charge des dépendances au moment de la génération.

Jetifier se convertira android.support.v7.widget.AppCompatImageViewen androidx.appcompat.widget.AppCompatImageViewlors de la construction du projet.

Conclusion

L'activation de Jetifier est importante lorsque vous migrez des bibliothèques de support vers AndroidX .

Consultez cet article pour en savoir plus sur AndroidX.

Info

Votre code peut afficher des erreurs de compilation après l'activation de Jetifier lors de l'utilisation de classes de dépendance. que vous pouvez supprimer en supprimant .idea, .gradleet projet de resynchronisation.

image2

image1

Khemraj
la source
10
Vous pouvez vous débarrasser des erreurs de compilation en supprimant .idea / bibliothèques et en resynchronisant Gradle.
Clo Knibbe
1
Je pense que Jetifier fonctionne au moment de la construction et non au moment de l'exécution comme mentionné ici. Vous pouvez soit utiliser android.enableJetifier = true sur gradle, soit utiliser l'outil autonome de jetifier developer.android.com/studio/command-line/jetifier pour migrer vers androidx. Ces deux options remplacent les noms de package au moment de la construction, de sorte que les anciennes bibliothèques de support ne font même pas partie du package.
Nishanth
6

Jetifier aide à migrer un projet Android vers AndroidX .

Jetifier aide à rendre la bibliothèque tierce compatible avec votre projet AndroidX.

Si vous n'utilisez aucune bibliothèque tierce dans votre projet Android, vous n'avez pas besoin d'utiliser Jetifier car Jetifier aide uniquement à «rendre la bibliothèque tierce» compatible avec votre projet au cas où vous migreriez vers AndroidX. Donc, pour que votre projet utilise Jetifier, vous écrivez ci-dessous le code dans gradle.properties .

android.enableJetifier=true
android.useAndroidX=true

Si vous ne migrez pas vers AndroidX et que vous utilisez la méthode précédente d'utilisation des bibliothèques Android (par exemple: com.android.support ), ces bibliothèques tierces n'ont pas besoin d'être rendues compatibles car ces bibliothèques tierces sont déjà compatibles avec la méthode précédente de en utilisant les bibliothèques Android. Dans ce cas, vous n'avez pas besoin d'utiliser Jetifier, donc maintenant, vous n'avez pas besoin d'écrire les lignes ci-dessus ou vous pouvez simplement écrire comme ci-dessous pour changer les valeurs à l'avenir pour passer à androidx: -

android.enableJetifier=false
android.useAndroidX=false
Abhishek Kumar
la source
4

Jetifier

Le jetifier est un outil pratique qui migre automatiquement votre dependenciesvers AndroidXau moment de la construction. Sans cela, vous auriez besoin de toutes les dépendances que vous utilisez pour avoir une version AndroidX avant de pouvoir migrer, et cela ne se produira probablement pas avant un certain temps.

Il y a une limitation importante à noter: le jetificateur ne fonctionne que sur les artefacts emballés. Cela ne fonctionne pas sur votre code source, que vous devez mettre à jour vous-même

pour activer AndroidX, vous devez ajouter 2 indicateurs à votre gradle.propertiesfichier. Le premier indicateur indique au plug-in Android d'utiliser des AndroidXpackages à la place de AppCompat, et le deuxième indicateur activera Jetifier:

android.useAndroidX=true
android.enableJetifier=true

Voir ceci , cet article pour en savoir plus sur AndroidX

Basi
la source
3

De la doc officielle

Lorsque cet indicateur est défini sur true, le plug-in Android migre automatiquement les bibliothèques tierces existantes pour utiliser les dépendances AndroidX en réécrivant leurs binaires. L'indicateur est faux par défaut s'il n'est pas spécifié.

C'est utile pour la compatibilité. Lorsqu'un consommateur utilise androidXet qu'un producteur utilise support. Par exemple, lorsque votre projet sur AndroidXsouhaite utiliser une dépendance qui utilise à la support libraryplace de AndroidX[Exemple]

yoAlex5
la source
0

Ajoutez ces deux lignes android.useAndroidX = true

android.enableJetifier = true

dans buid.gradle Cela a fonctionné pour moi

Apurva Aggarwal
la source