任务:app:uploadCrashlyticsMappingFileRelease 失败,预期文件集合应包含一个文件,但实际上它不包含任何文件。

44

我已经按照建议实施了Firebase crashlytics。我已将其放置在我的应用级别的release构建变体中:

firebaseCrashlytics
  {
    mappingFileUploadEnabled true
  }

但是当我开始构建已签名的apk时,总是会出现以下错误:

任务:app:uploadCrashlyticsMappingFileRelease 失败

失败:构建发生异常。

  • 出错原因: 执行任务':app:uploadCrashlyticsMappingFileRelease'失败。

预期文件集应该恰好包含一个文件,但它没有包含任何文件。

如果我将 mappingFileUploadEnabled设置为false,则发布版apk可以成功构建。我已经搜索了很多资料,但找不到解决方法。有人能帮忙吗?


这个问题解决了吗?我也遇到了同样的问题。 - Nikhil Walvekar
我也遇到了同样的问题。你找到解决方案了吗?除了将mappingFileUploadEnabled设置为false之外。 - Mithu Roy
在我的情况下,在“编辑配置”中,我取消了“允许并行运行”的选项,然后它就起作用了。 - Tejas Dhawale
有没有解决方案? - Arbaz.in
这个问题有任何更新吗? - lets start coding
显示剩余3条评论
11个回答

54

错误: "Crashlytics 无法找到 Google Services 插件任务:processReleaseGoogleServices。请确保在 com.google.firebase.crashlytics 之前应用了 com.google.gms.google-services。如果您没有使用 Google Services 插件,则必须明确声明 Crashlytics 上传任务的 googleServicesResourceRoot 输入。"

我在 build.gradle 中有类似以下的内容:

apply plugin: 'com.google.firebase.crashlytics'
apply plugin: 'com.google.gms.google-services'

将其更改为以下内容,就可以正常工作:

apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'

28

今天我也遇到了同样的问题。这是发生的原因:

如果设置了minify true,将在构建时应用混淆并创建mapping.txt。

如果设置为minify false,则不会在构建时混淆,并且不会创建mapping.txt。

如果在minify为false状态下设置mappingFileUploadEnabled为true,则Firebase SDK将尝试上传mapping.txt到Firebase,即使在构建时没有创建mapping.txt。 结果就会出现错误。

因此,如果将minify设置为false,则必须将mappingFileUploadEnabled设置为false;如果将minify设置为true,则需要设置mappingFileUploadEnabled为true或false(当mappingFileUploadEnabled为false时,在Firebase上的崩溃日志会被混淆,可能显示不出来)。

  • 提示

https://firebase.google.com/docs/crashlytics/upgrade-sdk?platform=android#firebase-crashlytics-sdk_7

https://developer.android.com/studio/build/shrink-code#enable


1
当minify为true时,似乎没有必要将mappingFileUploadEnabled设置为true。(https://firebase.google.com/docs/crashlytics/upgrade-sdk?platform=android&%3Bhl=da&hl=ro#firebase-crashlytics-sdk_7) - David
对我来说,只有在生成签名的APK时才会失败,所以我不得不完全禁用上传。否则它会显示“Socket closed”和“Task:app:uploadCrashlyticsMappingFileRelease FAILED”,我不知道为什么。这只是一个临时解决方案,我不确定为什么套接字会关闭。这是在Flutter应用程序上。有趣的部分是,在重新启动之后它会工作,直到我决定再次创建调试构建。 - Martin Braun
minifyEnabled false && shrinkResources false 对我来说已解决 - Mohamed Slama

12

在我的情况下,我收到这个错误是因为我没有连接到互联网。通过连接到互联网,我的Flutter应用程序的构建版本完美地解决了这个问题。


2
是的,我也是。第一次尝试构建APK时,我的互联网连接速度很慢。所以在第二次尝试后,它就正常工作了。 - Randika Vishman

10

我已经通过将以下行从页面底部移至顶部来解决了此问题在build.gradle中。

之前的设置:

apply plugin: 'com.google.gms.google-services'

新设置:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'

问题已经解决。


好的建议。不仅应该将页面底部到顶部的代码移动,而且'com.google.gms.google-services'应该放在'com.google.firebase.crashlytics'之上。 - tendai

8

只需按以下方式更改crashlytics的顺序,并应用插件:

// Put Google Service
apply plugin: 'com.google.gms.google-services'
// After that the Firebase Crashlytics plugin.
apply plugin: 'com.google.firebase.crashlytics'

2
恭喜,实际上改变顺序解决了这个特定的问题。在任务':app:uploadCrashlyticsMappingFileRelease'(类型为'UploadMappingFileTask')的配置中发现了一个问题。>属性'googleServicesResourceRoot'没有指定任何值。 - AllanRibas

3

降低以下版本

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

升级至2.6.0版本解决了我的问题。


2
在我的情况下,根本没有添加com.google.gms:google-services。该项目使用Flutter开发,而Flutter Firebase文档中并未提及此内容。
请在android/build.gradle中添加以下内容(请在互联网上检查最新版本):
classpath 'com.google.gms:google-services:4.3.10'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'

将以下内容添加到 android/app/build.gradle 文件的最后

apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'

出于某些原因,即使您已经使用flutterfire生成了lib/firebase_options.dart,插件仍然需要您从Firebase获取的google-services.json文件。将该文件粘贴到android/app/目录中。然后进行发布版本构建。


请将以下代码放在您的 build.gradle 文件顶部:apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.firebase.crashlytics'否则可能会出现错误。 - icgoogo

1
在你的 build.gradle 文件底部添加以下内容。
apply plugin: 'com.google.gms.google-services'

0

我曾经面临过几次这种情况,而我有一个不同的解决方案。

首先: 您需要打开该项目的Android模块。

Flutter -> Open Android module in Android Studio.

然后进入 Gradle Scripts,找到 gradle.properties(全局属性)并移除这段代码

systemProp.http.proxyHost=
systemProp.https.proxyHost=
systemProp.https.proxyPort=80
systemProp.http.proxyPort=80

0
如果您正在使用GuardSquare的Dexguard解决方案,插件的顺序应该是:
plugins {
    // Google Services Plugin
    id 'com.google.gms.google-services'
    // Firebase Crashlytics Plugin.
    id 'com.google.firebase.crashlytics'
    // Dexguard Plugin
    id 'dexguard'
}

这样,您的映射文件上传过程将会成功。


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