如何解决此CrashlyticsMissingDependencyException?


104

我一直在使用最新的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需要重新启动几个时间才能恢复理智。
罗伯特

Answers:


22

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

[...]

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
我不确定您的意思,但是它们是两个相同的Maven存储库:https://maven.fabric.io/repohttps://maven.fabric.io/public
gw0


96

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

debug {
    ext.enableCrashlytics = false
}

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


2
我在1.20.1和2.5.2@aar中遇到了同样的问题。但是我无法在CI上使用这种解决方法,因为每次构建都会重置构建工作区:(
Hieu Rocker 2015年

1
我正在与Fabric的工程师合作。不同的时区很糟糕,我们花了将近2个星期。仍然没有解决方案。但是您可以在CI上尝试一种变通方法:./gradlew clean assemble,然后./gradlew assemble,第二个命令生成的apk将正常运行。
Hieu Rocker

3
@ThuyTrinh原来是因为dataBinding = true。Crashlytics已针对此问题推出了修复程序:twittercommunity.com/t/…–
Hieu Rocker

1
今天更新了结构插件,并收到此错误。解决方法会有所帮助,但不适用于后续运行。因此,我必须对此行进行评论以进行运行。
欧内斯特(Ernest)

1
它对我不起作用com.crashlytics.sdk.android:crashlytics:2.6.8@aar
Tas

27

我在gradle中对此进行了评论

apply plugin: 'io.fabric'

需要取消注释

或者,如果您没有它,请添加它!


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,而是<meta-data android:name="io.fabric.ApiKey" android:value="YOUR_API_KEY"/>AM文件中的。名称从“ com.crashlytics.ApiKey”更改为“ io.fabric.ApiKey”。
2015年

1
是的,你说的没错。这一点很重要。我更新了我的帖子。谢谢。
Sergei K,

13

如果您在调试过程中使用了禁用功能,如图所示

 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 {}}下


11

来自Crashlytics的Mike。我们今天早些时候发布了更新版本1.15.2,其中包含针对此行为的修复程序。如果您运行:

./gradlew assemble --refresh-dependencies

它将获取最新版本。您还可以在此处查看有关此修复程序的更多详细信息。


1
我不是仅通过Crashlytics本身使用Fabric集成,而且还收到了CrashlyticsMissingDependencyException。我该如何处理?
bogumil

@bogumil您可以包含一部分build.gradle吗?
Mike Bonnell

2
@MikeB一段时间后,我再次遇到CrashlyticsMissingDependencyException。我正在使用:依赖项{classpath'com.android.tools.build:gradle:1.2.3'classpath'com.crashlytics.tools.gradle:crashlytics-gradle:1.16.0'}并编译'com.crashlytics.android :crashlytics:1.1.13'
博古米尔

嗯,很奇怪@bogumil。运行刷新依赖性是否有帮助?
Mike Bonnell

@MikeB没有帮助。我还向support @发送了电子邮件,如有必要,我可以提供更多详细信息。
bogumil

5

为我修复从官方来源

禁用Crashlytics进行调试版本

如果您不需要Crashlytics崩溃报告或beta版本的调试版本,则可以通过以下两个步骤完全禁用插件,从而安全地加快调试版本:

首先,将其添加到应用程序的build.gradle中:

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

接下来,在运行时禁用Crashlytics工具包。否则,Crashlytics工具包将引发以下错误:

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);

5

如果您不小心包含了Crashlytics BuildConfig,也会发生此问题-使用Android Studio / IntelliJ自动导入非常容易。

我进口了

import com.crashlytics.android.core.BuildConfig;

代替我自己

import <package_name>.BuildConfig;


4

对我来说是因为dataBinding = true。将Fabric Gradle插件升级到1.21.0修复了此问题:https ://twittercommunity.com/t/fabric-gradle-plugin-1-21-0-add-support-for-android-databinding-true/57474


要点-这是该错误的更新版本。使用1.21.0或1.21.1会有所帮助。
Mike Bonnell

3

就我而言,我在“ CommonLib”模块中使用结构,该模块作为依赖关系添加到所有其他模块(包括应用程序)中。因此,我已经添加apply plugin: 'io.fabric'buildscript {}块之后。因此,我将两个插件放在一起:

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

问题解决了!


1

确保添加apply plugin: 'io.fabric'到您的应用程序项目中build.gradle。就我而言,我有一个共同的build.gradleapply plugin: 'io.fabric'。将其移至应用程序项目即可解决该问题。


0

如果这对其他人有帮助,将Crashlytics升级到Fabric时,我也会遇到类似的问题。就我而言,该插件在Crashlytics中留下了2行,我需要手动删除这两行,然后才能起作用。

在gradle文件中,在buildscript依赖项下,我必须手动删除:

classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.16.0'

另外,在依赖项下,我必须手动删除:

compile 'com.crashlytics.android:crashlytics:1.1.13'

0

检查在build.gradle文件中是否禁用了crashlytics

    debug {
        ext.enableCrashlytics = false
    }

改为使用

    debug {
        ext.enableCrashlytics = true
    }

0

可能我迟到了。但是,除了上述所有答案之外,还有其他原因可能会导致这种情况发生

如果您错过添加

apply plugin:'io.fabric'

这可能看起来很奇怪,但这将导致相同的问题

默认情况下,当我们在Fabric窗口中使用IDE注册并添加代码时,默认情况下它是由Fabric添加的,但是偶然地可以将其删除。


0

删除已修复的应用程序图标Crashylitics,还好吗?

我已根据入门教程,使用最新版本等完成了所有工作。

只是浪费了一个小时试图解决这个问题。事实证明,有人认为阅读应用程序图标的包名称而不是在context.packageName上下文中获取应用程序的资源是个好主意。通过以下方法完成:

io.fabric.sdk.android.services.common.CommonUtils#getResourcePackageName

如果您碰巧使用了不在APK内的图标,这显然会爆炸,例如:android:icon="@android:drawable/sym_def_app_icon"。当时这可能是个好主意,想知道他们正在尝试解决哪些奇怪的错误?


-1
<meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" /> 

将其添加到中AndroidManifest.xml


因此,解决该问题的解决方案是完全禁用Crashlytics?
JJJ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.