【问题标题】:WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'警告:API 'variant.getJavaCompile()' 已过时,已替换为 'variant.getJavaCompileProvider()'
【发布时间】:2019-11-23 09:33:18
【问题描述】:

同步 Gradle 时突然出现此错误:

警告:API 'variant.getJavaCompile()' 已过时且已被 替换为“variant.getJavaCompileProvider()”。 它将在 2019 年底被删除。 欲了解更多信息,请参阅https://d.android.com/r/tools/task-configuration-avoidance 受影响的模块:app

我有这个build.gradle 用于应用模块:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.google-services'

apply plugin: 'io.fabric'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.2"
    defaultConfig {
        applicationId "..."
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "..."
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        versionNameSuffix = version_suffix

        [...]
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

            [...]
        }
        debug {
            [...]
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.61"
    implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation "com.android.support:preference-v7:28.0.0"
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
    implementation 'com.google.android.material:material:1.0.0-rc02'

    [...]
}

我可以正确编译应用程序,但有点麻烦,而且我认为,某些东西将在 2019 年底停止工作。关于它是什么以及如何解决它的任何想法?

【问题讨论】:

标签: android android-studio compilation android-gradle-plugin google-fabric


【解决方案1】:

就我而言,我关注了this。 总结,在 gradle 应用级别:改变这个:

variant.outputs.all { output ->
    variant.assemble.doLast {
        ....
    }
}

variant.outputs.all { output ->
variant.getAssembleProvider().configure() {
    it.doLast { 
        ....
    }
}

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,通过在 build.gradle 文件中定义 kotlin gradle 插件版本解决了。

    改变这个

     classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    

     classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50{or latest version}"
    

    【讨论】:

    • 谢谢!因此,我们还必须更改app\build.gradleimplementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.0"。然后,我们将收到与信息相同的消息,而不是警告。
    【解决方案3】:

    在项目级build.gradle 升级谷歌服务解决了我的问题。

    升级后:

    dependencies {
        ...
        classpath 'com.google.gms:google-services:4.3.2'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
    

    【讨论】:

      【解决方案4】:

      升级 Kotlin插件stdLib)版本到1.3.1 在我的情况下解决了这个警告。通过替换现有的 Kotlin 版本来更新整个项目中的 Kotlin 版本:

      ext.kotlin_version = '1.3.50'
      

      【讨论】:

      • ext.kotlin_version = '1.3.10' 或 '1.3.50'
      • 这是我的问题。之前是ext.kotlin_version = '1.2.71' .. 将其更改为上面的答案,效果很好! -- 我删除了我的/android/ios 文件夹,然后运行flutter create . 来重建Flutter 应用程序并将ext.kotlin_version = '1.2.71' 放在我的build.gradle
      【解决方案5】:

      这主要是由于库已经过时。要手动检查新更新,您应该导航到

      分析 >“按名称运行检查”

      应该够了。另一种选择是使用

      运行 gradle 依赖项更新

      ./gradlew dependencyUpdates

      这将产生这样的报告:

      :dependencyUpdates
      
      ------------------------------------------------------------
      : Project Dependency Updates (report to plain text file)
      ------------------------------------------------------------
      
      The following dependencies are using the latest milestone version:
       - com.github.ben-manes:gradle-versions-plugin:0.15.0
      
      The following dependencies have later milestone versions:
       - com.google.auto.value:auto-value [1.4 -> 1.4.1]
       - com.google.errorprone:error_prone_core [2.0.19 -> 2.0.21]
       - com.google.guava:guava [21.0 -> 23.0-rc1]
       - net.ltgt.gradle:gradle-apt-plugin [0.9 -> 0.10]
       - net.ltgt.gradle:gradle-errorprone-plugin [0.0.10 -> 0.0.11]
      
      ...
      

      【讨论】:

        【解决方案6】:

        将 protobuf-gradle-plugin 升级到 0.8.10 版解决了我的问题。将现有的 protobuf 替换为

        classpath 'gradle.plugin.com.google.protobuf:protobuf-gradle-plugin:0.8.10'
        

        【讨论】:

          【解决方案7】:

          1) 将android.debug.obsoleteApi=true 添加到您的gradle.properties。它会告诉你哪些模块受到警告日志的影响。

          2) 更新这些已弃用的函数。

          • variant.javaCompilevariant.javaCompileProvider

          • variant.javaCompile.destinationDirvariant.javaCompileProvider.get().destinationDir

          【讨论】:

            【解决方案8】:

            将您的项目迁移到 androidX。

            依赖升级到androidX。所以如果你想使用androidX内容migrate your project to androidX.

            使用 Android Studio 3.2 及更高版本,您可以通过从菜单栏中选择 Refactor > Migrate to AndroidX 快速迁移现有项目以使用 AndroidX。

            这次降级依赖项可能会解决您的问题 - 但不推荐

            【讨论】:

            • 我有 AndroidX,但我仍然收到消息。
            【解决方案9】:

            build.gradle 更改您的 Google 服务版本:

            dependencies {
              classpath 'com.google.gms:google-services:4.2.0'
            }
            

            【讨论】:

            • 我在 4.3.0 上,问题仍然存在。
            • @wesleyfranks 一样。但是如果我切换到 4.2.0 我就没有问题了......
            • 我在 4.3.1 上,问题仍然存在
            【解决方案10】:

            这是一个流行的问题。如果您不使用这些方法,则解决方案是更新库。 请更新您的 kotlin 版本,以及您的所有依赖项,如 fabricprotobuf 等。如果您确定已更新所有内容,请尝试询问图书馆的作者。

            【讨论】:

              【解决方案11】:

              我也遇到了同样的问题。经过一段时间的搜索,我发现警告是由于使用了最新版本的google-services插件(版本4.3.0)而产生的。顺便说一句,我在我的应用程序中使用这个插件来实现 Firebase 功能。 我所做的只是在 build.gradle(Project) 级别文件的 buildscript 中降级我的google-services 插件,如下所示:

              buildscript{
                  dependencies {
                     // From =>
                     classpath 'com.google.gms:google-services:4.3.0'
                     // To =>
                     classpath 'com.google.gms:google-services:4.2.0'
                  }
              }
              

              【讨论】:

              • 我做了这个解决方案,错误就消失了。谢谢
              • 工作!谢谢
              • 我升级到 4.3.2 后没有出现此警告。
              【解决方案12】:

              此问题现已通过更新 Fabric Gradle 版本 1.30.0 得到修复:

              更新发布:2019 年 3 月 19 日

              请看这个链接:https://docs.fabric.io/android/changelog.html#march-15-2019

              请在项目级 Gradle 中更新您的类路径依赖项:

              buildscript {
                  // ... repositories, etc. ...
              
                  dependencies {
                      // ...other dependencies ...
                      classpath 'io.fabric.tools:gradle:1.30.0'
                  }
              }
              

              【讨论】:

              • 这也是一个正确的答案,解决面临的问题的简单方法。
              • 我现在有classpath 'io.fabric.tools:gradle:1.29.0'。我该怎么办?
              • @FaizanMubasher 尝试将您的谷歌服务降级到 4.2
              • @InfiniteLoops 建议降级到 4.2 似乎可行。
              • 已将 Fabric 升级到 1.31.0 并将 Google 服务降级到 4.2.0 已解决
              【解决方案13】:

              这解决了我的问题。我需要做的就是在 build.gradle(Project) 级别文件的 buildscript 中降级我的 google-services 插件,如下所示

              buildscript{
                   dependencies {
                      // From =>
                      classpath 'com.google.gms:google-services:4.3.0'
                      // To =>
                      classpath 'com.google.gms:google-services:4.2.0'
                      // Add dependency
                      classpath 'io.fabric.tools:gradle:1.28.1'
                  }
              }
              

              【讨论】:

                【解决方案14】:

                将结构插件更新到项目级别 Gradle 文件中的最新版本(不是应用级别)。就我而言,这条线解决了问题

                classpath 'io.fabric.tools:gradle:1.25.4'
                

                classpath 'io.fabric.tools:gradle:1.29.0'
                

                【讨论】:

                  【解决方案15】:

                  就我而言,它是由 gms 服务 4.3.0 引起的。所以我不得不将其更改为:

                  com.google.gms:google-services:4.2.0
                  

                  我通过运行找到了这个:

                  gradlew sync -Pandroid.debug.obsoleteApi=true
                  

                  在终端中。转到查看 -> 工具窗口 -> Android Studio 中的终端。

                  【讨论】:

                  • 在 Ubuntu 中,无法运行此命令,我如何在 ubuntu 中执行此操作。要求安装软件包,但我安装了该软件包,但我仍然无法运行。还有其他方法吗?
                  • 我刚刚将我的 gms google 服务更改为 4.2,警告消失了,谢谢。
                  • @VasudevVyas 如果在 android Studio 中,只需在命令前添加 ./,即终端设置为您的 android 项目的根目录。否则你必须 cd 到项目的根目录。
                  • 我为什么要降级 google-services 依赖项。这不是一个解决方案。
                  • @AhamadullahSaikat 这可能会在未来的版本中得到修复。然后你可以再次升级它。这是一种解决方法,直到它被谷歌修复。
                  【解决方案16】:

                  保持项目(不是应用程序)Build.gradle 依赖类路径版本代码是新的

                   dependencies {
                      classpath 'com.android.tools.build:gradle:3.5.0-beta01'
                      classpath 'com.novoda:bintray-release:0.8.1'
                      // NOTE: Do not place your application dependencies here; they belong
                      // in the individual module build.gradle files
                  }
                  

                  【讨论】:

                    【解决方案17】:

                    如果我从application gradle 中删除这一行:

                    apply plugin: 'io.fabric'
                    

                    错误将不再出现。

                    Reference link github

                    【讨论】:

                    • 请勿这样做,否则 Crashlytics 将停止工作。这只是隐藏问题。
                    【解决方案18】:

                    就我而言

                    build.gradle(Project)
                    

                    曾经

                    ext.kotlin_version = '1.2.71'
                    

                    更新到

                    ext.kotlin_version = '1.3.0'
                    

                    看起来问题已经解决了

                    【讨论】:

                    • 这很奇怪。我更新到 1.4.0 并且它出现了。可能升级后。 :)
                    【解决方案19】:

                    降级 Gradle 版本对我有用:

                    classpath 'com.android.tools.build:gradle:3.2.0'
                    

                    【讨论】:

                    • 降级绝不是一种选择
                    • 这就是我想要的答案。谢谢!
                    • 在某些情况下可以降级
                    • 当然会。这不费吹灰之力!但是,降级用完多久?
                    【解决方案20】:

                    当插件检测到您正在使用不再受支持的 API 时,它现在可以提供更详细的信息来帮助您确定该 API 的使用位置。要查看附加信息,您需要在项目的 gradle.properties 文件中包含以下内容:

                    android.debug.obsoleteApi=true
                    

                    【讨论】:

                    • 构建、gradle 或 app.gradle 的位置
                    • 在你的项目中搜索 gradle.properties 文件
                    【解决方案21】:

                    这里是一个临时解决方法,如果您使用的是房间,只需升级到 1.1.0 或更高版本

                    implementation "android.arch.persistence.room:runtime:1.1.0"
                    

                    它为我删除了这个警告。

                    【讨论】:

                    • 是的,当我更新版本时,这些警告消失了
                    【解决方案22】:

                    更新 gradle 到 gradle:3.3.0

                    默认的“组装”任务仅适用于普通变体。也添加测试变体。

                    android.testVariants.all { variant ->
                        tasks.getByName('assemble').dependsOn variant.getAssembleProvider()
                    }
                    

                    还评论应用面料

                    //apply plugin: 'io.fabric'
                    

                    【讨论】:

                    • 什么是“正常”变体?什么是 android.testVariants.all {...} 代码(它的目的是什么)?这个引用的文字出自哪里?你能更新答案吗?
                    • 我已经更改了 chrashlytics crashlytics { manifestPath = "$buildDir/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml" }的清单路径
                    • @Ewoks 普通变体是构建变体(调试/发布),它们使用一组特定的规则。您可以设置许多不同的变体(口味)。此外,您可以创建针对目标的测试源集特定的构建变体。
                    • 我知道口味,但不确定这是否适用于这里以及它是如何相关的。这就是为什么我问你是否可以通过澄清你引用的来源和修复格式来更新答案(猜你混合了代码格式和注释)
                    • 根本无法保证面料是问题的根源。实际上,有了这个“解决方案”,我们不知道问题出在哪里。此外,没有解释为什么要对 testVariants 做任何事情,这有什么关系?!?这就是为什么@KrsteMoskov 的原始答案具有误导性,并且仅适用于特定用例(如果它可以解决任何问题)。为了帮助您“参与”,我正确格式化了您的答案,并在您编写内容时保留了内容,以便其他人可以决定这是否对他们有用
                    【解决方案23】:

                    就我而言,我不得不注释掉 com.google.firebase.firebase-crash 插件:

                    apply plugin: 'com.android.application'
                    // apply plugin: 'com.google.firebase.firebase-crash' <== this plugin causes the error
                    

                    这是自 Android Studio 3.3.0 以来的一个错误

                    【讨论】:

                    • 对我来说这是因为我使用的是oss-licenses-plugin
                    【解决方案24】:

                    更新到 3.3.0 后我遇到了这个问题

                    如果您没有执行 gradle 文件中的错误状态,则可能是某些插件仍未更新到较新的 API 导致此问题。要确定它是哪个插件,请执行以下操作(如 "Better debug info when using obsolete API" of 3.3.0 announcement 中所述):

                    • 'android.debug.obsoleteApi=true' 添加到您的 gradle.properties 文件中,该文件将记录错误并提供更多详细信息
                    • 重试并阅读日志详细信息。会有一丝“有问题”的插件
                    • 确定后,尝试禁用它并查看问题是否消失,以确保
                    • 前往插件的 github 页面并创建包含详细日志和清晰描述的问题,以便您帮助开发人员更快地为每个人修复它
                    • 请耐心等待他们修复它,或者您修复它并为开发者创建 PR

                    希望对他人有所帮助

                    【讨论】:

                    • 在我看来,这是最普遍、最有用的答案。在我的情况下,由于使用了 Groovy-Android plugin(用于 Spock 测试)而发出此警告。
                    • 这是正确的答案。谁支持 gradle 版本更新?
                    • 这对我也有用,这个问题有什么新的吗?与此同时,我们应该无能为力,对吗?
                    • 真的很有帮助。就我而言,它是 Hugo 插件。
                    • 添加android.debug.obsoleteApi=true 后,要阅读记录的详细信息:转到底部的“构建”选项卡,在“构建输出”窗口中,单击“切换视图”。当您单击漂亮的颜色消失时,滚动到顶部显示WARNING: API 'variant.getAssemble()' is obsolete。然后在它下面,它显示REASON: Called from: ... 在我的情况下,它是由于medium.com/@xabaras/…
                    【解决方案25】:

                    这是构建工具发出的警告,原因有两个。
                    1.其中一个插件依赖Task而不是TaskProvider,我们无能为力。
                    2.你已经配置了task的用法,因为它支持TaskProvider。

                    WARNING: API 'variant.getGenerateBuildConfig()' is obsolete and has been replaced with 'variant.getGenerateBuildConfigProvider()'.
                    It will be removed at the end of 2019.
                    For more information, see https://d.android.com/r/tools/task-configuration-avoidance
                    
                    WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'.
                    It will be removed at the end of 2019.
                    For more information, see https://d.android.com/r/tools/task-configuration-avoidance
                    
                    WARNING: API 'variant.getMergeResources()' is obsolete and has been replaced with 'variant.getMergeResourcesProvider()'.
                    It will be removed at the end of 2019.
                    For more information, see https://d.android.com/r/tools/task-configuration-avoidance
                    

                    注意如下的 sn-ps 并更新。

                    android {
                        <library|application>Variants.all { variant ->
                            /* Disable Generating Build config */
                            // variant.generateBuildConfig.enabled = true // <- Deprecated
                            variant.generateBuildConfigProvider.configure {
                                it.enabled = true // Replacement
                            }
                        }
                    }
                    

                    同样,查找'variant.getJavaCompile()''variant.javaCompile''variant.getMergeResources()''variant.mergeResources' 的用法。如上替换。

                    更多信息Task Configuration Avoidance

                    【讨论】:

                    • 这发生在每个 Android Studio 项目中。与你提到的 sn-ps 无关......
                    • @IgorGanapolsky,它也会发生在终端。尝试执行./gradlew。这与 AS 无关,它在构建工具中。升级/降级到com.android.tools.build:gradle:3.2.0 并执行./gradlew。这不会来。
                    • 在我的项目中没有找到variant.generateBuildConfig.enabled。我仍然收到上述警告
                    • 在我的项目中没有找到variant.generateBuildConfig.enabled。我仍然收到上述警告
                    • @VenomVendor 根据我的问题,这是最有用的答案,你还能帮我解决这个代码 sn-p 吗? codeshare.io/G6ogzk
                    【解决方案26】:

                    从类路径“com.android.tools.build:gradle:3.3.0-alpha13”返回到类路径“com.android.tools.build:gradle:3.2.0”

                    这对我有用

                    【讨论】:

                    • 这只是临时解决方法,因为您不能永远停留在 3.2.0 上,尤其是当最终 3.3.0 已经发布时
                    • 降级 gradle 版本不是一个选项! .
                    【解决方案27】:

                    这只是一个警告,它可能会在 2019 年之前通过插件更新得到修复,所以不用担心。我建议您使用兼容版本的插件和 gradle。

                    您可以在此处查看您的插件版本和 gradle 版本以获得更好的体验和性能。

                    https://developer.android.com/studio/releases/gradle-plugin

                    尝试使用稳定版本以获得流畅且无警告/错误的代码。

                    【讨论】:

                    • 它实际上比警告更隐蔽 - 它会影响代码编辑器并阻止您搜索对类的引用。
                    • 这不仅在 dev/canary 版本中,而且在稳定版本中也会发生,但是,我认为这是一个警告,新的更新将得到修复。
                    • @HarshilShah 不能保证有问题的插件会被更新。开发人员甚至可能永远不会知道这个问题。因此,我们可以做的最好的事情是:stackoverflow.com/a/54213973/304270
                    猜你喜欢
                    • 2019-12-11
                    • 2019-06-15
                    • 2019-11-12
                    • 2019-11-13
                    • 2019-09-02
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多