警告:API 'variant.getJavaCompile()' 已过时,已替换为 'variant.getJavaCompileProvider()'
Posted
技术标签:
【中文标题】警告:API \'variant.getJavaCompile()\' 已过时,已替换为 \'variant.getJavaCompileProvider()\'【英文标题】:WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'警告:API 'variant.getJavaCompile()' 已过时,已替换为 'variant.getJavaCompileProvider()' 【发布时间】:2019-02-27 10:00:32 【问题描述】:同步 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 年底停止工作。关于它是什么以及如何解决它的任何想法?
【问题讨论】:
就像一个轻微的挑剔一样,警告不是错误。即使有警告,您的代码也应该以相同的方式编译,而错误会导致您的构建失败。只是提前通知,当前的做事方式将来可能无法正常工作,并且可能会通过插件更新来修复。你也抽时间read the page linked in the error吗? 我个人感觉是插件还没更新到使用新的Gradle API,应该及时修复。 看看这个答案。 ***.com/questions/52412023/… 试试这个。 ***.com/a/55193824/3806413 请看***.com/questions/52412023/… 【参考方案1】:更新到 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/…【参考方案2】:
此问题现已通过更新 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 已解决【参考方案3】:
就我而言,它是由 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 这可能会在未来的版本中得到修复。然后你可以再次升级它。这是一种解决方法,直到它被谷歌修复。【参考方案4】:
这只是一个警告,它可能会在 2019 年之前通过插件更新得到修复,所以不用担心。我建议您使用兼容版本的插件和 gradle。
您可以在此处查看您的插件版本和 gradle 版本以获得更好的体验和性能。
https://developer.android.com/studio/releases/gradle-plugin
尝试使用稳定版本以获得流畅且无警告/无错误的代码。
【讨论】:
它实际上比警告更隐蔽 - 它会影响代码编辑器并阻止您搜索对类的引用。 这不仅在 dev/canary 版本中,而且在稳定版本中也会发生,但是,我认为这是一个警告,新的更新将得到修复。 @HarshilShah 不能保证有问题的插件会被更新。开发人员甚至可能永远不会知道这个问题。因此,我们能做的最好的事情是:***.com/a/54213973/304270【参考方案5】:我也遇到了同样的问题。经过一段时间的搜索,我发现警告是由于使用了最新版本的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 后没有出现此警告。【参考方案6】:1) 将android.debug.obsoleteApi=true
添加到您的gradle.properties
。它会告诉你哪些模块受到警告日志的影响。
2) 更新这些已弃用的函数。
variant.javaCompile
到 variant.javaCompileProvider
variant.javaCompile.destinationDir
到
variant.javaCompileProvider.get().destinationDir
【讨论】:
【参考方案7】:从 build.gradle
更改您的 Google 服务版本:
dependencies
classpath 'com.google.gms:google-services:4.2.0'
【讨论】:
我在 4.3.0 上,问题仍然存在。 @wesleyfranks 一样。但是如果我切换到 4.2.0 我就没有问题了...... 我在 4.3.1 上,问题仍然存在【参考方案8】:这是构建工具发出的警告,原因有两个。 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【参考方案9】:
降级 Gradle 版本对我有用:
classpath 'com.android.tools.build:gradle:3.2.0'
【讨论】:
降级绝不是一种选择 这就是我想要的答案。谢谢! 在某些情况下可以降级 当然会。这不费吹灰之力!但是,降级用完多久?【参考方案10】:升级 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
中【参考方案11】:
从类路径“com.android.tools.build:gradle:3.3.0-alpha13”返回到类路径“com.android.tools.build:gradle:3.2.0”
这对我有用
【讨论】:
这只是临时解决方法,因为您不能永远停留在 3.2.0 上,尤其是当最终 3.3.0 已经发布时 降级 gradle 版本不是一个选项! .【参考方案12】:将 gradle 更新为 gradle:3.3.0
默认的“组装”任务仅适用于普通变体。也添加测试变体。
android.testVariants.all variant ->
tasks.getByName('assemble').dependsOn variant.getAssembleProvider()
还评论应用面料
//apply plugin: 'io.fabric'
【讨论】:
什么是“正常”变体?什么是 android.testVariants.all ... 代码(它的目的是什么)?这个引用的文字出自哪里?你能更新答案吗? 我已更改 chrashlyticscrashlytics manifestPath = "$buildDir/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml"
的清单路径
@Ewoks 普通变体是构建变体(调试/发布),它们使用一组特定的规则。您可以设置许多不同的变体(口味)。此外,您可以创建针对目标的测试源集特定的构建变体。
我知道口味,但不确定这是否适用于这里以及它是如何相关的。这就是为什么我问你是否可以通过澄清你引用的来源和修复格式来更新答案(猜你混合了代码格式和注释)
根本无法保证面料是问题的根源。实际上,有了这个“解决方案”,我们不知道问题出在哪里。此外,没有解释为什么要对 testVariants 做任何事情,这有什么关系?!?这就是为什么@KrsteMoskov 的原始答案具有误导性并且仅适用于特定用例(如果它可以解决任何问题)。为了帮助您“参与”,我正确地格式化了您的答案,并在您编写内容时保留了内容,以便其他人可以决定这是否对他们有用【参考方案13】:
将结构插件更新到项目级别 Gradle 文件中的最新版本(不是应用级别)。就我而言,这条线解决了问题
classpath 'io.fabric.tools:gradle:1.25.4'
到
classpath 'io.fabric.tools:gradle:1.29.0'
【讨论】:
【参考方案14】:就我而言
build.gradle(Project)
曾经
ext.kotlin_version = '1.2.71'
更新到
ext.kotlin_version = '1.3.0'
看起来问题已经解决了
【讨论】:
这很奇怪。我更新到 1.4.0 并且它出现了。可能升级后。 :)【参考方案15】:就我而言,我不得不注释掉 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
【参考方案16】:
当插件检测到您正在使用不再受支持的 API 时,它现在可以提供更详细的信息来帮助您确定该 API 的使用位置。要查看附加信息,您需要在项目的 gradle.properties 文件中包含以下内容:
android.debug.obsoleteApi=true
【讨论】:
构建、gradle 或 app.gradle 的位置 在你的项目中搜索 gradle.properties 文件【参考方案17】:如果我从application gradle
中删除这一行:
apply plugin: 'io.fabric'
错误将不再出现。
Reference link github
【讨论】:
请勿这样做,否则 Crashlytics 将停止工作。这只是隐藏问题。【参考方案18】:将您的项目迁移到 androidX。
依赖升级到androidX。所以如果你想使用androidX内容migrate your project to androidX.
使用 Android Studio 3.2 及更高版本,您可以通过从菜单栏中选择 Refactor > Migrate to AndroidX 快速迁移现有项目以使用 AndroidX。
这次降级依赖可能会解决您的问题 - 但不推荐
【讨论】:
我有 AndroidX,但我仍然收到消息。【参考方案19】:这解决了我的问题。我需要做的就是在 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'
【讨论】:
【参考方案20】:这里是临时解决方法,如果您使用的是房间,只需升级到 1.1.0 或更高版本
implementation "android.arch.persistence.room:runtime:1.1.0"
它为我删除了这个警告。
【讨论】:
是的,当我更新版本时,这些警告消失了【参考方案21】:保持项目(不是应用程序)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
【讨论】:
【参考方案22】:这是一个流行的问题。如果您不使用这些方法,则解决方案是更新库。 请更新您的 kotlin 版本,以及您的所有依赖项,如 fabric、protobuf 等。如果您确定已更新所有内容,请尝试询问图书馆的作者。
【讨论】:
【参考方案23】:将 protobuf-gradle-plugin 升级到 0.8.10 版解决了我的问题。将现有的 protobuf 替换为
classpath 'gradle.plugin.com.google.protobuf:protobuf-gradle-plugin:0.8.10'
【讨论】:
【参考方案24】:这主要是由于库已经过时。要手动检查新更新,您应该导航到
分析 >“按名称运行检查”
应该够了。另一种选择是使用
运行 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]
...
【讨论】:
【参考方案25】:在项目级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
【讨论】:
【参考方案26】:我遇到了同样的问题,通过在 build.gradle 文件中定义 kotlin gradle 插件版本解决了。
改变这个
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
到
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50or latest version"
【讨论】:
谢谢!因此,我们还必须更改app\build.gradle
:implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.0"
。然后,我们将收到与信息相同的消息,而不是警告。【参考方案27】:
就我而言,我关注了this。 总结,在 gradle 应用级别:改变这个:
variant.outputs.all output ->
variant.assemble.doLast
....
到
variant.outputs.all output ->
variant.getAssembleProvider().configure()
it.doLast
....
【讨论】:
以上是关于警告:API 'variant.getJavaCompile()' 已过时,已替换为 'variant.getJavaCompileProvider()'的主要内容,如果未能解决你的问题,请参考以下文章
警告:API 'variant.getMergeResources()' 已过时,已替换为 'variant.getMergeResourcesProvider()'
警告:API 'variant.getJavaCompile()' 已过时,已替换为 'variant.getJavaCompileProvider()'