Nie udało się rozwiązać zmiennej „$ {animal.sniffer.version}” podczas migracji do AndroidX


138

Używam Android Studio 3.2 Beta5 do migracji mojego projektu do AndroidX . Podczas przebudowy aplikacji otrzymuję następujące błędy:

BŁĄD: [TAG] Nie udało się rozwiązać zmiennej „$ {animal.sniffer.version}”

BŁĄD: [TAG] Nie udało się rozwiązać zmiennej „$ {junit.version}”

Pełne czyszczenie i odbudowa nie działa! Czy ktoś wie, jak to naprawić?


gradle.properties

android.enableJetifier=true
android.useAndroidX=true

build.gradle

buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven { url 'https://maven.fabric.io/public' }
        maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0-beta05'

        classpath 'com.google.gms:google-services:4.0.1'
        classpath "io.realm:realm-gradle-plugin:5.3.1"
        classpath 'io.fabric.tools:gradle:1.25.4'
        classpath 'com.google.firebase:firebase-plugins:1.1.5'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

app / build.gradle

apply plugin: 'com.android.application'
apply plugin: 'realm-android'
apply plugin: 'io.fabric'
apply plugin: 'com.google.firebase.firebase-perf'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.0"
    defaultConfig {
        applicationId "com.iceteaviet.fastfoodfinder"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
        }
    }
    aaptOptions {
        cruncherEnabled = false
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    testImplementation 'junit:junit:4.12'

    implementation 'com.jakewharton:butterknife:9.0.0-SNAPSHOT'

    implementation 'androidx.appcompat:appcompat:1.0.0-rc01'
    implementation 'com.google.android.material:material:1.0.0-rc01'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0-rc01'
    implementation 'androidx.cardview:cardview:1.0.0-rc01'

    implementation 'com.google.maps.android:android-maps-utils:0.5'
    implementation 'com.google.android.gms:play-services-maps:15.0.1'
    implementation 'com.google.android.gms:play-services-location:15.0.1'
    implementation 'com.google.firebase:firebase-core:16.0.1'
    implementation 'com.google.firebase:firebase-database:16.0.1'
    implementation 'com.google.firebase:firebase-auth:16.0.1'
    implementation 'com.google.android.gms:play-services-auth:15.0.1'

    implementation 'com.github.bumptech.glide:glide:4.7.1'

    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

    implementation 'org.greenrobot:eventbus:3.1.1'

    implementation 'de.hdodenhof:circleimageview:2.2.0'

    implementation 'io.realm:realm-android-library:5.3.1'

    implementation 'com.facebook.android:facebook-android-sdk:4.34.0'

    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
    implementation 'io.reactivex.rxjava2:rxjava:2.0.2'

    implementation 'androidx.multidex:multidex:2.0.0'

    implementation 'com.crashlytics.sdk.android:crashlytics:2.9.4'
    implementation 'com.google.firebase:firebase-perf:16.0.0'

    implementation 'com.jakewharton.timber:timber:4.7.1'

    annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-SNAPSHOT'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
}

apply plugin: 'com.google.gms.google-services'

Jakieś postępy tutaj?
Chad Bingham

@ChadBingham Nie, nadal jest to ten sam błąd
nhoxbypass

Wreszcie znalazłem rozwiązanie, odpowiedź znajdziesz tutaj: stackoverflow.com/a/52308912/10224384
Nabster


5
@Nabster hey hey moje pytanie zostało wysłane miesiąc temu, podczas gdy to pytanie zostało wysłane 20 godzin temu!
nhoxbypass

Odpowiedzi:


108

Naprawiam to dwoma krokami

1) Plik -> Unieważnij pamięć podręczną / uruchom ponownie ... wprowadź opis obrazu tutaj

2) Kompiluj -> Wyczyść projekt wprowadź opis obrazu tutaj


4
Jakoś pracował dla kilku przebudowy ale im uzyskiwanie ten sam błąd ponownie teraz ..
Al Cabone

2
dla mnie Clean Project wystarczył
f4bo

1
Również Clean Project był wszystkim, czego wymagało ode mnie. Dzięki @ f4bo za wskazówkę.
John Bentley,

1
To działa. Czyszczę tylko projekt. Tę odpowiedź należy ustawić jako zaakceptowaną. @nhoxbypass
azwar_akbar

30

Ten sam błąd wystąpił po zaktualizowaniu mojego pliku build.gradle z zależnościami AndroidX Test . Okazuje się, że zapomniałem usunąć starą zależność od junit. Więc dla mnie rozwiązaniem było po prostu usunięcie następującej zależności:

dependencies {
    ...
    testImplementation 'junit:junit:4.12'
}

To był dla mnie problem.
Brill Pappin

Tak, naprawiłem to. Natknąłem się na problem z kursem Udacity Kotlin Zgadnij to
Aswin Mohan

Czy mógłbyś wyjaśnić, dlaczego tak się dzieje?
Riz-waan

17

Dodanie obsługi Java 8 do pliku build.gradle rozwiązało problem

android {
     ...

     //Add the following configuration in order to target Java 8.
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_8
         targetCompatibility JavaVersion.VERSION_1_8
     }
}

nie znaleziono funkcji leanback. Buduję aplikację telewizyjną i wszystko, co dotyczy wsparcia Leanback w
wersji

1
unieważnij pamięci podręczne i uruchom ponownie studio Android
Dhaval Patel

3
nie, nie, pomyślałem, że musisz użyć pakietu androidx.
ralphgabb

Wydaje mi się, że dodanie obsługi Java 8 zmusza Android Studio do unieważnienia jego pamięci podręcznych i tym samym osiąga ten sam rezultat, co efekt uboczny ... Hmmmm, w porządku ...
varun

14

Wygląda na to, że Glide jest problemem.

Miałem ten sam błąd i właśnie zaktualizowałem zależności Glide do 4.8 i nie ma błędów kompilacji.

Kotlin:

// Glide
def glide_version = "4.8.0"
implementation "com.github.bumptech.glide:glide:$glide_version"
kapt "com.github.bumptech.glide:compiler:$glide_version"

Java:

// Glide
def glide_version = "4.8.0"
implementation "com.github.bumptech.glide:glide:$glide_version"
annotationProcessor "com.github.bumptech.glide:compiler:$glide_version"

Upewnij się, że masz włączone w swoim gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

Źródło: https://github.com/bumptech/glide/issues/3124

Mam nadzieję, że to ci pomoże!


9
Ten błąd pojawia się również bez Glide jako zależności
Fabian Streitel


4

Usuwanie testuInstrumentationRunner działał dla mnie:

defaultConfig {
...
...
//        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

fantastyczne rozwiązanie! Naprawiono to dla mnie
beastlyCoder

4

Jeśli używasz Kotlin, problem wyskakuje, jeśli nie używasz kaptwersji dla żadnego procesora adnotacji, którego używasz w projekcie.
Jak @Vince wspomniał o tym przypadku Glide, może się to zdarzyć w przypadku Dagger2, Butterknifeitp.
Jeśli używasz obu Javai Kotlinbędziesz musiał zachować obie zależności, w następujący sposób (były $glideVersionto predefiniowana wersja Glide):

implementation "com.github.bumptech.glide:glide:$glideVersion"

kapt "com.github.bumptech.glide:compiler:$glideVersion"

Jeśli jesteś w Kotlinjedynym projekcie, kaptzależność powinna działać samodzielnie.

EDYCJA
Kolejną rzeczą, o której powinieneś pamiętać, jest to, że już używasz Androidx. Androidxjest świetnym refaktorem, ale podczas migracji może spowodować załamanie niektórych zależności. Biblioteki głównego nurtu są już zaktualizowane Androidx, jednak niektóre z nich nie są, a nawet nie.
Jeśli problem nie zniknie po rozwiązaniu podanym przeze mnie powyżej tej edycji, możesz przyjrzeć się swoim zależnościom i upewnić się, że również używają Androidx.

EDYCJA 2
Jak wspomniał @Ted, zbadałem wstecz i on ma rację kapt, obsługuje również javapliki. kaptsam załatwi sprawę, nie trzeba zachowywać obu kapti annotationProcessorzależności.


1
kapt może również obsługiwać pliki java, więc nie ma potrzeby używania ich obu, tylko kapt jest OK.
Ted

3

Spróbuj usunąć tę linię:

maven { url "https://oss.sonatype.org/content/repositories/snapshots" }

z sekcji buildscript / repositories w pliku build.gradle.

Kiedy dodałem tę linię, otrzymałem opisany przez ciebie błąd. Kiedy go usunąłem, już nie. Ta linia powinna znajdować się tylko w sekcji allprojects / repositories.


1
Uważam, że Jake Wharton dodał już obsługę AndroidX w migawce 9.0.0. Zobacz: github.com/JakeWharton/butterknife/issues/1280
nhoxbypass

2

Spróbuj ustawić android.enableJetifier = false w gradle.properties. Następnie unieważnij pamięć podręczną / uruchom ponownie ... w Android Studio


8
Nie jest to zalecane, ponieważ mogą istnieć biblioteki innych firm, które nie zostały jeszcze zaktualizowane do AndroidX! Zgodnie z dokumentacją: „android.enableJetifier: Po ustawieniu wartości true wtyczka systemu Android automatycznie migruje istniejące biblioteki innych firm do systemu AndroidX, przepisując ich pliki binarne. Domyślnie flaga ma wartość false, jeśli nie jest określona”. developer.android.com/jetpack/androidx
Gábor Horváth

1

Poprawka jest w 4.2.0, użyj wyższej wersji google gms jar.

Spróbuj zmienić:

classpath „com.google.gms: google-services: 4.0.1”

według tej wersji:

classpath „com.google.gms: google-services: 4.2.0”

Mam nadzieję, że to zadziała ...


1
To zadziałało dla mnie wraz z aktualizacją zależności.
glisu

1

Jeśli używasz sztyletu lub noża masłowego, zaktualizuj go do najnowszej wersji. Lub, jeśli masz inną bibliotekę iniekcyjną używaną w swoim projekcie, możesz spróbować ją sprawdzić, czy obsługuje androidx, czy nie.

Znalazłem ten sam błąd, problem dotyczy mojego sztyletu i noża do masła. Naprawiłem to, aktualizując go do najnowszej wersji.


1

Wersja Androida: 4.10.2

Rozwiązałem ten problem w trzech prostych krokach: Najpierw dodałem poniżej tego w pubspec.yml: (z dwiema spacjami identyfikacyjnymi)

module:
  androidX: true 

Dodając te dwie linie poniżej w gradle.properties, mam to w android / gradle.properties w folderze projektu.

android.useAndroidX=true
android.enableJetifier=true

A potem napisałem z terminalem:

flutter clean

Może będziesz musiał zatrzymać urządzenie i uruchomić ponownie.



-1

Naprawiłem to, odświeżając cahche (zamiast go unieważniać - co również czyści lokalną historię):

  1. w pliku gradle.properties skomentuj wiersz org.gradle.caching = true.
  2. Oczyść, odbuduj.
  3. W pliku gradle.properties usuń komentarz w wierszu org.gradle.caching = true.
  4. Oczyść, odbuduj.

Otóż ​​to!


-1

Przejdź do pliku i kliknij Unieważnij pamięci podręczne i uruchom ponownie.

Po ponownym uruchomieniu zwiększ minimalną wersję pakietu SDK w build.gradlepliku aplikacji .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.