【问题标题】:How can I fix this CrashlyticsMissingDependencyException?如何修复此 Crashlytics 缺少依赖项异常?
【发布时间】:2015-04-08 08:24:23
【问题描述】:

我使用最新的 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 将有效,同时我们将继续深入了解。
  • 我只是尝试卸载并安装 Fabrics for Android Studio 情侣时间。 AS 需要重新开始几次才能恢复理智。

标签: android crashlytics twitter-fabric


【解决方案1】:

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

debug {
    ext.enableCrashlytics = false
}

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

【讨论】:

  • 我遇到了与 1.20.1 和 2.5.2@aar 相同的问题。但是我不能在 CI 上使用这个解决方法,因为每次构建都会重置构建工作区:(
  • 我正在与 Fabric 的工程师一起工作。不同的时区很糟糕,我们已经花了将近 2 周的时间。仍然没有解决方案。但是你可以在 CI 上尝试一个解决方法: ./gradlew clean assemble ,然后 ./gradlew assemble ,第二个命令生成的 apk 将正常工作。
  • @ThuyTrinh 原来是因为 dataBinding = true。 Crashlytics 已针对它推出了修复程序:twittercommunity.com/t/…
  • 今天更新了 fabric 插件并得到了这个错误。解决方法有帮助,但不适用于后续运行。所以我必须评论这条线才能运行。
  • com.crashlytics.sdk.android:crashlytics:2.6.8@aar 对我不起作用
【解决方案2】:

我在 gradle 中注释掉了这个

apply plugin: 'io.fabric'

需要取消注释

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

【讨论】:

    【解决方案3】:

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

    [...]
    
    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'
    

    【讨论】:

    【解决方案4】:

    似乎将插件版本指定为:

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

    拿起1.15.1,有问题。

    为之前的1.14指定主要和次要似乎很稳定:

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

    【讨论】:

      【解决方案5】:

      更新插件后我遇到了同样的问题。 解决需要从 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" />
      

      【讨论】:

      • 他们的集成指南似乎已经过时了。似乎不再需要 fabric.properties 而是 AM 文件中的&lt;meta-data android:name="io.fabric.ApiKey" android:value="YOUR_API_KEY"/&gt;。名称已从“com.crashlytics.ApiKey”更改为“io.fabric.ApiKey”。
      • 是的,你是对的。这一点很重要。我更新了我的帖子。谢谢。
      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

        来自 Crashlytics 的 Mike 在这里。我们今天早些时候发布了一个更新版本 - 1.15.2 - 其中包括对此行为的修复。如果你运行:

        ./gradlew assemble --refresh-dependencies
        

        这将拉入最新版本。还可以看更多details on the fix here.

        【讨论】:

        • 我没有仅通过 Crashlytics 本身使用 Fabric 集成,而且我也遇到了 CrashlyticsMissingDependencyException。我该如何处理?
        • @bogumil 你能包含你的 build.gradle 的一部分吗?
        • @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。运行刷新依赖有帮助吗?
        • @MikeB 这没有帮助。我还向 support@ 发送了一封电子邮件,如有必要,我可以提供更多详细信息。
        【解决方案8】:

        为我修复 来自官方source

        为调试构建禁用 Crashlytics

        如果您不需要 Crashlytics 崩溃报告或调试版本的测试版分发,您可以通过以下两个步骤完全禁用插件来安全地加速您的调试版本:

        首先,将其添加到您应用的 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】:

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

          我已经导入了

          import com.crashlytics.android.core.BuildConfig;

          不是我自己的

          import &lt;package_name&gt;.BuildConfig;

          【讨论】:

            【解决方案10】:

            对我来说,这是因为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 会有所帮助。
            【解决方案11】:

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

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

            问题解决了!

            【讨论】:

              【解决方案12】:

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

              【讨论】:

                【解决方案13】:

                如果这对其他人有帮助,我在将 Crashlytics 升级到 Fabric 时遇到了类似的问题。就我而言,该插件从 Crashlytics 中留下了 2 行,我需要手动删除它们才能正常工作。

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

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

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

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

                【讨论】:

                  【解决方案14】:

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

                      debug {
                          ext.enableCrashlytics = false
                      }
                  

                  改为使用

                      debug {
                          ext.enableCrashlytics = true
                      }
                  

                  【讨论】:

                    【解决方案15】:

                    可能是我回复晚了。 但除了上述所有答案之外,还有一个原因可能会发生这种情况

                    如果你错过添加

                    apply plugin:'io.fabric'
                    

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

                    这是fabric在我们注册时默认添加的

                    【讨论】:

                      【解决方案16】:

                      删除应用程序图标固定 Crashylitics,whaaat?

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

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

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

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

                      【讨论】:

                        【解决方案17】:
                        <meta-data
                            android:name="firebase_crashlytics_collection_enabled"
                            android:value="false" /> 
                        

                        将其添加到AndroidManifest.xml

                        【讨论】:

                        • 那么您解决问题的方法是完全禁用 Crashlytics?
                        猜你喜欢
                        • 2020-07-12
                        • 2019-02-10
                        • 2017-05-07
                        • 1970-01-01
                        • 2022-07-08
                        • 2023-02-21
                        • 1970-01-01
                        • 1970-01-01
                        • 2022-07-04
                        相关资源
                        最近更新 更多