当迁移到AndroidX时,无法解析变量“$ {animal.sniffer.version}”。

147
我正在使用 Android Studio 3.2 Beta5 将我的项目迁移到 AndroidX。当我重新构建我的应用程序时,我遇到了以下错误:

ERROR: [TAG] 无法解析变量 '${animal.sniffer.version}'

ERROR: [TAG] 无法解析变量 '${junit.version}'

完全清理和重新构建没有起作用!有人知道如何修复这个问题吗?


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'

这里有进展吗? - Chad Bingham
终于找到了解决方案,请在此处查找答案:https://dev59.com/PFQK5IYBdhLWcg3wL9Fq#52308912 - Nabster
可能是 https://dev59.com/PFQK5IYBdhLWcg3wL9Fq 的重复问题。 - Nabster
5
@Nabster 嘿嘿,我的问题是一个月前发布的,而这个问题是20小时前发布的! - nhoxbypass
在这里也遇到了同样的问题,使用Android Studio 3.2稳定版本。只有清除缓存并重启才能暂时解决此问题。 - Al Cabone
显示剩余2条评论
16个回答

118

我用两个步骤来解决这个问题

1)文件-> 无效缓存/重启... enter image description here

2)构建-> 清理项目 enter image description here


5
之前在几次重建中不知怎么就好了,但现在我又遇到了同样的错误。 - Al Cabone
2
对我来说,“Clean Project”已经足够了。 - f4bo
1
清理项目就是我所需要的。感谢@f4bo的提示。 - John Bentley
1
它可以工作。我只是清理了项目。这个答案应该被设置为接受的答案。@nhoxbypass - azwar_akbar

35

在更新了我的build.gradle文件并添加了AndroidX测试依赖项之后,我遇到了相同的错误。结果发现我忘记删除旧的junit依赖项。因此,对我来说,解决方法很简单,只需要移除以下依赖项:

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

这对我来说是个问题。 - Brill Pappin
好的,问题已经解决了。我在 Udacity Kotlin 课程中遇到了猜数字游戏的问题。 - Aswin Mohan
请问您能否解释一下为什么会出现这种情况? - Riz-waan

17

Java 8 支持 添加到 build.gradle 文件中解决了我的问题。

android {
     ...

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

未找到 leanback。我正在开发一个电视应用程序,但出现任何涉及 leanback support v17 的内容都会变成红色。 - ralphgabb
1
使缓存失效并重新启动Android Studio - Dhaval Patel
3
不是这样的,我想你需要使用androidx包。 - ralphgabb
我猜添加Java 8支持会导致Android Studio无效化其缓存,从而以副作用的方式实现相同的结果... 嗯嗯,好吧... - varun

14

看起来问题出在 Glide 上。

我之前也遇到同样的错误,后来将 Glide 的依赖更新到 4.8 版本,就没有构建错误了。

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 :

->

Java:

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

请确保已在gradle.properties中启用:

android.useAndroidX=true
android.enableJetifier=true

来源: https://github.com/bumptech/glide/issues/3124

希望这能对您有所帮助!


9
这个错误也出现在我这里,即使没有Glide作为依赖。 - Fabian Streitel

7

通过进入主目录并输入 flutter clean 命令,问题得到解决。


1
太好了,如果你没有使用Flutter呢 ;) - Kevin Galligan
4
那就使用Flutter吧 ;) - Nephew of Stackoverflow

6

删除testInstrumentationRunner选项对我有用:

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

太棒了!解决了我的问题。 - beastlyCoder

4
如果您使用的是Kotlin,则在项目中使用任何注解处理器时,如果不使用kapt版本,就会出现此问题。正如@Vince提到Glide的情况一样,这也可能发生在Dagger2、Butterknife等其他注解处理器中。如果您同时使用Java和Kotlin,则需要保留两个依赖项,如下所示(其中$glideVersion是预定义的Glide版本):
implementation "com.github.bumptech.glide:glide:$glideVersion"

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

如果你只是在一个 Kotlin 项目中,那么 kapt 依赖应该可以单独使用。
编辑 还有一件事情需要注意,如果你已经在使用 Androidx。Androidx 是一个很好的重构,但是在迁移时可能会导致某些依赖项崩溃。主流库已经更新到 Androidx,但是有些库没有并且也不会更新。 如果以上提供的解决方案无法解决问题,请查看你的依赖项,并确保它们也使用了 Androidx。
编辑2 正如 @Ted 所提到的,我进行了调研,他是正确的,kapt 也可以处理 java 文件。只需使用 kapt 就可以了,不需要同时保留 kapt 和 annotationProcessor 两个依赖项。

1
kapt 也可以处理 Java 文件,因此无需同时使用它们,只需要使用 kapt 就可以了。 - Ted

3
尝试删除这行代码:
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }

请将以下这行代码从build.gradle文件的buildscript / repositories部分移除。

当我添加了这行代码后,出现了你所描述的错误。当我将它移除后,错误不再出现。这行代码应该只放在allprojects / repositories部分。


1
我相信Jake Wharton已经在9.0.0快照中添加了对AndroidX的支持。请参见:https://github.com/JakeWharton/butterknife/issues/1280 - nhoxbypass

2
尝试在gradle.properties中设置android.enableJetifier=false。然后在Android Studio中执行“无效缓存/重启”操作。

8
不建议这样做,因为可能会存在尚未升级到AndroidX的第三方库!根据文档所述:“android.enableJetifier:当设置为true时,Android插件通过重写其二进制文件自动迁移现有的第三方库以使用AndroidX。如果未指定该标志,则默认情况下该标志为false。”https://developer.android.com/jetpack/androidx/ - gabhor

2

修复方法在4.2.0版本中,使用更高版本的google gms jar。

尝试更改:

classpath 'com.google.gms:google-services:4.0.1'

为此版本:

classpath 'com.google.gms:google-services:4.2.0'

希望这能解决问题...


1
这对我有用,同时更新依赖项。 - glisu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接