Czy mogę korzystać z biblioteki, która korzystała z obsługi Androida w projektach Androidx.

96

Wiem, androidx i zależność od wsparcia powodują błąd multidex. Nie możemy jednocześnie korzystać z androidx i androida. Więc całkowicie przenoszę się na androidx. ale jedna z moich bibliotek zależności korzystała z obsługi Androida "lottie".

Co możemy zrobić w powyższej sytuacji? Czy powinienem usunąć „lottie” z mojego projektu.

poniżej jest mój stopień

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
źródło

Odpowiedzi:

133

Możesz włączyć Jetifierw swoim projekcie, co w zasadzie zamieni Android Support Libraryzależności w zależnościach projektu z AndroidX-ones. (np. Twoje zależności Lottie zostaną zmienione z Support na AnroidX)

Z dokumentacji Android Studio ( https://developer.android.com/studio/preview/features/ ):

Wtyczka Android Gradle udostępnia następujące flagi globalne, które można ustawić w pliku gradle.properties:

  • android.useAndroidX: Gdy ustawiona na wartość true, ta flaga wskazuje, że chcesz od teraz rozpocząć korzystanie z AndroidX. Jeśli flaga jest nieobecna, Android Studio zachowuje się tak, jakby flaga była ustawiona na false.
  • android.enableJetifier: Gdy ustawiona na wartość true, ta flaga wskazuje, że chcesz mieć obsługę narzędzi (z wtyczki Android Gradle), aby automatycznie konwertować istniejące biblioteki innych firm, tak jakby były napisane dla AndroidX. Jeśli flaga jest nieobecna, Android Studio zachowuje się tak, jakby flaga była ustawiona na false.

Warunek wstępny dla Jetifier:

  • musisz użyć przynajmniej Android Studio 3.2

Aby włączyć jetifier, dodaj te dwie linie do swojego gradle.propertiespliku:

android.useAndroidX=true
android.enableJetifier=true

Na koniec sprawdź informacje o wydaniu AndroidX, ponieważ jetifiernadal ma problemy z niektórymi bibliotekami (np. Dagger Android): https://developer.android.com/topic/libraries/support-library/androidx-rn

Krzysztof
źródło
Mój projekt korzysta z wielu bibliotek, niektóre z nich korzystają z biblioteki obsługi, a niektóre z Androidx. Jak mogę używać obu bibliotek w moim projekcie?
Hiren Dabhi
1
@hiren dabhi Czy możesz utworzyć nowe pytanie do swojej konfiguracji, jeśli propozycja rozwiązania nie działa dla Ciebie? Trudno jest znaleźć odpowiedź, nie znając więcej szczegółów na temat konfiguracji.
Christopher,
57

Ręczne dodawanie android.useAndroidX=truei android.enableJetifier=trueutrudnianie pracy. Ponieważ rzuca jakiś błąd lub Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

Aby włączyć Jet-fire w projekcie, istnieje opcja w Android Studio

Wybierz swój projekt ---> Kliknij prawym przyciskiem myszy

aplikacja ----> Refaktoryzuj ----> Migracja do AndroidX

Pokazano na poniższym obrazku: -

wprowadź opis obrazu tutaj

Po kliknięciu Migrate to AndroidX .

Poprosi o potwierdzenie i kopię zapasową projektu.

wprowadź opis obrazu tutaj

I ostatni krok poprosi Cię o dokonanie refaktoryzacji.

wprowadź opis obrazu tutaj

Po wykonaniu Refactor sprawdź, czy gradle.properties ma android.useAndroidX=truei android.enableJetifier=true. Jeśli tak nie jest, dodaj te dwie linie do pliku gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

Uwaga: - Aktualizacja za pomocą Android Studio, ta opcja działa, jeśli masz Android Studio 3.2 i nowsze. Sprawdź to

sushildlh
źródło
1
dobra sugestia, ale na marginesie dla osób dokonujących aktualizacji za pomocą Android Studio, ta opcja działa, jeśli masz Android Studio 3.2 i nowsze. Sprawdź to developer.android.com/jetpack/androidx/migrate
AB
21

Nie musisz się martwić

Po prostu włącz Jetifier w swoim projekcie .

  • Zaktualizuj Android Studio do wersji 3.2.0 lub nowszej.
  • Otwórz gradle.propertiesi dodaj poniżej dwie linie.

    android.enableJetifier=true
    android.useAndroidX=true
    

Konwertuje wszystkie biblioteki obsługi Twojej zależności na AndroidX w czasie wykonywania (możesz mieć błędy czasu kompilacji, ale aplikacja będzie działać).

Khemraj
źródło
3
gradle.properties nie został znaleziony w moich plikach, utworzony samodzielnie
FindOutIslamNow
w rzeczywistości zależność przechodnia + pamięć podręczna gradle może nie działać, nawet android.enableJetifier=truejeśli tak się stało, myślę, że ręczne użycie jetifier-standalonedo aar innej firmy może działać.
mochadwi
Mam Android Studio 4.1. Włączyłem Jetifier. Moja aplikacja nie działa.
meekash55
@ meekash55 jaki jest błąd?
Khemraj
@Khemraj nawet dodając Jetifier do gradle.properties, zaczął pokazywać błędy czasu kompilacji wszędzie w projekcie, gdzie jest użycie biblioteki obsługującej V4. Pozostała więc tylko opcja ręcznej naprawy i migracji całego kodu do AndroidX. Co nie było dla mnie opcją.
meekash55
1

API 29. + wykorzystanie bibliotek AndroidX. Jeśli używasz API 29. +, nie możesz ich usunąć. Jeśli chcesz usunąć AndroidX, musisz usunąć całe 29. + API ze swojego SDK:

Ustawienia SDK

To zadziała dobrze.

Shubham Tiwari
źródło
1

Dodałem poniżej dwie linie w pliku gradle.properties

android.useAndroidX=true
android.enableJetifier=true

wtedy otrzymałem następujący błąd

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

Usunąłem import i dodałem poniższy wiersz

import static android.app.AlertDialog.*;

A klasy, które są rozszerzone z AppCompactActivity, dodały poniższy wiersz. (W przypadku tych błędów wystarczy nacisnąć alt + enter w Android Studio, co zaimportuje odpowiednią bibliotekę. W ten sposób możesz rozwiązać wszystkie błędy)

import androidx.appcompat.app.AppCompatActivity;

W pliku xml, jeśli użyłeś żadnego

<android.support.v7.widget.Toolbar 

zamień na androidx.appcompat.widget.Toolbar

następnie w swoim kodzie java

import androidx.appcompat.widget.Toolbar;
Nikhil Dinesh
źródło
1
Ale masz ogromny projekt, w którym nie można zmienić wszystkich fragmentów i działań za jedną zmianę androidX.
meekash55
0

Jeśli Twój projekt nie jest AndroidX (oznacza Appcompat) i otrzymałeś ten błąd, spróbuj obniżyć wersję zależności, która powoduje ten błąd, w moim przypadku play-services-location ("implementacja" com.google.android.gms: play-services-location : 17.0.0 '"), rozwiązałem problem, przechodząc na com.google.android.gms: play-services-location: 16.0.0'

Ahmed KHABER
źródło
0

Miałem taki problem wcześniej, to był plik gradle.properties nie istnieje, tylko gradle.properties.txt, więc poszedłem do folderu mojego projektu i skopiowałem i wkleiłem plik gradle.properties.txt, ale bez niego. txt to w końcu zadziałało.

Dom broks
źródło
-1

Skomentuj tę linię gradle.properties

android.useAndroidX = true

Vibhu Vikram Singh
źródło
OP pyta, czy można używać AndroidX z obsługą Androida. Sugerujesz wyłączenie AndroidX
Raildex
przejdź do gradle.properties i skomentuj
Vibhu Vikram Singh