在Android中,即使您已经手动并自动测试了应用程序,它也很有可能崩溃。 这可能是由于诸如与不同的API级别不兼容,屏幕大小,电话内存,硬件传感器可用性以及供应商针对其单个设备进行的自定义之类的因素造成的。 Crashlytics将帮助您诊断这些问题。
崩溃使您的用户感到悲伤和愤怒。 如果这种情况经常发生,他们甚至可能希望卸载该应用程序。 然后,对您的应用进行不良评价,在Play商店中给予负面反馈,然后再安装竞争对手的应用! 在这个已经拥挤且竞争激烈的应用程序市场中,让用户满意对您的应用程序成功至关重要。
您的应用完全没有崩溃是不可能的,但是将崩溃降至最低非常重要。 在开发和测试期间,您可能没有遇到过特定的崩溃,但是在生产中,当用户积极使用它时,您将开始看到崩溃。 使用功能强大且功能强大的崩溃报告解决方案对于收集有关您的应用崩溃的信息以及让您深入了解如何解决问题以使用户感到满意至关重要。
在本教程中,我将向您展示如何使用Crashlytics , Crashlytics是一种免费而强大的轻型崩溃报告解决方案,它是Google最近收购的Fabric开发人员工具集中的一部分。 我们将创建一个简单的应用程序,该应用程序在单击按钮时会崩溃,因此我们可以使用Crashlytics深入了解崩溃。
1.为什么要使用Crashlytics?
您可能要使用它的一些原因如下:
- 易于设置
- 无限的应用程序,用户和崩溃
- 实时警报
- 实时崩溃报告
- 深入的崩溃分析
- 跟踪异常
- 轻松共享崩溃报告
- 测试版应用分发
- 一个免费的移动应用程序,可随时随地监视您的应用程序并获取有关重大问题的实时警报
- 自由!
2.创建一个Android Studio项目
首先,启动Android Studio并创建一个名为MainActivity
的空活动的新项目“ CrashlyticsTutorial ”。
3.安装结构插件
您必须首先在Fabric上拥有一个帐户才能将Crashlytics集成到您的应用程序中。 因此,请填写所需的详细信息,然后将向您发送确认电子邮件。
您可以选择通过下载Android Studio插件(将自动修改集成所需的文件)或手动修改build.gradle文件来将Fabric与项目集成。 在本教程中,我们将使用最简单的方法,即使用插件。
单击确认链接后,将指导您安装插件:
第1步
选择Android作为平台。
第2步
对于Mac用户:从Android Studio / IntelliJ菜单中选择“偏好设置” 。 Windows和Linux用户:从“ 文件”菜单中选择“设置” 。
第三步
选择插件 ,单击浏览存储库按钮,然后搜索“ Fabric for Android”。
第4步
单击安装插件按钮以下载并安装插件。
4.整合Crashlytics
第1步
要开始将Crashlytics集成到您的Android Studio项目中,请输入您的凭据以登录。
第2步
选择Android项目CrashlyticsTutorial ,然后单击“ 下一步”按钮。
第三步
Fabric将列出您注册的所有组织,因此选择要与应用程序关联的组织,然后单击“ 下一步”按钮。
第4步
然后,Fabric将列出其所有套件。 由于这是Crashlytics教程,因此选择Crashlytics并单击“ 下一步”按钮。
第5步
单击安装按钮。
Fabric希望对您的构建进行更改。 gradle , MainActivity.java和AndroidManifest.xml文件, 因此请单击“ 应用”按钮以进行更改。
第6步
构建并运行您的应用程序,以便我们可以确保所有内容均已正确配置。 如果您的应用程序已成功配置,您将立即收到一封电子邮件,发送到用于注册Fabric的电子邮件地址。
5.查看仪表板
现在,Crashlytics已成功与我们的项目集成,请访问主仪表板以查看我们的应用程序: CrashlyticsTutorial 。
单击一个项目将打开Crashlytics仪表板,该仪表板将列出遇到的问题。 到目前为止,我们还没有。 稍后,当我们故意创建崩溃时,我们将重新访问该仪表板。
在项目Crashlytics仪表板内部,您可以大致了解崩溃。 您可以按应用程序版本,事件,日期,状态(打开,关闭或全部),设备,操作系统或用户活动(虽然需要启用Answers套件才能使用此功能)过滤崩溃。 您还可以查看崩溃总数,非致命故障,受影响的用户等等。
Answers套件为您提供有关应用程序使用情况的实时统计信息,包括活动用户数,会话时长,稳定性等级和保留时间。
6.故意造成崩溃
了解崩溃和问题之间的区别
崩溃和问题之间的区别在于,Crashlytics将类似的崩溃合并为问题(特定的代码行似乎触发了相同类型的崩溃)。 例如,如果您报告了100,000个崩溃,则这些可能仅归因于60个问题。
让我们故意创建一个崩溃并在仪表板上查看记录的问题。
创建布局
这是MainActivity
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.chikeandroid.crashlyticstutorial.MainActivity">
<Button
android:id="@+id/btn_crash_now"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Crash Now!"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
crashNow()
方法
修改MainActivity
类以启动crashNow()
方法,该方法将在单击按钮时触发RuntimeException。
package com.chikeandroid.crashlyticstutorial;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import com.crashlytics.android.Crashlytics;
import io.fabric.sdk.android.Fabric;
public class MainActivity extends AppCompatActivity {
private Button mCrashNowButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fabric.with(this, new Crashlytics());
setContentView(R.layout.activity_main);
mCrashNowButton = (Button) findViewById(R.id.btn_crash_now);
mCrashNowButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
crashNow();
}
});
}
private void crashNow() {
throw new RuntimeException("This is a crash");
}
}
崩溃!
运行该应用程序,然后单击立即崩溃按钮。
7.重新访问仪表板
成功崩溃后,请重新访问仪表板以查看立即记录的问题。 您还将从Fabric收到有关崩溃的电子邮件通知。 到目前为止,在信息中心中,我们现在有一个问题,一个崩溃和一个受影响的用户。 您可以使用文件名,方法名,行号或问题注释(仅用于单个术语)搜索特定问题。
当您单击问题时,它将打开一个页面,您可以在其中获取有关崩溃的深入报告。 该页面汇总了发生的所有崩溃。
该用户界面的关键部分如下:
1个 | 项目和程序包名称,包括发生崩溃的行号 |
2 | 最近的崩溃过滤器 |
3 | 崩溃总数 |
4 | 崩溃影响的用户总数 |
5 | 切换以将问题标记为关闭或打开 |
6 | 每天的崩溃次数图表 |
7 | 通过Twitter或与团队成员共享问题的按钮 |
8 | 激活了接近性的崩溃设备的百分比 |
9 | 应用程序聚焦时发生的崩溃百分比 |
10 | 植根的已崩溃设备的百分比 |
11 | 崩溃设备的型号名称分类 |
12 | 崩溃设备的操作系统故障 |
13 | 将异常堆栈跟踪下载为.txt文件 |
14 | 堆栈跟踪的可扩展视图 |
15 | 查看每个崩溃报告的详细信息。 |
在此页面上,您还可以查看注释并编写有关每次崩溃的注释。
8.其他Crashlytics功能
织物移动应用
Fabric还在Google Play商店中提供了免费的移动应用程序 。 使用移动应用程序,您可以在发生严重崩溃时立即收到推送通知,并获得一些数据来深入了解该问题:受影响的设备和平台的细分,完整堆栈跟踪,受影响的用户数以及受影响的用户,输入有关问题的注释以及与团队成员共享问题的选项。 所有这些数据都是实时更新的。
日志捕获的异常
Crashlytics还使您能够使用Crashlytics.logException(Exception)
记录在catch
块中Crashlytics.logException(Exception)
。
try {
myMethodThatThrows();
} catch (Exception e) {
Crashlytics.logException(e);
// handle your exception here!
}
所有记录的异常将在Fabric仪表板中显示为“非致命”问题。 Crashlytics在专用的后台线程上处理异常,因此记录异常不会阻止应用程序的UI,并且对应用程序的性能影响很小。
自定义记录
记录异常时,可以创建与崩溃数据关联的自定义日志消息,该消息将显示在特定崩溃的Crashlytics仪表板上。
Crashlytics.log(int priority, String tag, String msg);
除了显示在报告中外,它还将添加到Android的LogCat中。 为防止这种情况发生,请使用:
Crashlytics.log(String message);
如下例所示:
private void crashNow() {
Crashlytics.log("My log message");
throw new RuntimeException("This is a crash");
}
唯一标识用户
为了在仪表板上唯一标识应用程序的最终用户以进行调试,Crashlytics提供了以下方法:
Crashlytics.setUserIdentifier("12345");
Crashlytics.setUserEmail("fakeemail@gmail.com");
Crashlytics.setUserName("Test User");
使用Crashlytics.setUserIdentifier
提供ID号,令牌或哈希值,可以唯一地标识应用程序的最终用户,而不会泄露或传输其任何个人信息。
Beta分布
如果您想通过Beta测试将您的应用分发给一组用户进行测试并获得反馈,然后再最终将其发布给公众,则Crashlytics提供了一个非常有用的免费工具Beta 。 我不会在这里讨论,但是请查看官方文档以获取更多信息。
禁用Crashlytics进行调试版本
您可以为调试构建禁用Crashlytics,这将加快调试构建过程。
首先,将其添加到您的build.gradle文件中:
buildTypes {
...
debug {
// Disable fabric build ID generation for debug builds
ext.enableCrashlytics = false
}
}
然后,在运行时禁用Crashlytics工具包。
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set up Crashlytics, disabled for debug builds
Crashlytics crashlyticsKit = new Crashlytics.Builder()
.core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
.build();
Fabric.with(this, crashlyticsKit);
setContentView(R.layout.activity_main);
}
结论
Crashlytics非常强大,对于有效的崩溃报告很有用。 在本教程中,您学习了:
翻译自: https://code.tutsplus.com/tutorials/crash-reporting-with-crashlytics--cms-27917