无法获取提供程序 com.crashlytics.android.CrashlyticsInitProvider

Posted

技术标签:

【中文标题】无法获取提供程序 com.crashlytics.android.CrashlyticsInitProvider【英文标题】:Unable to get provider com.crashlytics.android.CrashlyticsInitProvider 【发布时间】:2019-01-02 03:52:13 【问题描述】:

implementation 'com.google.firebase:firebase-core:16.0.1'classpath 'com.google.gms:google-services:4.0.1' 之后

我在启动应用程序时开始收到以下错误:

致命异常:主要 进程:com.fentury.android,PID:10771 java.lang.RuntimeException::io.fabric.sdk.android.services.concurrency.UnmetDependencyException:此应用依赖于 Crashlytics。请在https://fabric.io/sign_up注册访问, 安装 Android 构建工具并让团队成员邀请您加入此应用的组织。 在 android.app.ActivityThread.installProvider(ActivityThread.java:5856) 在 android.app.ActivityThread.installContentProviders(ActivityThread.java:5445) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:5384) 在 android.app.ActivityThread.-wrap2(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 原因:io.fabric.sdk.android.services.concurrency.UnmetDependencyException:此应用依赖 Crashlytics。请在https://fabric.io/sign_up注册访问, 安装 Android 构建工具并让团队成员邀请您加入此应用的组织。 在 com.crashlytics.android.core.CrashlyticsCore.onPreExecute(CrashlyticsCore.java:235) 在 com.crashlytics.android.core.CrashlyticsCore.onPreExecute(CrashlyticsCore.java:209) 在 io.fabric.sdk.android.InitializationTask.onPreExecute(InitializationTask.java:44) 在 io.fabric.sdk.android.services.concurrency.AsyncTask.executeOnExecutor(AsyncTask.java:611) 在 io.fabric.sdk.android.services.concurrency.PriorityAsyncTask.executeOnExecutor(PriorityAsyncTask.java:43) 在 io.fabric.sdk.android.Kit.initialize(Kit.java:69) 在 io.fabric.sdk.android.Fabric.initializeKits(Fabric.java:440) 在 io.fabric.sdk.android.Fabric.init(Fabric.java:384) 在 io.fabric.sdk.android.Fabric.setFabric(Fabric.java:342) 在 io.fabric.sdk.android.Fabric.with(Fabric.java:313) 在 com.crashlytics.android.CrashlyticsInitProvider.onCreate(CrashlyticsInitProvider.java:27) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1751) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1726) 在 android.app.ActivityThread.installProvider(ActivityThread.java:5853) ... 10 更多

也在AndroidManifest.xml下一行添加:

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

【问题讨论】:

如错误消息中所述,该应用程序使用 Crashlytics。你可能想set it up @RosárioPereiraFernandes 没有帮助,同样的错误:( 您是否将 crashlytics 依赖项添加到您的 build.gradle @ Morozov? @A.N.T 是的,implementation('com.crashlytics.sdk.android:crashlytics:2.9.3@aar') transitive = true 以及在所有的 firebase 实施完美运行之前 您是否在清单@Morozov 中添加了结构元数据? 【参考方案1】:

这有助于解决我的问题

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

然后删除这个:

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

【讨论】:

这不会禁用崩溃报告吗? @algrid 不。试试看。然后你可以尝试人为地创建错误。 对我没有帮助。将 crashlytics 从版本 2.9.4 更改为 2.9.5 后,崩溃次数增加。现在我用的是2.10.0和ndk:2.1.0,还是出现很多crash。【参考方案2】:

我发现,按照Firebase Crashlytics docs 上的说明操作后,您唯一需要做的就是在您的应用构建文件中应用结构插件(文档中实际上缺少此步骤!)。

在您的应用级 build.gradle 添加以下内容

// Apply the Fabric plugin
apply plugin: 'io.fabric'

编辑:此步骤似乎最近已添加到文档中(请参阅步骤 2/第 2 部分)。

【讨论】:

这需要更多的强调。它现在实际上在文档中(参见第 2 步/第 2 部分),但在看到这条评论之前我完全错过了它。 @ralfoide 你是对的,它确实需要更多的强调。我相信这是最近添加到文档中的,因为我上次检查时它不存在。【参考方案3】:

如果您要使用其他 Firebase 的 API,我建议您设置 crashlytics 如 Firebase 的 crashlytics 页面上所述,here。

显然在此之前,您需要为您的应用设置 Firebase 并通过 firebase 控制台创建项目。 我相信你已经这样做了。

这是因为我发现这两个页面(fabric 和 firebase)上的 crashlytics 设置存在细微差别。 就像在 firebase 的 crashlytics 上一样: 在应用级分级中

dependencies 
    // ...
    implementation 'com.crashlytics.sdk.android:crashlytics:2.9.3'

在织物上:

dependencies 
    // ...
      implementation('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') 
    transitive = true;
  

如果您与 firebase 一起使用,则无需通过清单添加结构 api 密钥,我认为它以某种方式与 firebase 密钥连接(只是猜测)。 我是根据我的经验这么说的,如果我在某个地方错了,任何人都可以纠正我。

【讨论】:

【参考方案4】:

我也遇到了这个问题,它是由于在调试版本中使用了不正确的 Fabric.with() 初始化程序造成的。

不要使用:

// 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, new Crashlytics()); // WRONG!

改为使用:

// 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); // Correct initializer!

文档:https://docs.fabric.io/android/crashlytics/build-tools.html#disable-crashlytics-for-debug-builds

【讨论】:

【参考方案5】:

在我的情况下,我正在为 android 4.4 兼容性构​​建应用程序,它没有内置 Multidex 支持。我通过以下步骤解决了这个问题,为 android 4.4 启用 Multidex,问题就消失了:Enable multidex for apps with over 64K methods

大卫

【讨论】:

以上是关于无法获取提供程序 com.crashlytics.android.CrashlyticsInitProvider的主要内容,如果未能解决你的问题,请参考以下文章

无法解决:com.crashlytics.sdk.android :answers-shim:0.0.3

Crashlytics Android Studio 插件无法初始化

当用户更改首选项时如何在运行时禁用 Crashlytics/Fabric

即时应用架构的 Crashlytics 清单合并问题

没有方法签名:com.crashlytics.tools.gradle.CrashlyticsPlugin On Mac [关闭]

找不到插件 Fabric Android Studio 导入 com.crashlytics & io.fabric