RegisterResGeneratingTask已经过时,请使用registerGeneratedFolders(FileCollection)。

160

使用新版本的Android Studio和3.0.0 Gradle插件。
构建时出现了一些警告:

registerResGeneratingTask is deprecated, use
registerGeneratedFolders(FileCollection)

1
你能展示一下你的Gradle任务吗?你有APK分割吗? - itzhar
请展示你的 Gradle。 - Jéwôm'
你看过这篇文章吗?它描述了一个已知问题和解决方法。(在谷歌上的第一条搜索结果。) - ashleedawg
@ashleedawg 我应该做什么?更新Android Studio?还是一些库? - Valentin Baryshev
4
@ashleedawg 你提到的解决方法,如果我没有误解的话,是保持使用旧版本的Gradle插件。这不是长期处理弃用警告的方式。短期内可以忽略警告,但不需要立即采取行动。请注意,本句中划线部分应为“记住”,而非“忽略”。 - Alex Cohn
10个回答

47
据我所知,作为类路径依赖项添加的插件会引起问题。即Firebase遇到了这个问题。SpoonFlutter也是如此。通过这个Google搜索可以发现许多GitHub存储库都有同样的问题,并且它们共同之处在于它是Gradle插件。Fabric也可能是原因,正如Mate所提到的。
据我所知,该问题源于一个/多个Gradle插件。如果您的项目是应用程序而不是Gradle插件,则可能不适用于您的Gradle代码触发此问题。

Alex Cohn在评论中提到,弃用是一种警告。在这种情况下,它意味着这是一个将来会被删除的功能。所以现在假设它是一个插件(而不是由你自己制作的),你可以忽略它。到它被删除的时候,大多数/全部主要插件应该会更新以修复它。

再次强调,这只是一个警告,不是错误。如果您无法解决问题,可以继续运行它并忽略它。禁用例如Fabric*插件是过度反应,因为它仍然可以使用。

我自己不使用Fabric,而且Fabric不是开源的,所以我不知道开发人员是否已经修复了它

TL;DR:Gradle插件是原因。这是一个警告(不是错误),因此删除导致问题的插件是过度反应。如果您无法解决它,请将其保留,只要目前它只是被弃用而不是被删除


如果您使用Firebase,则有一个特定的解决方案,该解决方案也在迁移指南中提到(稍后在本帖子中链接); 排除guava模块。
classpath ('com.google.firebase:firebase-plugins:1.1.0') {
    exclude group: 'com.google.guava', module: 'guava-jdk5'
}

这个问题本身很难检测。据我所知,我检查的所有插件中没有单一的问题会导致它(并在此答案中链接)。如果你编写了某些引起该问题的代码(并且可以修复它;添加第三方 gradle 插件不会引起它),则有一些方法可以尝试修复它。
就实际原因而言,从我所知道的情况来看,通过更新 Gradle 文件来解决它(虽然在 Spoon 库中,它是通过更改与 TestVariant 相关的一行来解决的),遵循 Gradle 插件 3.0.0 迁移指南中的主题即可解决。
整个过程都被开发者文档所覆盖,但以下是我认为基于已经出现问题的项目所做的拉取请求相关的内容:
除了更新 Gradle 版本和插件之外,还需要在 repositories 下添加 google() repo。
compile 现在是 implementation 或 api,但推荐使用 implementation。 provided 是 compileOnly,apk 是 runtimeOnly
androidTestCompile 变成了 androidTestImplementation,testCompile -> testImplementation
如果使用 flavors,则必须使用 flavor dimensions(由文档涵盖)。

对于构建类型,你需要包含备选项以防库没有该构建类型。这些定义在android块下的profile块中。

如果还没有完成,首先要定义gradle插件。如果您没有任何其他类路径依赖关系,这不是问题。但是如果您有,请确保先定义gradle插件。

如果您使用了testVariants,请确保您不在类中调用testedVariant。这似乎是Spoon库的原因。

据我所知,这些是为解决问题所做的一些更改。


但是我无法调试代码行,它显示错误。 - Abhinav Gupta
失败:构建异常。
  • 出了什么问题: 执行任务':app:compileDebugJavaWithJavac'失败。
    编译失败;请参阅编译器错误输出以获取详细信息。
  • 尝试: 运行带有--stacktrace选项以获取堆栈跟踪。运行带有--info或--debug选项以获取更多日志输出。运行带有--scan选项以获取完整的见解。
  • 获取更多帮助:https://help.gradle.org
4秒内构建失败 29个可操作任务:2个已执行,27个最新的
- Abhinav Gupta
@AbhinavGupta 那不是堆栈跟踪。那只是一条消息告诉你出了问题。 - Zoe stands with Ukraine
但是我无法解决这个问题,因此我无法在我的设备上安装apk。 - Abhinav Gupta
@AbhinavGupta,所以请在Stack Overflow上提出一个新问题。 - Zoe stands with Ukraine
看起来这个问题很快就会被修复... https://github.com/fossasia/open-event-orga-app/pull/1591 - Simpler

18

我正在使用版本为4.2.0的Play服务Gradle插件com.google.gms:google-services

我们可以在源代码中看到: enter image description here

所以,这就是导致我的警告的原因,并且在插件得到修复之前无法消除。该问题位于此处

正如@Zoe提到的,这可能也来自其他Gradle插件。


18
问题已经在Google服务插件版本4.3.0中得到解决(通过此提交解决)。
buildscript {
    dependencies {
        // Change version to 4.3.0
        classpath 'com.google.gms:google-services:4.3.0'
    }
}

在这里找到此处


10

它到底是什么?值得升级吗?会引起任何问题(更新前和更新后)吗?我们使用的是v2.6.8,现在他们有v2.9.3,但我不知道如何在更改日志中查看它。他们在那里有不同的版本(例如“2018年5月24日1.4.2”)。 - android developer
@androiddeveloper 你把Fabric Gradle插件和Crashlytics搞混了。请查看左侧菜单中的不同组件。 - Eugen Pechanec

4

在我的情况下,这是由于Android支持库版本不匹配引起的。我将所有模块更新到了最新版本(28.0.0),问题得以解决。


1
我收到了这个错误消息和很多类似的消息:
x版本已经过时,请使用y版本,它将在2019年被删除。
突然间,我的所有项目都开始出现相同的错误消息。
Android Studio对我的杀毒软件程序发出了警告。我尝试配置它,但没有成功。
最后,我从系统中卸载了QuickHeal杀毒软件,现在一切都好了。

1
安装了 Fabric 后,这个问题对我来说得到了解决。
import com.crashlytics.android.Crashlytics;
import io.fabric.sdk.android.Fabric;

public class MyApplication extends Application {


    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(this, new Crashlytics());

    }
}

build.gradle

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

dependencies {
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9'
}

repositories {
    mavenCentral()
    maven { url 'https://maven.fabric.io/public' }
}

0

所有其他答案都是关于第三方组件的问题。

以下是如何直接更新使用registerResGeneratingTask的项目:

之前:

variant.registerResGeneratingTask generateIcon, ICON_DIR

之后:

variant.mergeResourcesProvider.get().dependsOn generateIcon
variant.registerGeneratedResFolders files(ICON_DIR)

0

项目级别的 Build.Gradle

使用以下版本的 Google 服务依赖。

dependencies {
    classpath 'com.android.tools.build:gradle:3.4.2'
    classpath 'com.google.gms:google-services:4.3.0'
    classpath ('com.google.firebase:firebase-plugins:1.1.0') {
        exclude group: 'com.google.guava', module: 'guava-jdk5'
    }
}

问题已解决。


-2

对于我来说,当我关闭了 Fabric Gradle 插件时,这个警告就消失了,请检查您是否使用了 Fabric 或其他负责此警告的插件。


已移除面料,但仍出现此警告。 - Valentin Baryshev
我没有使用 Fabric,但是我收到了这个消息! - thiagolr
3
禁用插件io.fabric后,将这些警告中的8个减少到了4个。因此似乎存在多个来源。 - Mario Huizinga
4
com.google.gms:google-services 4.0.14.0.2都会导致出现此警告通知。 - Martin Zeitler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接