variable . getjavacompile ()'已过时,已被替换为'

突然,当同步Gradle,我得到这个错误:

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

我已经为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年底停止工作。你知道它是什么,如何解决它吗?

147059 次浏览

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

你可以在这里检查你的插件版本和gradle版本,以获得更好的体验和性能。

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

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

这是一个由构建工具发出的警告,有两个原因 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'的用法。如上所述替换。

更多信息请访问任务配置回避

从类路径'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"

它为我消除了这个警告。

在我的案例中,升级芬兰湾的科特林 (插件stdLib)版本到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 fabric

//apply plugin: 'io.fabric'

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

如果你没有按照gradle文件中的错误状态去做,那就是某些插件仍然没有更新到更新的API导致了这个问题。要找出是哪个插件,请执行以下操作(如3.3.0的公告“使用过时API时更好的调试信息”中所述):

  • “android.debug.obsoleteApi = true”添加到您的gradle.properties文件中,该文件将记录更详细的错误
  • 重试并读取日志详细信息。会有“有问题的”插件的痕迹
  • 确认后,试着禁用它,看看问题是否消失了,只是为了确定
  • 进入插件的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以来的bug

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

apply plugin: 'io.fabric'

错误将不再出现。

参考链接github

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

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日

请参阅此链接: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'
}
}

保持你的项目(不是应用程序)构建。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 services 4.3.0引起的。所以我不得不把它改成:

com.google.gms:google-services:4.2.0

我通过跑步发现了这一点:

gradlew sync -Pandroid.debug.obsoleteApi=true

在终端。进入查看->工具窗口->终端在安卓工作室。

这解决了我的问题。我所需要做的就是在build.gradle(项目)级别文件的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'
}
}

将项目迁移到androidX。

依赖被升级到androidX。所以如果你想使用androidX contents 将你的项目迁移到androidX。

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

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

我也面临着同样的问题。在搜索了一段时间后,我发现这个警告是因为使用了最新版本的google-services插件(4.3.0版本)。顺便说一下,我在我的应用程序中使用了这个插件的Firebase功能。 我所做的就是在build.gradle(项目)级别文件的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'
}
}
这是一个很常见的问题。如果不使用这些方法,解决方案是更新库。 请更新你的芬兰湾的科特林版本,和你所有的依赖,如织物protobuf等。如果您确定已经更新了所有内容,请尝试询问库的作者

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

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

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

2)更新这些废弃的功能。

  • variant.javaCompilevariant.javaCompileProvider

  • <李> < p > variant.javaCompile.destinationDirvariant.javaCompileProvider.get().destinationDir < / p > < / >

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

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

这主要是由于过时的图书馆。要手动检查新更新,您应该导航到

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

run inspection by name android result

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


...

升级谷歌服务在项目级别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
}

我有同样的问题,它解决了定义kotlin gradle插件版本在构建。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 {
....
}
}