我该如何解决这个CrashlyticsMissingDependencyException?

时间:2015-02-08 15:09:12

标签: android crashlytics twitter-fabric

我一直在使用最新的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)

17 个答案:

答案 0 :(得分:95)

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

debug {
    ext.enableCrashlytics = false
}

在第一次使用Crashlytics之前删除它解决了这个问题。第一次运行后不再出现此问题。

答案 1 :(得分:26)

我在gradle中注释了这个

apply plugin: 'io.fabric'

需要取消注释

如果您没有,请添加它!

答案 2 :(得分: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'

答案 3 :(得分:14)

似乎将插件版本指定为:

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

拿起1.15.1,这有问题。

指定前一个1.14的主要和次要似乎是稳定的:

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

答案 4 :(得分: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" />

答案 5 :(得分:12)

如果您在调试期间使用禁用功能,如图所示

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

答案 6 :(得分:11)

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

./gradlew assemble --refresh-dependencies

将引入最新版本。您还可以看到更多details on the fix here.

答案 7 :(得分: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

答案 8 :(得分:4)

修复我 来自官方source

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

答案 9 :(得分:4)

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

我已导入

import com.crashlytics.android.core.BuildConfig;

而不是我自己的

import <package_name>.BuildConfig;

答案 10 :(得分:3)

就我而言,我在“CommonLib”模块中使用了fabric,它在所有其他模块(包括app)中作为依赖项添加。 所以,我在apply plugin: 'io.fabric'阻止之后添加了buildscript {}。所以,我把两个插件放在一起:

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

问题解决了!

答案 11 :(得分:1)

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

    debug {
        ext.enableCrashlytics = false
    }

改为使用

    debug {
        ext.enableCrashlytics = true
    }

答案 12 :(得分:0)

如果这有助于其他人,我在将Crashlytics升级到Fabric时遇到了类似的问题。在我的情况下,插件从Crashlytics留下了2行,我需要手动删除它才能工作。

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

div

此外,在依赖项下,我不得不手动删除:

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

答案 13 :(得分:0)

可能我迟到了回复。 但除了以上所有答案之外,还可能出现这种情况

如果您错过了添加

apply plugin:'io.fabric'

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

默认情况下,当我们注册并从Fabric窗口添加代码时,这是由Fabric添加使用IDE但不小心可以删除它。

答案 14 :(得分:0)

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

答案 15 :(得分:0)

要删除固定的Crashylitics应用程序图标吗?

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

仅仅浪费了一个小时就试图弄清楚这一点。事实证明,有人认为阅读应用程序图标的包名称而不是context.packageName来获取给定上下文的应用程序资源是一个好主意。通过以下方法完成:

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

如果您碰巧使用的APK之外的图标,例如android:icon="@android:drawable/sym_def_app_icon",显然会炸毁。当时这可能是个好主意,想知道他们想解决什么奇怪的错误?!

答案 16 :(得分:-1)

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

将其添加到AndroidManifest.xml中。