Puis-je utiliser une bibliothèque utilisant la prise en charge d'Android avec les projets Androidx.

95

Je sais, androidx et la dépendance de support provoquant une erreur multidex Nous ne pouvons pas utiliser le support androidx et android en même temps. J'ai donc totalement migré vers androidx. mais une de mes dépendances lib utilisait le support android "lottie".

Que pouvons-nous faire dans la situation ci-dessus? Dois-je supprimer «lottie» de mon projet.

ci-dessous est mon gradle

defaultConfig {
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        multiDexEnabled true
    }

    ext{
    lottieVersion = "2.5.4"
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    def androidx = "1.0.0-rc01"
    api "androidx.constraintlayout:constraintlayout:1.1.2"
    api "androidx.appcompat:appcompat:$androidx"
    api "androidx.recyclerview:recyclerview:$androidx"
    api "androidx.cardview:cardview:$androidx"
    api "androidx.core:core-ktx:$androidx"
    api "com.google.android.material:material:1.0.0-rc01"
    implementation "com.google.code.gson:gson:2.8.5"
    implementation "androidx.multidex:multidex:2.0.0"
    implementation "com.airbnb.android:lottie:$lottieVersion"
    }
Hitesh Dhamshaniya
la source

Réponses:

130

Vous pouvez activer Jetifiersur votre projet, ce qui échangera essentiellement les Android Support Librarydépendances de vos dépendances de projet avec AndroidX-ones. (par exemple, vos dépendances Lottie seront modifiées de Support à AnroidX)

À partir de la documentation Android Studio ( https://developer.android.com/studio/preview/features/ ):

Le plugin Android Gradle fournit les indicateurs globaux suivants que vous pouvez définir dans votre fichier gradle.properties:

  • android.useAndroidX: lorsqu'il est défini sur true, cet indicateur indique que vous souhaitez commencer à utiliser AndroidX à partir de maintenant. Si l'indicateur est absent, Android Studio se comporte comme si l'indicateur était défini sur false.
  • android.enableJetifier: lorsqu'il est défini sur true, cet indicateur indique que vous souhaitez disposer d'un support d'outils (à partir du plug-in Android Gradle) pour convertir automatiquement les bibliothèques tierces existantes comme si elles étaient écrites pour AndroidX. Si l'indicateur est absent, Android Studio se comporte comme si l'indicateur était défini sur false.

Condition préalable pour Jetifier:

  • vous devez utiliser au moins Android Studio 3.2

Pour activer jetifier, ajoutez ces deux lignes à votre gradle.propertiesfichier:

android.useAndroidX=true
android.enableJetifier=true

Enfin, veuillez consulter les notes de publication d'AndroidX, car il y jetifiera encore des problèmes avec certaines bibliothèques (par exemple Dagger Android): https://developer.android.com/topic/libraries/support-library/androidx-rn

Christophe
la source
Mon projet utilise plusieurs bibliothèques, certaines d'entre elles utilisent la bibliothèque de support tandis que d'autres utilisent androidx. Comment utiliser les deux bibliothèques dans mon projet?
Hiren Dabhi le
1
@hiren dabhi Pouvez-vous créer une nouvelle question pour votre configuration, si la proposition de solution ne fonctionne pas pour vous? Il est assez difficile de trouver une réponse sans connaître plus de détails sur votre configuration.
Christopher
54

Ajouter manuellement android.useAndroidX=trueet android.enableJetifier=trueme donner du temps. Parce que ça jette une erreur ou Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

Pour activer Jet-fire dans le projet, il existe une option dans Android Studio

Sélectionnez votre projet ---> Clic droit

app ----> Refactor ----> Migrer vers AndroidX

Montré dans l'image ci-dessous: -

entrez la description de l'image ici

Après avoir cliqué sur Migrer vers AndroidX .

Il vous demandera une confirmation et une sauvegarde de votre projet.

entrez la description de l'image ici

Et dernière étape, il vous demandera de refactoriser.

entrez la description de l'image ici

Après avoir fait Refactor, vérifiez que vos gradle.properties ont android.useAndroidX=trueet android.enableJetifier=true. Si ce n'est pas le cas, ajoutez ces deux lignes à votre fichier gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

Remarque: - Mise à niveau à l'aide d'Android Studio, cette option fonctionne si vous avez Android Studio 3.2 et versions ultérieures. Vérifiez ceci

sushildlh
la source
1
bonne suggestion, mais juste une remarque pour les personnes qui effectuent une mise à niveau à l'aide d'Android Studio, cette option fonctionne si vous avez Android Studio 3.2 et versions ultérieures. Vérifiez ce développeur.android.com
jetpack
21

Tu n'as pas besoin de t'inquiéter

Activez simplement Jetifier dans votre projet.

  • Mettez à jour Android Studio vers la version 3.2.0 ou plus récente.
  • Ouvrez gradle.propertieset ajoutez en dessous de deux lignes.

    android.enableJetifier=true
    android.useAndroidX=true

Il convertira toutes les bibliothèques de support de votre dépendance en AndroidX au moment de l'exécution (vous pouvez avoir des erreurs de compilation, mais l'application fonctionnera).

Khemraj
la source
3
gradle.properties n'a pas été trouvé dans mes fichiers, créé moi
FindOutIslamNow
en fait, une dépendance transitive + cache gradle pourrait ne pas fonctionner, même android.enableJetifier=truesi cela se produisait, je pense que l'utilisation manuelle jetifier-standalonede l'aar tiers pourrait fonctionner.
mochadwi
1

API 29. + utilisation des bibliothèques AndroidX. Si vous utilisez l'API 29. +, vous ne pouvez pas les supprimer. Si vous souhaitez supprimer AndroidX, vous devez supprimer l'intégralité de l'API 29. + de votre SDK:

Paramètres du SDK

Cela fonctionnera très bien.

Shubham Tiwari
la source
0

Si votre projet n'est pas AndroidX (signifie Appcompat) et a obtenu cette erreur, essayez de rétrograder les versions des dépendances qui déclenchent cette erreur, dans mon cas, play-services-location ("implementation" com.google.android.gms: play-services-location : 17.0.0 '"), j'ai résolu le problème en rétrogradant à com.google.android.gms: play-services-location: 16.0.0'

Ahmed KHABER
la source
0

J'ai eu un problème comme celui-ci avant, c'était le fichier gradle.properties qui n'existe pas, seulement le gradle.properties.txt, alors je suis allé dans mon dossier de projet et j'ai copié et collé le fichier gradle.properties.txt mais sans. txt puis cela a finalement fonctionné.

Dom broks
la source
0

J'ai ajouté ci-dessous deux lignes dans le fichier gradle.properties

android.useAndroidX=true
android.enableJetifier=true

alors j'ai eu l'erreur suivante

error: package android.support.v7.app does not exist
import android.support.v7.app.AlertDialog;
                         ^
                         

J'ai supprimé les importations et ajouté ci-dessous la ligne

import static android.app.AlertDialog.*;

Et les classes qui sont étendues à partir d'AppCompactActivity, ont ajouté la ligne ci-dessous. (Pour ces erreurs, il vous suffit d'appuyer sur Alt + Entrée dans Android Studio qui importera la bonne bibliothèque pour vous. Comme cela, vous pouvez résoudre toutes les erreurs)

import androidx.appcompat.app.AppCompatActivity;

Dans votre fichier xml si vous en avez utilisé

<android.support.v7.widget.Toolbar 

le remplacer par androidx.appcompat.widget.Toolbar

puis dans votre code java

import androidx.appcompat.widget.Toolbar;
Nikhil Dinesh
la source
-1

Commentez cette ligne dans gradle.properties

android.useAndroidX = true

Vibhu Vikram Singh
la source
OP demande s'il est possible d'utiliser AndroidX avec le support Android. Vous suggérez de désactiver AndroidX
Raildex le
aller à gradle.properties et commenter
Vibhu Vikram Singh