Firebase套件有一个模块,可以让你对你的应用程序可能陷入的问题获得清晰的、可操作的洞察力和报告。这是很强大的,特别是当你正在建立一个对用户至关重要的生产应用。每一秒钟浪费在挖掘日志文件上,都可能导致用户的不满或收入的损失。

因此,"Firebase Crashlytics",一个轻量级的、实时的崩溃报告,可以帮助你跟踪、优先处理和修复侵蚀你的应用程序质量的稳定性问题。它通过对崩溃进行智能分组并突出显示导致崩溃的情况,为你节省故障排除的时间。

你可以发现一个特定的崩溃是否影响了大量的用户。当一个问题的严重程度突然增加时,你可以得到提醒,甚至可以准确地指出哪一行代码导致崩溃。

以下是它的主要功能。

  1. 它策划崩溃报告并提供背景信息,同时强调崩溃的严重性和普遍性。
  2. 2.Crashlytics提供Crash Insights,这些有用的提示突出了常见的稳定性问题,并提供资源,使它们更容易排除故障、处理和解决。
  3. Analytics集成
  4. 实时警报

现在让我们来看看如何设置和使用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

这是一个简单的Firebasecrashlytics的例子。有两个`活动’,一个用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. 下载代码