如何在开发时禁用Crashlytics
有什么简单的方法可以在开发时closuresCrashlytics Android SDK?
我不想让我每次做一些愚蠢的事情都会发生崩溃
另一方面,我不想评论Crashlytics.start()
,可能会忘记取消注释并提交
Marc来自Crashlytics这里。 在进行debugging时,有几种方法可以禁用Crashlytics!
-
使用不同的android:versionString进行debugging和版本构build,然后从debugging版本的Crashlytics web仪表板中禁用崩溃报告。
-
将调用Crashlytics.start()调用到检查debugging标志的if语句中。 您可以使用自定义标志或像这里提出的方法: 如何检查APK是否签名或“debugging构build”?
我从Crashlytics(与Fabric集成)中find了解决scheme,
把下面的代码放在你的Application类中onCreate()
Crashlytics crashlytics = new Crashlytics.Builder().disabled(BuildConfig.DEBUG).build(); Fabric.with(this, crashlytics);
编辑:
在Crashalitics 2.3及以上版本中,这已被弃用。 正确的代码是:
CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build(); Fabric.with(this, new Crashlytics.Builder().core(core).build());
要么
Fabric.with(this, new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build());
(从Crashlytics禁用的方法中复制() )
EDIT2:
您也可以select将其添加到buildType
中的buildType中。 该命令禁止发送crashlytics映射文件并为每个构build生成一个ID,这将加速这些flavor的gradle构build。 (它不会在运行时禁用Crashlytics。) 请参阅Mike B的答案。
buildTypes { release { .... } debug { ext.enableCrashlytics = false } }
如果你使用Gradle,只需将它添加到一个风格:
ext.enableCrashlytics = false
看看最新的文档。 https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup 。
除了在build.grade中添加ext.enableCrashlytics = false
之外,
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);
我发现这是最简单的解决scheme:
release { ... buildConfigField 'Boolean', 'enableCrashlytics', 'true' } debug { buildConfigField 'Boolean', 'enableCrashlytics', 'false' }
以上enableCrashlytics
在BuildConfig
文件中创build一个名为enableCrashlytics
的静态布尔字段,您可以使用它来决定是否启动Fabric
:
if (BuildConfig.enableCrashlytics) Fabric.with(this, new Crashlytics());
注意:使用此方法,Fabrics仅在发布版本中初始化(如上面的代码所示)。 这意味着您需要将调用静态方法放在Crashlytics
类的if
块中,该块检查织物是否已经初始化,如下所示。
if (Fabric.isInitialized()) Crashlytics.logException(e);
否则,在模拟器上testing时,应用程序会Must Initialize Fabric before using singleton()
错误Must Initialize Fabric before using singleton()
。
在MyApplication#onCreate()
if (!BuildConfig.DEBUG) Crashlytics.start(this);
编辑如果您升级到Fabric,请改用此答案 。
这里有很多很好的答案,但是对于我的testing,我使用内部testing版和实验室外testing的debugging版本,其中崩溃日志仍然非常有用,我仍然想要报告它们。 就像OP一样,我只想在我经常造成的快速发展中禁用它们,并迅速解决崩溃问题。
而不是删除所有的debugging崩溃,您可以select只使用下面的代码,而设备连接到您的开发机器时禁用报告。
if (!Debug.isDebuggerConnected()) { Fabric.with(this, new Crashlytics()); }
如果要捕获所有崩溃(用于debugging版本和发行版本),但要将它们分离到Crashlytics仪表板中,则可以将以下代码行添加到build.gradle:
debug { versionNameSuffix "-DEBUG" }
例如,如果您的应用的版本名称是1.0.0,则您的发布版本将被标记为1.0.0,而debugging版本将为1.0.0-DEBUG
请注意,您也可以在debugging版本中禁用恼人的上传符号:
def crashlyticsUploadStoredDeobsDebug = "crashlyticsUploadStoredDeobsDebug" def crashlyticsUploadDeobsDebug = "crashlyticsUploadDeobsDebug" tasks.whenTaskAdded { task -> if (crashlyticsUploadStoredDeobsDebug.equals(task.name) || crashlyticsUploadDeobsDebug.equals(task.name)) { println "Disabling $task.name." task.enabled = false } }
把它放到应用程序模块的build.gradle
中。
使用Gradle构build时,使用最新的最简单的版本:
if (!BuildConfig.DEBUG) { Fabric.with(this, new Crashlytics()); }
它使用面料Crashlytics的新内置语法,并自动使用Gradle构build。
如果您担心BuildConfig.DEBUG
设置不正确,请改用ApplicationInfo
:
boolean isDebug = ( mAppContext.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) != 0; Crashlytics crashlytics = new Crashlytics.Builder().disabled( isDebug ).build(); Fabric.with( uIContext, crashlytics );
我遇到了一个奇怪的问题:我跟着夏凌的回答(也出现在官网上),并没有奏效。 原来,我在Fabric的包中引用了BuildConfig
,它也包含一个静态的DEBUGvariables,即使在debugging模式下它也被设置为false。
所以,如果你遵循上述的解决scheme,你仍然得到debugging报告,请确保你引用这个:
import com.yourpackagename.BuildConfig;
而不是这个:
import io.fabric.sdk.android.BuildConfig;
另一种方法,如果你只想在你的IDE上做,就是注销插件。 显然它会停止发送报告,而你没有再次login生成生成。
使用风味或build立configuration。 为开发版本使用一个单独的构build标识符,所有的崩溃将继续到一个单独的应用程序。 可以方便地与同伴共享构build或在没有debugging器的情况下使用它。 像这样的东西 –
productFlavors { dev { applicationId "io.yourapp.developement" } staging { applicationId "io.yourapp.staging" } production { applicationId "io.yourapp.app" }
我知道这是愚蠢的回答
刚刚评论Fabric.with(this, new Crashlytics());
,在这个工作上,并且在你想释放它时取消注释。
- 如何使用Gradle在APK文件名中设置versionName?
- 如何在Android中呈现PDF
- Android:使用SimpleCursorAdapter从数据库获取数据到ListView
- 我的debuggingAndroidManifest.xml给我“无法解决符号错误”
- getColor(int id)在Android 6.0 Marshmallow(API 23)上弃用
- Apache HttpClient Android(Gradle)
- 如何解析.apk包中的AndroidManifest.xml文件
- 唤醒Android设备
- Android AutoCompleteTextView与自定义适配器筛选不起作用