无法使用Android Studio 4.2将Gradle与Firebase Crashlytic 2.6.0同步



项目级构建.gradle

buildscript {
addRepos(repositories)
dependencies {
classpath 'com.google.gms:google-services:4.3.5'
// Crashlytic
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.0'
}
}

应用程序级构建.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
dependencies {
// Crashlytic
implementation 'com.google.firebase:firebase-crashlytics:18.0.0'
}

使用gradle 4.3.5和Firebase crashlytic 2.6.0我的应用程序停止编译,出现以下的错误

class org.gradle.api.internal.file.DefaultFilePropertyFactory$DefaultDirectoryVar$2 cannot be cast to class org.gradle.api.file.Directory (org.gradle.api.internal.file.DefaultFilePropertyFactory$DefaultDirectoryVar$2 and org.gradle.api.file.Directory are in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @68be2bc2)
class org.gradle.api.internal.file.DefaultFilePropertyFactory$DefaultDirectoryVar$2 cannot be cast to class org.gradle.api.file.Directory (org.gradle.api.internal.file.DefaultFilePropertyFactory$DefaultDirectoryVar$2 and org.gradle.api.file.Directory are in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @68be2bc2)
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)
Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.
In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

但如果我将Firebase crashlytic版本更改为2.3.0,一切都会正常工作

你们知道为什么会这样吗?

更新的答案:

编译问题的原因是Gradle和Crashlytics Gradle插件的版本不兼容。

如上所述,从Crashlytics Gradle插件2.5.0:版本开始

CrashlyticsGradle插件与Gradle v5.6.4+和Android Gradle兼容插件v3.4.2+.支持以前的Gradle和Android Gradle插件版本已被删除。

因此,解决方案是使用最新的Gradlefirebase-crashlytics-gradle版本。感谢@Mher在这里介绍了兼容的最新版本。按照他的回答更新版本。不要忘记将应用程序级build.gradle中的compileOptions更改为:

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

警告:我下面的旧答案是一个解决办法,可以为那些还没有准备好更新Gradle版本的人修复Gradle和Crashlytics的兼容性。正确的解决方案是更新Gradle版本。在下面的旧答案中,提到的firebase-crashlytics-gradle:2.4.1对我来说是有缺陷的,它无法将映射文件上传到Firebase控制台,从而使崩溃报告失效。因此,请尝试遵循以上更新的答案,而不是降级Crashlytics Gradle版本。

世界卫生组织旧答案无法更新等级版本:

我遇到了完全相同的问题。似乎最新的crashlytics gradle插件与某些内容不兼容。使用crashlytics gradle插件的较低版本有所帮助。代替firebase-crashlytics-gradle:2.6.0尝试使用此版本:

classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1'

这对我很管用……如果这对你不管用,你也许可以尝试更低的版本。版本列表可以在这里找到:

https://firebase.google.com/support/release-notes/android#crashlytics_gradle_plugin_v2-0-0

当您搜索";Crashlytics Gradle插件版本";,你可以看到Crashlytics Gradle插件的所有发布版本。

我还不得不将应用程序级build.gradle中的compileOptions更改为:

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

当目标和源兼容性未设置为1_8时,项目已编译,但在尝试运行应用程序时崩溃:

--------- beginning of crash
2021-06-09 17:22:28.765 29519-29519/com.resmed.myair.cpl E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.resmed.myair.cpl, PID: 29519
java.lang.BootstrapMethodError: Exception from call site #45 bootstrap method
at com.google.firebase.components.ComponentDiscovery.discoverLazy(ComponentDiscovery.java:112)
at com.google.firebase.FirebaseApp.<init>(FirebaseApp.java:418)
at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:299)
at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:267)
at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:252)
at com.google.firebase.provider.FirebaseInitProvider.onCreate(FirebaseInitProvider.java:51)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1917)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1892)
at com.google.firebase.provider.FirebaseInitProvider.attachInfo(FirebaseInitProvider.java:45)
at android.app.ActivityThread.installProvider(ActivityThread.java:6239)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5805)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5722)
at android.app.ActivityThread.-wrap1(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: java.lang.NoClassDefFoundError: Invalid descriptor: minimize.
at com.google.firebase.components.ComponentDiscovery.discoverLazy(ComponentDiscovery.java:112) 
at com.google.firebase.FirebaseApp.<init>(FirebaseApp.java:418) 
at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:299) 
at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:267) 
at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:252) 
at com.google.firebase.provider.FirebaseInitProvider.onCreate(FirebaseInitProvider.java:51) 
at android.content.ContentProvider.attachInfo(ContentProvider.java:1917) 
at android.content.ContentProvider.attachInfo(ContentProvider.java:1892) 
at com.google.firebase.provider.FirebaseInitProvider.attachInfo(FirebaseInitProvider.java:45) 
at android.app.ActivityThread.installProvider(ActivityThread.java:6239) 
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5805) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5722) 
at android.app.ActivityThread.-wrap1(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6494)

在我的情况下是

classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1'

解决了错误,但crashlytics没有将错误发送到服务器。

我将\android\build.gradle中的版本更改为

classpath 'com.android.tools.build:gradle:4.2.0'
classpath 'com.google.gms:google-services:4.3.10'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'

以及在\android\gradle\wrapper\gradle-wapper.properties中

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

现在一切都很好。

我不得不从:切换

classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'

classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.0'

然后就成功了。似乎有些新版本的库不一定与gradle兼容。

只需尝试降低几个版本并重新构建即可。

包括:

implementation 'com.google.firebase:firebase-crashlytics' 
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.0'

在您的Gradle文件中

最新更新