pes*_*ira 29 android firebase crashlytics crashlytics-android google-fabric
我有一个应用程序,通过Firebase使用Fabric的Crashlytics.以下是我的Applications onCreate中执行的第一件事
CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder()
.disabled(BuildConfig.DEBUG)
.build();
Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build());
Run Code Online (Sandbox Code Playgroud)
尽管如此,崩溃仍以DEBUG == true模式提交.
我使用以下版本
在我的build.gradle中
classpath "io.fabric.tools:gradle:1.25.1"
在我的app/build.gradle中
implementation "com.crashlytics.sdk.android:crashlytics:2.9.1"
不幸的是,崩溃仍然有报道.任何想法,我做错了什么?
reV*_*rse 89
Bob Snyder和niqueco已经发布了正确的答案,但是每次构建实际版本APK时更改元数据值似乎有点乏味,因此这是一个使用所谓的manifestPlaceholder并自动将值更改为true或false依赖于这个buildType.
将以下内容添加到您的应用中 build.gradle
android {
// ...
buildTypes {
debug {
manifestPlaceholders = [enableCrashReporting:"false"]
}
release {
manifestPlaceholders = [enableCrashReporting:"true"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
这对你来说 AndroidManifest.xml
<manifest ... >
<application ...>
// ...
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="${enableCrashReporting}" />
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
Merged Manifest打开AndroidManifest.xml后,可以通过单击选项卡来验证当前值.你应该看到这样的东西:
Bob*_*der 27
在火力地堡Crashlytics文件解释说,一旦报告是在应用程序会话中启用,它不能被禁用.
默认情况下,在创建实例之前执行的ContentProvider命名CrashlyticsInitProvider中启用Crashlytics报告Application. CrashlyticsInitProvider根据元数据值启用或禁用报告firebase_crashlytics_collection_enabled,默认情况下该值为true.
如果要禁用报告,则清单元数据必须存在并设置为false至关重要:
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
Run Code Online (Sandbox Code Playgroud)
在应用程序初始化期间查看logcat中的消息:
CrashlyticsInitProvider: CrashlyticsInitProvider initialization successful
Run Code Online (Sandbox Code Playgroud)
如果消息存在,firebase_crashlytics_collection_enabled则为true.如果消息不存在,则表示您已成功设置元数据以禁用崩溃报告.
如果元数据丢失或设置为true,则无法使用调用来禁用代码中的报告Fabric.with(...).
在对另一个答案的评论中,您表明您尝试使用元数据禁用报告但未成功.检查拼写错误并确保声明正确放置在<application>元素中.在我的测试中,我能够使用元数据禁用报告,然后在运行时启用.
我终于找到了这个问题.Crashlytics是从内容提供商初始化的,所以当你尝试从应用程序中禁用onCreate()它时,为时已晚.通过反编译的代码,我已经看到您可以通过向清单中的<application>元素添加元数据来禁用该初始化.
所以,我所做的就是这个......我已将其添加到app/src/debug/AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?><!--suppress ALL -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="<your app package>">
<application>
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
我还通过添加以下内容在app module gradle构建文件中禁用了Crashlytics:
debug {
ext.enableCrashlytics = false
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,我不需要做那Fabric.with(...)件事.以上就足够了.
它工作正常:没有报告.
我认为如果您切换到 firebase crashlytics 并删除了 fabric crashlytics,也可以从代码中做到这一点:链接到firebase doc
所以在你的应用程序类的 onCreate 中:
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12758 次 |
| 最近记录: |