警告:API 'variant.getJavaCompile()' 已过时并已替换为 'variant.getJavaCompileProvider()'

WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'

同步 Gradle 时,我突然收到此错误:

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 Affected Modules: 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 年底停止工作。关于它是什么以及如何解决它有什么想法吗?

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

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

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

尝试使用稳定版本以获得流畅且 warning/error 免费的代码。

这是构建工具发出的警告,有两个原因。
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

注意下面的片段并更新。

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

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

这对我有用

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

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

它为我删除了这个警告。

升级 KotlinPluginstdLib) 版本 到 1.3.1 解决了我的警告。通过将现有 Kotlin 版本替换为:

来更新整个项目中的 Kotlin 版本
ext.kotlin_version = '1.3.50'

正在将 gradle 更新为 gradle:3.3.0

默认的 'assemble' 任务仅适用于普通变体。也添加测试变体。

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

也评论应用面料

//apply plugin: 'io.fabric'

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

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

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

希望对别人有帮助

就我而言,我不得不注释掉 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

以来的错误

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

apply plugin: 'io.fabric'

错误不会再出现了。

Reference link github

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

android.debug.obsoleteApi=true

降级 Gradle 的版本对我有用:

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

以我为例

build.gradle(Project)

ext.kotlin_version = '1.2.71'

更新为

ext.kotlin_version = '1.3.0'

看起来问题暂时解决了

将 fabric 插件更新为项目级别 Gradle 文件(而非应用程序级别)的最新版本。就我而言,这条线解决了问题

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

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

此问题现已通过更新 Fabric Gradle 版本 1.30.0 解决:

更新发布:2019 年 3 月 19 日

请看这个Link: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'
    }
}

保持你的项目(不是应用程序)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
}

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

com.google.gms:google-services:4.2.0

我通过 运行 找到了这个:

gradlew sync -Pandroid.debug.obsoleteApi=true

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

这解决了我的问题。我需要做的就是降级 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'
    }
}

Migrate your project to androidX.

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

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

Downgrading dependencies may fix your problem this time - but not recommended

我也遇到了同样的问题。又找了一会儿,才知道是因为使用了最新版本的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'
    }
}

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

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

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

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

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

  • variant.javaCompilevariant.javaCompileProvider

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

将 protobuf-gradle-plugin 升级到版本 0.8.10 解决了我的问题。用

替换现有的 protobuf
classpath 'gradle.plugin.com.google.protobuf:protobuf-gradle-plugin:0.8.10'

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

Analyze > "Run Inspection By Name"

这应该够了。另一种选择是 运行 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]

...

升级项目级别的 google 服务 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
}

我有同样的问题,它通过在 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}"

就我而言,我遵循了 。 摘要,在 gradle 应用级别:更改此:

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

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