Firebase
套件有一个模块,可以让你对你的应用程序可能陷入的问题获得清晰的、可操作的洞察力和报告。这是很强大的,特别是当你正在建立一个对用户至关重要的生产应用。每一秒钟浪费在挖掘日志文件上,都可能导致用户的不满或收入的损失。
因此,"Firebase Crashlytics",一个轻量级的、实时的崩溃报告,可以帮助你跟踪、优先处理和修复侵蚀你的应用程序质量的稳定性问题。它通过对崩溃进行智能分组并突出显示导致崩溃的情况,为你节省故障排除的时间。
你可以发现一个特定的崩溃是否影响了大量的用户。当一个问题的严重程度突然增加时,你可以得到提醒,甚至可以准确地指出哪一行代码导致崩溃。
以下是它的主要功能。
- 它策划崩溃报告并提供背景信息,同时强调崩溃的严重性和普遍性。
- 2.
Crashlytics
提供Crash Insights,这些有用的提示突出了常见的稳定性问题,并提供资源,使它们更容易排除故障、处理和解决。 - 与
Analytics
集成 - 实时警报
现在让我们来看看如何设置和使用Crashlytics
。
第1步:在你的项目中加入 "Firebase"。
因为 "Crashlytics "是Firebase产品系列中的一个产品,所以你需要在你的项目中添加Firebase。我们详细介绍了如何做到这一点这里。
第二步:在 "Firebase控制台 "中启用`Crashlytics’。
*进入MARKDOWN_HASH583d5285688d7c5f909e98a20d4ff14bMARKDOWNHASH
中的[Crashlytics仪表板](https://console.firebase.google.com/project//crashlytics)。
*确保你的应用程序在页面顶部**Crashlytics旁边的下拉菜单中被选中。
*点击启用Crashlytics
。
第三步:将 "Firebase Crashlytics "插件添加到你的应用程序中。
你可以在projects/build.gradle
文件中这样做。看看下面的代码,看看如何做。
buildscript {
repositories {
// Check that you have Google's Maven repository (if not, add it).
google()
}
dependencies {
// ...
// Check that you have the Google services Gradle plugin v4.3.2 or later
// (if not, add it).
classpath 'com.google.gms:google-services:4.3.10'
// Add the Crashlytics Gradle plugin
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
}
}
allprojects {
repositories {
// Check that you have Google's Maven repository (if not, add it).
google()
}
}
之后,到app/build.gradle
中,在该文件的顶部应用crashlytics插件。
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // Google services Gradle plugin
// Apply the Crashlytics Gradle plugin
apply plugin: 'com.google.firebase.crashlytics'
第四步:添加依赖项
现在你需要将 "Firebase Crashlytics "SDK添加到你的应用程序中。你可以在app/build.gradle
文件中的dependencies
闭合项下这样做。
对于一个Kotlin项目。
dependencies {
// Import the BoM for the Firebase platform
implementation platform('com.google.firebase:firebase-bom:28.4.1')
// Declare the dependencies for the Crashlytics and Analytics libraries
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation 'com.google.firebase:firebase-crashlytics-ktx'
implementation 'com.google.firebase:firebase-analytics-ktx'
}
对于一个Java项目。
dependencies {
// Import the BoM for the Firebase platform
implementation platform('com.google.firebase:firebase-bom:28.4.1')
// Declare the dependencies for the Crashlytics and Analytics libraries
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation 'com.google.firebase:firebase-crashlytics'
implementation 'com.google.firebase:firebase-analytics'
}
第五步:强制测试
是的,你需要强制一个测试来完成对Crashlytics
的设置。这意味着我们将故意强迫一次崩溃,以便在我们的Crashlytics
仪表板上看到结果。
例如,为了做到这一点,我们可以在我们的应用程序中添加一个按钮,然后当被点击时,我们就会崩溃应用程序。这里有一些代码例子。
在Kotlin中。
val crashButton = Button(this)
crashButton.text = "Test Crash"
crashButton.setOnClickListener {
throw RuntimeException("Test Crash") // Force a crash
}
addContentView(crashButton, ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT))
而在Java中。
Button crashButton = new Button(this);
crashButton.setText("Test Crash");
crashButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
throw new RuntimeException("Test Crash"); // Force a crash
}
});
addContentView(crashButton, new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
现在运行该应用程序。然后按下按钮,应用程序会崩溃。只需导航到MARKDOWN_HASH6c036a1311e0bb4621e83faa6761efa3MARKDOWNHASH
的[Crashlytics dashboard](https://console.firebase.google.com/project//crashlytics),即可看到你的测试崩溃。
这就是了。
现在让我们看一下一些简单的孤立的例子。
例子1:Firebase Crashlytics
例子 – Kotlin和Java
这是一个简单的Firebase
crashlytics的例子。有两个`活动’,一个用Kotlin编写,另一个用Java编写。
第1步:在你的项目中添加 "Firebase"。
按照这里的详细说明,添加Firebase
到你的项目中。
第2步:添加依赖项
我们需要向我们的项目添加依赖项。我们需要对Crashlytics
的依赖性。在你的app/build.gradle
中添加依赖项,如下。
dependencies {
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.firebase:firebase-crashlytics:18.2.0'
implementation 'com.google.firebase:firebase-crashlytics-ktx:18.2.0'
// For an optimal experience using Crashlytics, add the Firebase SDK
// for Google Analytics. This is recommended, but not required.
implementation 'com.google.firebase:firebase-analytics:19.0.0'
}
第三步:添加互联网权限
为了连接到 "Firebase",我们需要互联网许可。在你的AndroidManifest.xml
文件中添加以下权限。
<uses-permission android:name="android.permission.INTERNET"/>
第四步:创建布局
我们真的不需要这个布局。我们甚至不使用。然而,我们把它包括在这里,向你展示项目中的所有代码。
activity_main.xml
<?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=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"/>
</RelativeLayout>
第五步:编写代码
我们将同时拥有Kotlin和Java代码。这里是Kotlin的主活动
。
MainActivity.kt
import android.os.Bundle
import android.view.ViewGroup
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.crashlytics.ktx.crashlytics
import com.google.firebase.crashlytics.ktx.setCustomKeys
import com.google.firebase.ktx.Firebase
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
fun setKeysBasic() {
// [START crash_set_keys_basic]
val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
key("my_string_key", "foo") // String value
key("my_bool_key", true) // boolean value
key("my_double_key", 1.0) // double value
key("my_float_key", 1.0f) // float value
key("my_int_key", 1) // int value
}
// [END crash_set_keys_basic]
}
fun resetKey() {
// [START crash_re_set_key]
val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
key("current_level", 3)
key("last_UI_action", "logged_in")
}
// [END crash_re_set_key]
}
fun logReportAndPrint() {
// [START crash_log_report_and_print]
Firebase.crashlytics.log("message")
// [END crash_log_report_and_print]
}
fun logReportOnly() {
// [START crash_log_report_only]
Firebase.crashlytics.log("message")
// [END crash_log_report_only]
}
fun enableAtRuntime() {
// [START crash_enable_at_runtime]
Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
// [END crash_enable_at_runtime]
}
fun setUserId() {
// [START crash_set_user_id]
Firebase.crashlytics.setUserId("user123456789")
// [END crash_set_user_id]
}
@Throws(Exception::class)
fun methodThatThrows() {
throw Exception()
}
fun logCaughtEx() {
// [START crash_log_caught_ex]
try {
methodThatThrows()
} catch (e: Exception) {
Firebase.crashlytics.recordException(e)
// handle your exception here
}
// [END crash_log_caught_ex]
}
fun forceACrash() {
// [START crash_force_crash]
val crashButton = Button(this)
crashButton.text = "Crash!"
crashButton.setOnClickListener {
throw RuntimeException() // Force a crash
}
addContentView(crashButton, ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT))
// [END crash_force_crash]
}
}
这里是java的代码。
MainActivity.java
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import com.google.firebase.crashlytics.FirebaseCrashlytics;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void setKeysBasic() {
// [START crash_set_keys_basic]
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
crashlytics.setCustomKey("my_string_key", "foo" /* string value */);
crashlytics.setCustomKey("my_bool_key", true /* boolean value */);
crashlytics.setCustomKey("my_double_key", 1.0 /* double value */);
crashlytics.setCustomKey("my_float_key", 1.0f /* float value */);
crashlytics.setCustomKey("my_int_key", 1 /* int value */);
// [END crash_set_keys_basic]
}
public void resetKey() {
// [START crash_re_set_key]
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
crashlytics.setCustomKey("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");
// [END crash_re_set_key]
}
public void logReportAndPrint() {
// [START crash_log_report_and_print]
FirebaseCrashlytics.getInstance().log("message");
// [END crash_log_report_and_print]
}
public void logReportOnly() {
// [START crash_log_report_only]
FirebaseCrashlytics.getInstance().log("message");
// [END crash_log_report_only]
}
public void enableAtRuntime() {
// [START crash_enable_at_runtime]
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
// [END crash_enable_at_runtime]
}
public void setUserId() {
// [START crash_set_user_id]
FirebaseCrashlytics.getInstance().setUserId("user123456789");
// [END crash_set_user_id]
}
public void methodThatThrows() throws Exception {
throw new Exception();
}
public void logCaughtEx() {
// [START crash_log_caught_ex]
try {
methodThatThrows();
} catch (Exception e) {
FirebaseCrashlytics.getInstance().recordException(e);
// handle your exception here
}
// [END crash_log_caught_ex]
}
public void forceACrash() {
// [START crash_force_crash]
Button crashButton = new Button(this);
crashButton.setText("Crash!");
crashButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
throw new RuntimeException(); // Force a crash
}
});
addContentView(crashButton, new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
// [END crash_force_crash]
}
}
就这样了。
下载
下载下面的项目。
编号 | 链接 |
---|---|
1. | 下载代码 |