在开发过程中有没有简单的方法可以关闭Crashlytics Android SDK?
我不想每次做傻事都发送一份崩溃报告。
另一方面,我也不想注释掉Crashlytics.start()
,可能会忘记取消注释并提交代码。
在开发过程中有没有简单的方法可以关闭Crashlytics Android SDK?
我不想每次做傻事都发送一份崩溃报告。
另一方面,我也不想注释掉Crashlytics.start()
,可能会忘记取消注释并提交代码。
app/src/debug/AndroidManifest.xml
,并添加以下内容:
<application>
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false"/>
</application>
请注意,这个元数据元素必须只放在debug/AndroidManifest.xml中,而不是常规的AndroidManifest.xml中。CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()
的解决方案对我无效。我发现,在调用Application.onCreate()或启动任何活动之前,CrashlyticsInitProvider已经初始化了crashlytics,这意味着在应用程序或活动中手动初始化fabric没有效果,因为fabric已经被初始化。BuildConfig.DEBUG
未正确设置,请使用ApplicationInfo
代替:boolean isDebug = ( mAppContext.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) != 0;
Crashlytics crashlytics = new Crashlytics.Builder().disabled( isDebug ).build();
Fabric.with( uIContext, crashlytics );
如果您想要一个可调试的发布版本构建,这是方法:
buildTypes {
release {
signingConfig signingConfigs.config
debuggable true //-> debuggable release build
minifyEnabled true
multiDexEnabled false
ext.enableCrashlytics = true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'false'
}
debug {
minifyEnabled false
multiDexEnabled true
ext.enableCrashlytics = false
ext.alwaysUpdateBuildId = false
// Disable fabric build ID generation for debug builds
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'true'
}
}
当你设置 debuggable true
时,你的 BuildConfig.DEBUG 将被初始化为 true,这就是我在 BuildConfig 类中添加该变量的原因。
初始化 Fabric:
Crashlytics crashlytics = new Crashlytics.Builder()
// disable crash reporting in debug build types with custom build type variable
.core(new CrashlyticsCore.Builder().disabled(BuildConfig.BUILD_TYPE_DEBUG).build())
.build();
final Fabric fabric = new Fabric.Builder(this)
.kits(crashlytics)
//enable debugging with debuggable flag in build type
.debuggable(BuildConfig.DEBUG)
.build();
// Initialize Fabric with the debug-disabled crashlytics.
Fabric.with(fabric);
ext.enableCrashlytics
和ext.alwaysUpdateBuildId
的目的是什么,因为它们似乎没有被引用到任何地方。我有什么遗漏吗? - jules使用“flavors”或“build configs”。为开发构建使用单独的构建标识符,这样所有崩溃都将继续发送到一个单独的应用程序中。在与同行共享构建或在没有调试器的情况下使用时非常方便。类似于以下内容 -
productFlavors {
dev {
applicationId "io.yourapp.developement"
}
staging {
applicationId "io.yourapp.staging"
}
production {
applicationId "io.yourapp.app"
}
2020年后织物答案
将以下代码粘贴到您的Application类中,并从应用程序onCreate中调用方法setCrashlyticsState
。您还可以将您的测试设备ID添加到debugDevices
HashSet中,以便在发布模式下构建时可以忽略您的个人设备。
注意:通过Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
返回的设备ID不能保证是唯一或恒定的(它可能会在出厂重置或手动根据设备更改)。但这应该足够好了。
private final HashSet<String> debugDevices = new HashSet<String>(Arrays.asList("6a3d5c2bae3fd32c"));
private boolean isDebugDevice(String deviceId) {
return debugDevices.contains(deviceId);
}
private void setCrashlyticsState() {
@SuppressLint("HardwareIds")
String deviceId = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
if (BuildConfig.DEBUG || isDebugDevice(deviceId)) {
Log.v("DeviceId", deviceId);
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false);
}
}
检查BuildConfig是否指向正确的BuildConfig类。通常有几个选项,错误的选项可能会被引入。
if (BuildConfig.DEBUG) {
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false);
}
- Soufiane Sakhiimport static io.fabric.sdk.android.Fabric.isDebuggable;
if(! isDebuggable()){
// set Crashlytics ...
}
愉快的编码 :)
buildTypes {
debug {
debuggable true
manifestPlaceholders = [enableCrashlytic:false]
}
release {
debuggable false
manifestPlaceholders = [enableCrashlytic:true]
}
}
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="${enableCrashlytic}" />
private void setupCrashReport() {
if (BuildConfig.DEBUG) return;
Fabric.with(this, new Crashlytics());
}
这对我有用:
releaseCompile 'com.crashlytics.sdk.android:crashlytics:2.9.9'
并且在buildTypes中:
debug {
ext.enableCrashlytics = false
}
如果您只想在IDE上执行此操作,另一种方法是注销插件。显然,在您生成构建时不再登录会停止发送报告。