警告:API'variant.getJavaCompile()'已过时,已被'variant.getJavaCompileProvider()'取代


199

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

警告:API'variant.getJavaCompile()'已过时,已被'variant.getJavaCompileProvider()'取代。它将在2019年底删除。有关更多信息,请参见https://d.android.com/r/tools/task-configuration-avoidance 受影响的模块:应用

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


就像轻微的挑剔一样,警告不是错误。即使发出警告,您的代码也应以相同的方式编译,而错误将导致构建失败。只是需要提前通知,当前的操作方式将来可能无法使用,并且可能会通过插件更新来解决。您是否还花时间阅读错误中链接的页面
Michael Dodd

2
我个人的感觉是,它是由尚未更新为使用新的Gradle API的插件引起的,该插件应能及时修复。
Michael Dodd



Answers:


81

此问题现已通过更新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'
    }
}

2
这也是正确的答案,是解决面临问题的简便方法。
M.Noman '19

5
我现在有classpath 'io.fabric.tools:gradle:1.29.0'。我该怎么办?
Faizan Mubasher

7
@FaizanMubasher尝试将您的google服务降级到4.2
无限循环

4
@InfiniteLoops建议降级到4.2似乎可行。
HondaGuy

1
解决了将Fabric升级到1.31.0并将Google Services降级到4.2.0的问题
Mukeshkumar S

94

更新到3.3.0后我会遇到此问题

如果您没有执行gradle文件中的错误状态,则是某些插件仍未更新为较新的API导致了此问题。要确定是哪个插件,请执行以下操作(如3.3.0公告的“使用过时的API时提供更好的调试信息”中所述):

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

希望对别人有帮助


4
我认为这是最通用,最有用的答案。就我而言,由于使用Groovy-Android插件(用于Spock测试)而发出此警告。
AutonomousApps

2
这是正确的答案。谁支持gradle版本更新?
Pier Betos

这对我也有用,在这个问题上有什么新消息吗?同时,认为我们无能为力,对吗?
Billyjoker

1
真的很有帮助。就我而言,这是Hugo插件。
AlvaroSantisteban '19

6
添加后android.debug.obsoleteApi=true,要阅读记录的详细信息:转到底部的“构建”选项卡,并在“构建输出”窗口内,单击“切换视图”。当您单击漂亮的颜色时,将其滚动到顶部显示的位置WARNING: API 'variant.getAssemble()' is obsolete。然后在它下面,它显示REASON: Called from: ...就我而言,这是由于medium.com/@xabaras / ...
某处某人

62

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

com.google.gms:google-services:4.2.0

我通过运行找到了它:

gradlew sync -Pandroid.debug.obsoleteApi=true

在终端。在Android Studio中转到视图->工具窗口->终端。


在Ubuntu中,无法运行此命令,该如何在ubuntu中执行。要求安装软件包,但我仍无法运行该软件包。还有其他办法吗?
Vasudev Vyas

3
我刚刚将我的gms Google服务更改为4.2,警告消失了,谢谢。
无限循环

2
@VasudevVyas(如果在android Studio中),只需./在命令之前添加,即终端是否设置为android项目的根目录。否则,您将必须cd到项目的根目录。
拉库

3
为什么我应该降级google-services依赖关系。这不是解决方案。
Ahamadullah Saikat

4
@AhamadullahSaikat可能会在将来的版本中修复。然后,您可以再次对其进行升级。这是一种解决方法,直到由Google修复。
努曼·卡拉斯兰

34

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

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

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

尝试使用稳定版本来获得平滑且没有警告/错误的代码。


24
实际上,它比警告更隐蔽-它影响代码编辑器并阻止您搜索对类的引用。
IgorGanapolsky '18 October

这不仅是在dev / canary版本中,还是在稳定的情况下发生,但是,我认为这是一个警告,即更新的更新将被修复。
马隆·洛佩斯

1
@HarshilShah无法保证将有问题的插件更新。开发人员甚至可能永远都不知道这个问题。因此,我们能做的最好的是:stackoverflow.com/a/54213973/304270
Ewoks

25

我也面临同样的问题。经过一段时间的搜索,我发现警告是由于使用最新版本的google-services插件(版本4.3.0)引起的。顺便说一下,我在我的应用程序中将此插件用于Firebase功能。我所做的就是google-services在build.gradle(Project)级别文件中的buildscript中降级我的插件,如下所示:

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

1
我做了这个解决方案,错误消失了。谢谢您
韦斯利

1
加工!谢谢
Сергей

3
我已升级到4.3.2,但未收到此警告。
tagy22

10

从以下位置更改您的Google服务版本build.gradle

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

1
我在4.3.0上,问题仍然存在。
韦斯利

@wesleyfranks同样。但是,如果我切换到4.2.0,我将不再有问题...
diAz

我使用的是4.3.1,问题仍然存在
pvalle,

8

这是构建工具发出的警告,有两个原因。
1.插件之一是依靠Task而不是TaskProvider,我们无能为力。
2.您已经配置了任务的用法,因为它支持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'。如上替换。

有关避免任务配置的更多信息


1
这在每个Android Studio项目中都会发生。与您提到的摘要
无关

2
@IgorGanapolsky,它也会在终端中发生。尝试执行./gradlew。这与AS无关,它在构建工具中。升级/降级com.android.tools.build:gradle:3.2.0并执行./gradlew。这不会来。
VenomVendor

variant.generateBuildConfig.enabled在我的项目中找不到。我仍然收到上述警告
kbsbng

variant.generateBuildConfig.enabled在我的项目中找不到。我仍然收到上述警告
kbsbng

@VenomVendor根据我的问题,这是最有用的答案,您仍然可以使用此代码段吗? codeshare.io/G6ogzk
Raghav Satyadev


5

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

2)更新这些不赞成使用的功能。

  • variant.javaCompilevariant.javaCompileProvider

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


5

在我的情况下,将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
MaylorTaylor上,

4

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

这对我有用


6
那只是暂时性的解决方法,因为您无法永远停留在3.2.0上,尤其是当最终3.3.0已经发布时
Ewoks

降级gradle版本不是一个选择!。
Jorgesys

4

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

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

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

3

就我而言

build.gradle(Project)

原为

ext.kotlin_version = '1.2.71'

更新为

ext.kotlin_version = '1.3.0'

看起来问题现在已经消失了


2

就我而言,我不得不注释掉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起是一个错误


2
对我来说,这是因为我正在使用oss-licenses-plugin
Mikhail

2

gradle更新到gradle:3.3.0

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

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

也评论适用面料

//apply plugin: 'io.fabric'

1
什么是“正常”变体?android.testVariants.all {...}代码的作用是什么(目的是什么)?引用的文字来自哪里?你能更新答案吗?
Ewoks

我已经改变了清单路径chrashlytics crashlytics { manifestPath = "$buildDir/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml" }
ANRI

1
@Ewoks普通变体是构建变体(调试/发行版),它们使用一组特定的规则。您可以设置许多不同的变体(风味)。此外,您可以创建针对特定构建变体的测试源集。
克里斯特·莫斯科夫

我知道味道,但不确定在这里是否适用以及它如何关联。这就是为什么我问您是否可以通过澄清引用的来源并修复格式(猜测您将代码的格式与注释混合在一起)来更新答案
Ewoks

1
根本无法保证面料是问题的根源。实际上,通过这种“解决方案”,我们不知道问题出在哪里。此外,没有任何解释说明为什么要对testVariants做任何事情,并且它们之间有何关系?!?这就是为什么@KrsteMoskov的原始答案具有误导性,并且如果可以解决所有问题的原因,则仅适用于特定用例。为帮助您“上船”,我正确设置了答案格式,并保留了内容,如您所愿,其他人可以决定这对他们是否有用
Ewoks

2

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

android.debug.obsoleteApi=true

在哪里构建,升级或应用升级
Jithish PN

只需在您的项目中搜索gradle.properties文件
Hamed safari


2

将您的项目迁移到androidX。

依赖项已升级到androidX。因此,如果您想使用androidX内容,请将您的项目迁移到androidX。

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

降级依赖关系可能会解决您的问题-但不建议


1
我有AndroidX,但我仍然收到消息。
Jorgesys '19

1

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

0

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

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

它为我删除了此警告。


是的,当我更新版本时,这些警告都消失了
Sergio KS

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
}

0

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


0

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

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

0

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

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

通过名称android结果运行检查

那应该足够了。另一个选择是使用以下命令运行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]

...

0

在项目级别升级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
}

0

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

0

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

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

variant.outputs.all { output ->
variant.getAssembleProvider().configure() {
    it.doLast { 
        ....
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.