为啥我收到 AbstractDynamicObject$CustomMessageMissingMethodException 错误?

Posted

技术标签:

【中文标题】为啥我收到 AbstractDynamicObject$CustomMessageMissingMethodException 错误?【英文标题】:Why am I getting AbstractDynamicObject$CustomMessageMissingMethodException error?为什么我收到 AbstractDynamicObject$CustomMessageMissingMethodException 错误? 【发布时间】:2021-08-02 08:53:56 【问题描述】:

我刚刚开始了一个新项目,正在尝试连接到 Firebase。

当我尝试构建我的项目时,我得到了错误:

无法解析 android 应用模块的 Gradle 配置

所以我查看了我的构建,它告诉我 jCenter() 已被弃用,我应该删除它。当我删除它时,一切正常。但是,当我尝试连接到 Firebase 时出现错误:

AbstractDynamicObject$CustomMessageMissingMethodException。

可能是什么原因造成的?

完整的堆栈跟踪:

    Caused by: java.lang.RuntimeException: com.android.build.gradle.internal.crash.ExternalApiUsageException: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method setVariantDir() for arguments [debug] on task ':app:processDebugGoogleServices' of type com.google.gms.googleservices.GoogleServicesTask.
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:71)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:54)
    at com.android.build.gradle.internal.profile.AnalyticsResourceManager.recordBlockAtConfiguration(AnalyticsResourceManager.kt:206)
    at com.android.build.gradle.internal.profile.AnalyticsConfiguratorService.recordBlock(AnalyticsConfiguratorService.kt:85)
    at com.android.build.gradle.internal.plugins.BasePlugin.lambda$createTasks$9(BasePlugin.java:582)
    at com.android.build.gradle.internal.crash.CrashReporting$afterEvaluate$1.execute(crash_reporting.kt:37)
    at com.android.build.gradle.internal.crash.CrashReporting$afterEvaluate$1.execute(crash_reporting.kt)

【问题讨论】:

请提供minimal reproducible example。 【参考方案1】:

我来到这里是因为我遇到了同样的错误。幸运的是,当它发生时我正在更新依赖项并将其缩小到:

classpath 'com.google.gms:google-services:4.3.6'

改成

classpath 'com.google.gms:google-services:4.3.5'

错误对我来说消失了。希望你也一样

这里是关于我的依赖项的更多信息。

在 2021 年 4 月 28 日运行 Android Studio 4.2 版本

repositories 
        google()
        mavenCentral()
        maven  url 'https://plugins.gradle.org/m2/'
    
    dependencies 
        classpath 'com.android.tools.build:gradle:4.2.0'
        classpath 'com.google.gms:google-services:4.3.5'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.0'
        classpath 'com.google.firebase:perf-plugin:1.4.0'

Gradle 插件 4.2.0 Gradle 7.0.1

//Firebase
    implementation 'com.google.firebase:firebase-ads:20.1.0'
    implementation 'com.google.firebase:firebase-core:19.0.0'
    implementation 'com.google.firebase:firebase-crash:16.2.1'
    implementation 'com.google.firebase:firebase-messaging:22.0.0'
    implementation 'com.firebase:firebase-jobdispatcher:0.8.5'
    implementation 'com.google.firebase:firebase-auth:21.0.0'
    implementation 'com.google.firebase:firebase-firestore:23.0.0'

【讨论】:

哇,几分钟的事。同样在这里,将范围缩小到那个库。 这有助于我对现有项目所做的唯一一件事就是更新依赖项并发生错误。便于追踪 你可以在这里关注问题:github.com/google/play-services-plugins/issues/176 和flutter一样,可以把classpath 'com.google.gms:google-services:+'改成classpath 'com.google.gms:google-services:4.3.5' 问题已解决,Could not find setVariantDir after 4.3.6 #176。您可以使用classpath 'com.google.gms:google-services:4.3.8' 或坚持classpath 'com.google.gms:google-services:4.3.5'【参考方案2】:

更新:谷歌刚刚修复了4.3.8版本中的问题(Release Notes)

适用于 Android 的 google-services 插件的更新版本 (v4.3.8) 现已推出。如需更多信息,请参阅Firebase Android SDK Release Notes


错误来自类路径'com.google.gms:google-services:4.3.6'

最简单的解决方案:

返回版本4.3.5

dependencies 
        classpath 'com.google.gms:google-services:4.3.5'

而不是4.3.6

dependencies 
        classpath 'com.google.gms:google-services:4.3.6'

事实上,版本4.3.6 是造成这个错误的原因。最简单的 方法是回到以前的版本,直到它被修复

【讨论】:

【参考方案3】:

引起:java.lang.RuntimeException: com.android.build.gradle.internal.crash.ExternalApiUsageException: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: 找不到方法 setVariantDir()

修复错误

您应该使用可能的最新版本。

dependencies 
       
        classpath 'com.google.gms:google-services:4.3.8' 

    

【讨论】:

【参考方案4】:

除了 RRiven 修复之外, 在 RRiven 修复后,我开始收到 id 为“maven”的错误插件。

我通过将 gradle 版本从文件 -> 项目结构 -> 项目 -> gradle 版本降级到 6.9 来修复它

【讨论】:

【参考方案5】:

在 build.gradle(Project) 中设置代码

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

classpath 'com.google.gms:google-services:4.3.5'

在 gradle-wrapper 中设置行

distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip

【讨论】:

【参考方案6】:

最好的方法。谷歌已经解决了。

    classpath 'com.google.gms:google-services:4.3.8'

立即转到最新版本的 4.3.8

https://developers.google.com/android/guides/releases https://firebase.google.com/support/release-notes/android#google-services_plugin_v4-3-8

【讨论】:

firebase.google.com/support/release-notes/…

以上是关于为啥我收到 AbstractDynamicObject$CustomMessageMissingMethodException 错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我收到 NullPointerException 错误

为啥我收到 AuthenticationCredentialsNotFoundException?

为啥我收到的 jwt 格式错误?

为啥我收到“无法解析 NSPredicate”错误

为啥我收到 AbstractDynamicObject$CustomMessageMissingMethodException 错误?

无效的字典 0 )。为啥我收到此错误?