如何解决CrashlyticsMissingDependencyException错误?

103

我已经使用最新的Crashlytics(Fabric集成)有一段时间了。但最近我遇到了以下崩溃错误,由于缺少依赖项,尽管我没有更改任何关于Crashlytics配置的内容。

有什么想法吗?

02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     |  |
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     |  |
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     |  |
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .   \ |  | /
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .    \    /
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     \  /
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .      \/
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
    install an Android build tool and ask a team member to invite you to this app's organization.
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .      /\
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     /  \
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .    /    \
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .   / |  | \
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     |  |
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     |  |
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .     |  |
02-08 22:18:00.935  18887-18887/? E/Fabric﹕ .
02-08 22:18:00.935  18887-18887/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.android.staging, PID: 18887
    java.lang.RuntimeException: Unable to create application com.example.android.App: io.fabric.sdk.android.services.concurrency.UnmetDependencyException: com.crashlytics.android.CrashlyticsMissingDependencyException:
    This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
    install an Android build tool and ask a team member to invite you to this app's organization.
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4734)
            at android.app.ActivityThread.access$1600(ActivityThread.java:171)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5506)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)

如下面的答案所述,我们正在修复中,但在我们继续解决问题的同时,使用1.14.4版本将可以正常工作。 - Mike Bonnell
我只是尝试了几次卸载和安装Android Studio的Fabrics。AS需要重新启动几次才能恢复正常。 - Robert
请使用此链接 https://docs.fabric.io/android/crashlytics/build-tools.html#disabling-crashlytics-for-debug-builds,了解如何禁用调试版本中的 Crashlytics。 - Shervin Gharib
17个回答

95

在实际安装Fabric/Crashlytics之前,我已添加了以下代码:

debug {
    ext.enableCrashlytics = false
}

在第一次使用 Crashlytics 之前将其删除解决了问题。在第一次运行后,问题不再出现。


2
我在1.20.1和2.5.2@aar版本中遇到了同样的问题。但是我无法在CI上使用此解决方法,因为每次构建工作区都会被重置 :( - Hieu Rocker
1
我正在与Fabric的工程师们一起工作。不同的时区很糟糕,我们已经花了将近两个星期了,但仍然没有解决方案。但是你可以在CI上尝试一个解决方法:./gradlew clean assemble,然后./gradlew assemble,第二个命令生成的apk将正常工作。 - Hieu Rocker
3
@ThuyTrinh发现问题是由于设置了dataBinding = true。Crashlytics已经为此推出了修复方案:https://twittercommunity.com/t/fabric-gradle-plugin-1-21-0-add-support-for-android-databinding-true/57474 - Hieu Rocker
1
今天更新了fabric插件,但出现了这个错误。虽然有解决方法,但在后续运行中并不起作用。因此我必须注释掉这一行才能运行。 - Ernest Poletaev
1
com.crashlytics.sdk.android:crashlytics:2.6.8@aar中对我不起作用。 - Tasneem
显示剩余3条评论

27

我在gradle中将这段代码注释掉了。

apply plugin: 'io.fabric'

需要取消注释

或者如果你没有它,添加它!


21

目前唯一的解决方法,如果您真的需要发布您的应用程序,是将动态版本号更改为静态版本号:

[...]

classpath 'io.fabric.tools:gradle:1.14.4'

[...]

compile('com.crashlytics.sdk.android:crashlytics:2.2.0@aar') {
        transitive = true
}

[...]

编辑:

已发布最新版本的Fabric SDK;您可以通过将此行更改为以下内容来获取它:

classpath 'io.fabric.tools:gradle:1.26.1'

1
以下是可用的版本:https://s3.amazonaws.com/fabric-artifacts/public/io/fabric/tools/gradle/maven-metadata.xml - José Antonio Postigo

14

似乎将插件版本指定为:

classpath 'io.fabric.tools:gradle:1.+' 

拾取1.15.1版本,该版本存在问题。

将主要版本和次要版本指定为之前的1.14似乎是稳定的:

classpath 'io.fabric.tools:gradle:1.14.+'

13

在更新插件后,我遇到了同样的问题。 要解决这个问题,需要从AndroidManifest.xml中移除:

<meta-data
    android:name="com.crashlytics.ApiKey"
    android:value="API_SECRET_KEY" />

并在 fabric.properties 文件中添加:

apiSecret=API_SECRET_KEY
apiKey=YOUR_SECRET_KEY

更新:

现在,您需要使用:

  <meta-data
      android:name="io.fabric.ApiKey"
      android:value="API_KEY" />

1
他们的集成指南似乎已经过时了。似乎不再需要fabric.properties文件,而是在AM文件中添加<meta-data android:name="io.fabric.ApiKey" android:value="YOUR_API_KEY"/>。名称已从“com.crashlytics.ApiKey”更改为“io.fabric.ApiKey”。 - Thuy Trinh
1
是的,你说得对。这很重要。我更新了我的帖子。谢谢。 - Sergei K

13

如果您正在调试过程中使用disable功能,如下所示

 Crashlytics crashlyticsKit = new Crashlytics.Builder()
            .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
            .build();
    Fabric.with(this, crashlyticsKit);

当您更新Crashlytics版本时会发生什么是:

Fabric.with(this, crashlyticsKit); 

被转向

Fabric.with(this,new Crashlytics());

请确保将其更改回crashlyticskit。如果您已经正确更改,但错误仍然出现,请确保您已经

debug {

      ext.enableCrashlytics = false
 }

在 Android 下的 {buildtypes{}}。


10

我是Crashlytics的Mike。我们今天早些时候发布了更新版本1.15.2,其中包含解决此问题的修复程序。如果您运行:

./gradlew assemble --refresh-dependencies

这将会拉取最新版本。您也可以在此处查看有关修复的更多细节。


1
我没有使用 Fabric 集成,只是使用 Crashlytics 本身,并且我也遇到了 CrashlyticsMissingDependencyException。我该如何处理? - bogumil
2
@MikeB 经过一段时间后,我又遇到了 CrashlyticsMissingDependencyException 的问题。我正在使用以下依赖项: dependencies { classpath 'com.android.tools.build:gradle:1.2.3' classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.16.0' } 和 compile 'com.crashlytics.android:crashlytics:1.1.13' - bogumil
@MikeB,感谢您和团队在Fabric上所做的出色工作!我刚刚在下面发布了一个答案,您可能有兴趣审查一下。也许我的情况比较特殊,但也许它会对您的团队或其他人有所帮助。 - David M
感谢@DavidM分享您的附加答案。这应该在升级过程中发生,但很高兴您已经准备就绪。供其他人参考,请查看此处的步骤-https://dev.twitter.com/fabric/android/integrating - Mike Bonnell
这个 bug 又出现了,我们在 io.fabric.tools:gradle:1.19.2 中遇到了它。 - Fabian Frank
显示剩余13条评论

5
如果您不小心包含了Crashlytics BuildConfig,这个问题也会发生 - 在Android Studio/IntelliJ自动导入时很容易发生。我导入了
import com.crashlytics.android.core.BuildConfig;
而不是我的
import .BuildConfig;

5

针对我的问题进行修复

来自官方

禁用Debug Build的Crashlytics

如果您不需要在Debug Build中使用Crashlytics崩溃报告或测试分发,您可以通过以下两个步骤完全禁用该插件,从而安全地加速Debug Build:

第一步,将以下内容添加到您应用的build.gradle文件中:

android {
    buildTypes {
        debug {
          // Disable fabric build ID generation for debug builds
          ext.enableCrashlytics = false
          ...

接下来,在运行时禁用Crashlytics kit。否则,Crashlytics kit会抛出以下错误:

com.crashlytics.android.core.CrashlyticsMissingDependencyException:

This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up`

您可以使用以下代码仅在调试构建时运行时禁用工具包:
// Set up Crashlytics, disabled for debug builds
Crashlytics crashlyticsKit = new Crashlytics.Builder()
    .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build();

// Initialize Fabric with the debug-disabled crashlytics.
Fabric.with(this, crashlyticsKit);

4

很好的建议 - 这是该错误的较新版本。使用1.21.0或1.21.1将有所帮助。 - Mike Bonnell

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