Kann ich eine Bibliothek verwenden, die Android-Unterstützung für Androidx-Projekte verwendet?

95

Ich weiß, Androidx- und Support-Abhängigkeit verursacht Multidex-Fehler Wir können Androidx- und Android-Support nicht gleichzeitig verwenden. Also migriere ich total zu AndroidX. aber einer meiner abhängigkeiten lib benutzte android support "lottie".

Was können wir in der obigen Situation tun? Soll ich 'lottie' aus meinem Projekt entfernen?

unten ist mein 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
quelle

Antworten:

129

Sie können Jetifierfür Ihr Projekt aktivieren , wodurch die Android Support LibraryAbhängigkeiten in Ihren Projektabhängigkeiten grundsätzlich mit AndroidX-ones ausgetauscht werden . (zB Ihre Lottie-Abhängigkeiten werden von Support auf AnroidX geändert)

Aus der Android Studio-Dokumentation ( https://developer.android.com/studio/preview/features/ ):

Das Android Gradle-Plugin bietet die folgenden globalen Flags, die Sie in Ihrer gradle.properties-Datei setzen können:

  • android.useAndroidX: Wenn diese Option auf true gesetzt ist, zeigt dieses Flag an, dass Sie ab sofort AndroidX verwenden möchten. Wenn das Flag fehlt, verhält sich Android Studio so, als ob das Flag auf false gesetzt wäre.
  • android.enableJetifier: Wenn diese Option auf "true" gesetzt ist, bedeutet dies, dass Sie Tool-Unterstützung (vom Android Gradle-Plugin) benötigen, um vorhandene Bibliotheken von Drittanbietern automatisch so zu konvertieren, als wären sie für AndroidX geschrieben worden. Wenn das Flag fehlt, verhält sich Android Studio so, als ob das Flag auf false gesetzt wäre.

Voraussetzung für Jetifier:

  • du musst mindestens verwenden Android Studio 3.2

Fügen Sie Ihrer gradle.propertiesDatei die beiden Zeilen hinzu, um den Jetifier zu aktivieren :

android.useAndroidX=true
android.enableJetifier=true

Überprüfen Sie abschließend die Versionshinweise von AndroidX, da jetifierbei einigen Bibliotheken (z. B. Dagger Android) immer noch Probleme auftreten: https://developer.android.com/topic/libraries/support-library/androidx-rn

Christopher
quelle
Mein Projekt verwendet mehrere Bibliotheken, von denen einige die Unterstützungsbibliothek verwenden, während einige Androidx verwenden. Wie verwende ich beide Bibliotheken in meinem Projekt?
Hiren Dabhi
1
@hiren dabhi Können Sie eine neue Frage für Ihr Setup erstellen, wenn der Lösungsvorschlag für Sie nicht funktioniert? Es ist ziemlich schwierig, eine Antwort zu finden, ohne mehr Details über Ihr Setup zu wissen.
Christopher
53

Manuelles Hinzufügen android.useAndroidX=trueund android.enableJetifier=truemir harte Zeit geben. Weil es einen Fehler wirft oder Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

Um Jet-Fire im Projekt zu aktivieren, gibt es in Android Studio eine Option

Wählen Sie Ihr Projekt ---> Rechtsklick

App ----> Refactor ----> Zu AndroidX migrieren

Dargestellt im Bild unten: -

Geben Sie hier die Bildbeschreibung ein

Klicken Sie anschließend auf Auf AndroidX migrieren .

Es wird um Bestätigung gebeten und für Ihr Projekt gesichert.

Geben Sie hier die Bildbeschreibung ein

Und im letzten Schritt werden Sie aufgefordert, einen Refactor durchzuführen.

Geben Sie hier die Bildbeschreibung ein

Nachdem Sie Refactor ausgeführt haben, überprüfen Sie, ob Ihre gradle.properties android.useAndroidX=trueund android.enableJetifier=true. Wenn dies nicht der Fall ist, fügen Sie diese beiden Zeilen zu Ihrer Datei gradle.properties hinzu:

android.useAndroidX=true
android.enableJetifier=true

Hinweis: - Bei einem Upgrade mit Android Studio funktioniert diese Option, wenn Sie Android Studio 3.2 oder höher verwenden. Überprüfen Sie dies

sushildlh
quelle
1
Guter Vorschlag, aber nur eine Randnotiz für Leute, die ein Upgrade mit Android Studio durchführen. Diese Option funktioniert, wenn Sie Android Studio 3.2 und höher haben. Überprüfen Sie diese developer.android.com/jetpack/androidx/migrate
AB
20

Sie brauchen sich keine Sorgen zu machen

Aktivieren Sie einfach Jetifier in Ihrem Projekt .

  • Aktualisieren Sie Android Studio auf 3.2.0 oder neuer.
  • Öffnen Sie gradle.propertiesund fügen Sie unter zwei Zeilen hinzu.

    android.enableJetifier=true
    android.useAndroidX=true
    

Es werden alle Unterstützungsbibliotheken Ihrer Abhängigkeit zur Laufzeit in AndroidX konvertiert (möglicherweise treten Kompilierungsfehler auf, die App wird jedoch ausgeführt).

Khemraj
quelle
3
gradle.properties wurde nicht in meinen Dateien gefunden, selbst erstellt
FindOutIslamNow
Tatsächlich funktioniert ein Cache für transitive Abhängigkeit + Gradle möglicherweise nicht, selbst android.enableJetifier=truewenn dies passiert ist jetifier-standalone, könnte die manuelle Verwendung mit dem AAR eines Drittanbieters funktionieren.
Mochadwi
1

API 29. + Verwendung von AndroidX-Bibliotheken. Wenn Sie API 29. + verwenden, können Sie diese nicht entfernen. Wenn Sie AndroidX entfernen möchten, müssen Sie die gesamte 29. + API aus Ihrem SDK entfernen:

SDK-Einstellungen

Dies wird gut funktionieren.

Shubham Tiwari
quelle
0

Wenn Ihr Projekt nicht AndroidX (Mean Appcompat) ist und dieser Fehler auftritt, versuchen Sie, Abhängigkeitsversionen, die diesen Fehler auslösen, herunterzustufen, in meinem Fall Play-Services-Location ("Implementierung" com.google.android.gms: Play-Services-Location) : 17.0.0 '"), habe ich das Problem durch ein Downgrade auf com.google.android.gms gelöst: play-services-location: 16.0.0'

Ahmed KHABER
quelle
0

Ich hatte vorher ein Problem wie dieses, es war die Datei gradle.properties nicht vorhanden, nur die Datei gradle.properties.txt, also ging ich in meinen Projektordner und kopierte und fügte die Datei gradle.properties.txt ein, aber ohne. txt Erweiterung dann hat es endlich geklappt.

Dom bricht
quelle
0

Ich habe unten zwei Zeilen in der Datei gradle.properties hinzugefügt

android.useAndroidX=true
android.enableJetifier=true

dann habe ich folgenden fehler bekommen

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

Ich habe die Importe entfernt und unter der Zeile hinzugefügt

import static android.app.AlertDialog.*;

Und die Klassen, die von AppCompactActivity erweitert werden, haben die folgende Zeile hinzugefügt. (Für diese Fehler müssen Sie nur Alt + Enter in Android Studio drücken, um die richtige Bibliothek für Sie zu importieren. So können Sie alle Fehler beheben)

import androidx.appcompat.app.AppCompatActivity;

In Ihrer XML-Datei, falls Sie welche verwendet haben

<android.support.v7.widget.Toolbar 

Ersetzen Sie es durch androidx.appcompat.widget.Toolbar

dann in Ihrem Java-Code

import androidx.appcompat.widget.Toolbar;
Nikhil Dinesh
quelle
-1

Kommentar Diese Zeile in gradle.properties

android.useAndroidX = true

Vibhu Vikram Singh
quelle
OP fragt, ob es möglich ist, AndroidX mit Android-Unterstützung zu verwenden. Sie schlagen vor, AndroidX
Raildex
gehe zu gradle.properties und kommentiere
Vibhu Vikram Singh