Catch up on everthing we announced at this year's Firebase Summit. Learn more

Nâng cấp lên SDK Firebase Crashlytics

Giờ đây, bạn có thể thiết lập Crashlytics trong ứng dụng của mình bằng cách sử dụng SDK Firebase Crashlytics chính thức mới, cung cấp các API được cải tiến phù hợp hơn với các sản phẩm Firebase khác và sử dụng trực quan hơn.

Hướng dẫn này mô tả cách nâng cấp lên SDK mới từ SDK vải cũ. Nó mô tả những thay đổi đi kèm với các API mới, lý do thay đổi và cách cập nhật mã của bạn, nếu được yêu cầu.

Trước khi bắt đầu

Các căn cứ hỏa lực Crashlytics SDK sử dụng AndroidX như một sự phụ thuộc, vì thế nếu ứng dụng của bạn sử dụng phiên bản cũ của Thư viện Hỗ trợ ứng dụng, đầu tiên di chuyển ứng dụng của bạn để AndroidX .

Bước 1: Thêm một tập tin cấu hình căn cứ hỏa lực

  1. Mở của bạn Cài đặt dự án . Trong thẻ ứng dụng của bạn, chọn tên gói ứng dụng mà bạn cần một tập tin cấu hình.

  2. Nhấp vào Tải xuống google-services.json để có được tập tin cấu hình căn cứ hỏa lực Android của bạn ( google-services.json ).

  3. Di chuyển tệp cấu hình của bạn vào thư mục mô-đun (cấp ứng dụng) của ứng dụng.

Bước 2: Thêm các căn cứ hỏa lực Crashlytics SDK

  1. Trong thư mục gốc cấp (dự án cấp) ứng dụng của bạn build.gradle :

    • Thay thế kho lưu trữ Maven của Fabric bằng kho lưu trữ Maven của Google.

    • Thay thế plugin Fabric Gradle bằng plugin Firebase Crashlytics Gradle. Nếu bạn đang sử dụng Android Studio 4.1 Canary, hãy chắc chắn để thêm Crashlytics Gradle Plugin phiên bản 2.0.0 hoặc mới hơn.

    buildscript {
      // ...
    
      repositories {
        // ...
    
        // Remove Fabric's Maven repository
        maven { url 'https://maven.fabric.io/public' }
    
        // Add Google's Maven repository (if it's not there already)
        google()
      }
    
      dependencies {
        // ..
    
        // Add the Google Services Gradle plugin (if it's not there already)
        classpath 'com.google.gms:google-services:4.3.10'
    
        // Remove the Fabric Gradle plugin
        classpath 'io.fabric.tools:gradle:1.31.2'
    
        // Add the Crashlytics Gradle plugin (use v2.0.0+ if you built
        // your app with Android Studio 4.1).
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
      }
    }
    
  2. Trong ứng dụng cấp của bạn build.gradle , thay thế các plugin Vải với các plugin căn cứ hỏa lực Crashlytics:

    apply plugin: 'com.android.application'
    
    // Apply the Google Services plugin (if it's not there already)
    apply plugin: 'com.google.gms.google-services'
    
    // Remove the Fabric plugin
    apply plugin: 'io.fabric'
    
    // Add the Firebase Crashlytics plugin
    apply plugin: 'com.google.firebase.crashlytics'
    
  3. Cuối cùng, thêm SDK Firebase Crashlytics. Trong ứng dụng cấp của bạn build.gradle , thay thế các di sản Vải Crashlytics SDK với các căn cứ hỏa lực mới Crashlytics SDK. Đảm bảo bạn thêm phiên bản 17.0.0 trở lên (bắt đầu từ ngày 15 tháng 11 năm 2020, điều này là bắt buộc để báo cáo sự cố của bạn xuất hiện trong bảng điều khiển Firebase).

    dependencies {
      // Remove the Fabric Crashlytics SDK
      implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
    
      // Add the Firebase Crashlytics SDK
      implementation 'com.google.firebase:firebase-crashlytics:18.2.5'
    
      // Recommended: Add the Google Analytics SDK
      implementation 'com.google.firebase:firebase-analytics:20.0.0'
    }
    

(Không bắt buộc) Thiết lập báo cáo tai nạn NDK

Firebase Crashlytics cung cấp báo cáo sự cố cho các ứng dụng được tạo bằng Android Native Development Kit (NDK).

Để phát hiện và báo cáo sự cố gốc:

  1. Trong ứng dụng cấp của bạn build.gradle tập tin, thay thế phụ thuộc với sự phụ thuộc căn cứ hỏa lực Crashlytics NDK Vải NDK. Sau đó, thêm các firebaseCrashlytics mở rộng và chắc chắn để cho phép các nativeSymbolUploadEnabled cờ. Điều này cho phép ứng dụng của bạn để xử lý và tải lên những biểu tượng có nguồn gốc từ Crashlytics, do đó bạn có thể xem dấu vết ngăn xếp đúng-symbolicated trong bảng điều khiển Crashlytics .

    dependencies {
      // Remove the Fabric NDK dependency
      implementation 'com.crashlytics.sdk.android:crashlytics-ndk:2.1.1'
    
      // Add the Firebase Crashlytics NDK dependency
      implementation 'com.google.firebase:firebase-crashlytics-ndk:18.2.5'
    }
    // ...
    
    android {
        // ...
    
        buildTypes {
            release {
                /* Add the firebaseCrashlytics extension (by default,
                * it's disabled to improve build speeds) and set
                * nativeSymbolUploadEnabled to true. */
    
                firebaseCrashlytics {
                    nativeSymbolUploadEnabled true
                }
            }
        }
    }
    
    // Remove this extension (it previously enabled Crashlytics NDK reporting in Fabric)
    crashlytics {
      enableNdk true
    }
    
  2. Chạy các tác vụ Gradle dành riêng cho NDK sau:

    > ./gradlew app:assembleBUILD_VARIANT
    > ./gradlew app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    

Để biết thêm thông tin về việc sử dụng Crashlytics để báo cáo tai nạn NDK, xem tài liệu Crashlytics NDK .

Bước 3: Cập nhật mã của bạn

Xem lại các thay đổi SDK sau đây và thực hiện các cập nhật thích hợp cho mã của bạn:


Crashlytics hiện xoay các ID dựa trên ID cài đặt Firebase.

Crashlytics sử dụng UUID cài đặt Crashlytics để xác định các phiên bản ứng dụng của bạn và để liên kết dữ liệu của người dùng với thiết bị của họ. Trước đây, Crashlytics đã xoay vòng UUID cài đặt của người dùng khi ID quảng cáo trên thiết bị của họ thay đổi. Bây giờ, Crashlytics xoay UUID cài đặt dựa trên ID cài đặt Firebase (FID) của người dùng. Để biết thêm thông tin, hãy truy cập Quản lý ID cài đặt căn cứ hỏa lực .

Lý do cho sự thay đổi

Việc sử dụng FID nhất quán với các SDK Firebase khác.


Gói và tên lớp mới cho Crashlytics là com.google.firebase.crashlytics.FirebaseCrashlytics.

Giờ đây, bạn có thể gọi các tính năng Crashlytics bằng cách sử dụng các phương thức thể hiện trong singleton FirebaseCrashlytics thay vì các hàm tĩnh trong lớp FirebaseCrashlytics. Các FirebaseCrashlytics singleton có thể truy cập trên toàn cầu thông qua getInstance() chức năng tĩnh.

SDK vải

Java

import com.crashlytics.android.Crashlytics;

// ...

// Operations on Crashlytics.
Crashlytics.someAction()

Kotlin + KTX

import com.crashlytics.android.Crashlytics

// ...

// Operations on Crashlytics.
Crashlytics.someAction()

SDK Firebase Crashlytics

Java

import com.google.firebase.crashlytics.FirebaseCrashlytics;

// ...

// Operations on FirebaseCrashlytics.
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
crashlytics.someAction();

Kotlin + KTX

import com.google.firebase.crashlytics.FirebaseCrashlytics

// ...

// Operations on FirebaseCrashlytics.
val crashlytics = FirebaseCrashlytics.getInstance()
crashlytics.someAction()

Lý do cho sự thay đổi

Gói gốc và điểm nhập của SDK mới hiện nhất quán với các SDK Firebase khác. Ngoài ra, các phương thức instance dễ mô phỏng hơn các hàm tĩnh và tạo ra ít thách thức về khả năng kiểm tra hơn.


FirebaseCrashlytics không còn hoạt động với SDK vải.

Giờ đây, Crashlytics tự động khởi động bằng cách sử dụng ContentProvider được xác định trong SDK Firebase Crashlytics mới, không còn sử dụng khóa Fabric API nữa. Crashlytics bây giờ sử dụng ứng dụng của bạn google-services.json tập tin để liên kết các ứng dụng với dự án căn cứ hỏa lực của bạn và giữ lại dữ liệu tai nạn lịch sử của mình.

Nếu bạn có khóa API Vải ( io.fabric.ApiKey ) khai báo trong bạn AndroidManifest.xml file, gỡ bỏ nó:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.your_app_package">

   <application>
      <activity android:name=".MainActivity"/>

      <!-- Remove this line if it exists -->
      <meta-data android:name="io.fabric.ApiKey"
          android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" />

   </application>
</manifest>

Theo mặc định, Crashlytics tự động thu thập và báo cáo tai nạn cho tất cả các trường hợp của ứng dụng của bạn, nhưng bạn có thể chọn để kích hoạt nó chỉ dành cho người dùng lựa chọn. Để tắt báo cáo tai nạn tự động, trong <application> khối của bạn AndroidManifest.xml file, bộ firebase_crashlytics_collection_enabled để false :

<meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" />

Lý do cho sự thay đổi

Để nhất quán với các SDK Firebase khác, Crashlytics hiện tự động khởi động thông qua ContentProvider. Giống như với SDK khác, bây giờ nó cung cấp một lá cờ biểu hiện để thu thập dữ liệu tự động vô hiệu hóa, mà bạn có thể ghi đè lên bất cứ lúc nào sử dụng setCrashlyticsCollectionEnabled . Phương pháp này cung cấp cho bạn nhiều quyền kiểm soát hơn đối với hành vi báo cáo sự cố của ứng dụng.


Crashlytics.log hiện là một phương thức phiên bản.

SDK mới không còn bao gồm một tĩnh Crashlytics.log phương pháp. Để thêm thông điệp log tùy chỉnh, sử dụng phương thức thể hiện mới crashlytics.log để thay thế. Lưu ý rằng phương thức mới không còn lặp lại với logcat (chúng tôi khuyên bạn nên viết một trình bao bọc nếu bạn muốn giữ nguyên hành vi này). Để biết thêm thông tin, hãy truy cập add thông điệp log tùy chỉnh .

SDK vải

Java

Crashlytics.log("my message");

Crashlytics.log(
 Log.ERROR,
 "TAG",
 "my message");

Kotlin + KTX

Crashlytics.log("my message")

Crashlytics.log(
 Log.ERROR,
 "TAG",
 "my message")

SDK Firebase Crashlytics

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.log("my message");

// To log a message to a crash report, use the following syntax:
crashlytics.log("E/TAG: my message");

Kotlin + KTX

val crashlytics = FirebaseCrashlytics.getInstance()

crashlytics.log("my message")

// To log a message to a crash report, use the following syntax:
crashlytics.log("E/TAG: my message")

Lý do cho sự thay đổi

Theo yêu cầu của bạn, chúng tôi đã ngừng lặp lại các bản ghi Crashlytics sang logcat. Sử dụng các phương thức phiên bản cũng giúp kiểm tra mã của bạn dễ dàng hơn.


setBool, setDouble, setFloat và setInt, setLong và setString được tổng hợp thành setCustomKey.

Chúng tôi tổng hợp các setters chìa khóa tùy chỉnh vào phương pháp setCustomKey . Trước đây, bạn có thể sử dụng bộ đặt khóa tùy chỉnh để đặt các cặp khóa / giá trị để gửi cùng với báo cáo sự cố của mình. Bây giờ, bạn có thể sử dụng setCustomKey(String, value) , mà là quá tải để chấp nhận các loại nguyên thủy và String. Để biết thêm thông tin, hãy truy cập Thêm phím tùy chỉnh.

SDK vải

Java

Crashlytics.setBool("bool_key",true);

Crashlytics.setDouble("double_key",42.0);

Crashlytics.setFloat("float_key",42.0F);

Crashlytics.setInt("int_key",42);

Crashlytics.setLong("long_key",42L);

Crashlytics.setString("str_key","str_value");

Kotlin + KTX

Crashlytics.setBool("bool_key",true)

Crashlytics.setDouble("double_key",42.0)

Crashlytics.setFloat("float_key",42.0F)

Crashlytics.setInt("int_key",42)

Crashlytics.setLong("long_key",42L)

Crashlytics.setString("str_key","str_value")

SDK Firebase Crashlytics

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("bool_key",true);

crashlytics.setCustomKey("double_key",42.0);

crashlytics.setCustomKey("float_key",42.0F);

crashlytics.setCustomKey("int_key",42);

crashlytics.setCustomKey("long_key",42L);

crashlytics.setCustomKey("str_key","42");

Kotlin + KTX

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance()

crashlytics.setCustomKey("bool_key",true)

crashlytics.setCustomKey("double_key",42.0)

crashlytics.setCustomKey("float_key",42.0F)

crashlytics.setCustomKey("int_key",42)

crashlytics.setCustomKey("long_key",42L)

crashlytics.setCustomKey("str_key","42")

Lý do cho sự thay đổi

Tên phương thức mới là duy nhất cho Crashlytics và làm rõ rằng Crashlytics không tuân thủ khóa-giá trị.


setUserIdentifier hiện là setUserId. setUserName và setUserEmail bị xóa.

Trước đây, bạn có thể đặt tên hoặc email liên kết với một vụ tai nạn sử dụng setUserNamesetUserEmail , nhưng các phương pháp này không còn được xác định. Phương pháp mới được ưu tiên để thiết lập ID cho người dùng của bạn là sử dụng setUserId . Để biết thêm thông tin, hãy truy cập Set định danh người dùng.

SDK vải

Java

Crashlytics.setUserIdentifier("myAppUserId");

Crashlytics.setUserEmail("abc@example.com");

Crashlytics.setUserName("John Doe");

Kotlin + KTX

Crashlytics.setUserIdentifier("myAppUserId")

Crashlytics.setUserEmail("abc@example.com")

Crashlytics.setUserName("John Doe")

SDK Firebase Crashlytics

Java

crashlytics.setUserId("myAppUserId");

Kotlin + KTX

crashlytics.setUserId("myAppUserId")

Lý do cho sự thay đổi

Chúng tôi đã thông qua tên phương pháp setUserId để phù hợp với căn cứ hỏa lực API khác và loại bỏ setUserNamesetUserEmail để làm nản lòng đăng nhập PII qua Crashlytics.


Crashlytics.logException (Throwable) được thay thế bằng FirebaseCrashlytics.recordException (Throwable).

Crashlytics hiện cũng hỗ trợ ghi lại các loại lỗi và ngoại lệ tích hợp cho cả ứng dụng Apple và Android.

SDK vải

Java

try {
/* Code that can throw checked
exceptions. */

// ...

} catch (Exception e) {
Crashlytics.logException(e);
}

Kotlin + KTX

try {
/* Code that can throw checked
exceptions. */

// ...

catch (e: Exception) {
Crashlytics.logException(e)
}

SDK Firebase Crashlytics

Java

try {
/* Code that can throw checked
exceptions. */

// ...

} catch (Exception e) {
FirebaseCrashlytics.getInstance().recordException(e);
}

Kotlin + KTX

try {
/* Code that can throw checked
exceptions. */

// ...

catch (e: Exception) {
FirebaseCrashlytics.getInstance().recordException(e)
}

Lý do cho sự thay đổi

Phương pháp mới recordException(Throwable) là dễ dàng hơn phân biệt với log(String) , mà ứng xử khác nhau. Ngoài ra, chúng tôi đã đổi tên API mới để nhất quán hơn trên các nền tảng.


CrashlyticsListener được thay thế bằng didCrashOnPreviousExecution ().

CrashlyticsListener trước đây đã cho phép Crashlytics cho biết khi nào phiên ứng dụng trước đó kết thúc trong sự cố, điều này rất hữu ích cho các ứng dụng hiển thị thông báo sau sự cố khi khởi chạy lại. Bây giờ, callback của nó được thay thế bằng đồng bộ gọi API didCrashOnPreviousExecution() .

SDK vải

Java

CrashlyticsListener crashlyticsListener =
new CrashlyticsListener() {
  @Override
  public void crashlyticsDidDetectCrashDuringPreviousExecution() {
    // ...App code to execute if a crash occurred during previous execution.
  }
};

CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder()
                                      .listener(crashlyticsListener)
                                      .build();

Crashlytics crashlytics = new Crashlytics.Builder().core(crashlyticsCore).build();

Fabric.with(getContext(), crashlytics);

Kotlin + KTX

val crashlyticsListener = CrashlyticsListener {
  // ...App code to execute if a crash occurred during previous execution.
}
val crashlyticsCore = CrashlyticsCore.Builder()
  .listener(crashlyticsListener)
  .build()
val crashlytics = Crashlytics.Builder().core(crashlyticsCore).build()
Fabric.with(getContext(), crashlytics)

SDK Firebase Crashlytics

Java

if (FirebaseCrashlytics.getInstance().didCrashOnPreviousExecution()) {
// ...App code to execute if a crash occurred during previous execution.
}

Kotlin + KTX

if (FirebaseCrashlytics.getInstance().didCrashOnPreviousExecution()) {
// ...App code to execute if a crash occurred during previous execution.
}

Lý do cho sự thay đổi

API mới ít dài dòng hơn và ít khó làm việc hơn so với CrashlyticsListener vì nó không yêu cầu văn bản soạn sẵn cũng như không phải gọi lại. Trước đây, lệnh gọi lại không đồng bộ không đảm bảo khi nào lệnh gọi lại sẽ được gọi.


Phương thức sự cố bị loại bỏ.

SDK mới không còn bao gồm phương pháp sự cố mà trước đây bạn có thể sử dụng để xác thực cấu hình Crashlytics của mình bằng cách tạo ra sự cố trong ứng dụng của bạn. Ném một RuntimeException để buộc một vụ tai nạn.

SDK vải

Java

Crashlytics.getInstance().crash();

Kotlin + KTX

Crashlytics.getInstance().crash()

SDK Firebase Crashlytics

Java

throw new RuntimeException("Test Crash");

Kotlin + KTX

throw RuntimeException("Test Crash")

Lý do cho sự thay đổi

Các phương pháp mới chỉ định rõ ràng liệu ứng dụng của bạn có xảy ra sự cố trong thời gian chạy hay trong SDK gốc của ứng dụng hay không.


Plugin Crashlytics Gradle chứa các cờ mới.

Plugin Gradle tiếp tục tự động định cấu hình và thực thi các tác vụ Gradle dành riêng cho Crashlytics. Nếu xây dựng của bạn đòi hỏi phải gọi nhiệm vụ từ các plugin Crashlytics Gradle, hãy tham khảo có sẵn các nhiệm vụ căn cứ hỏa lực Crashlytics bằng cách chạy ./gradlew app:tasks . Nếu ứng dụng của bạn sử dụng một NDK, bạn phải dứt khoát gọi uploadCrashlyticsSymbolFile[ BUILD_VARIANT ] nhiệm vụ Gradle tiếp tục tải lên những biểu tượng có nguồn gốc từ Crashlytics.

Các Crashlytics cụ thể xây dựng cờ ext.alwaysUpdateBuildIdext.enableCrashlytics không còn được hỗ trợ. Xóa chúng khỏi cấu hình Gradle của bạn nếu chúng tồn tại. Nếu ứng dụng của bạn sử dụng một obfuscator bytecode (ví dụ, R8 hoặc Proguard) và bạn không muốn tải lên tập tin bản đồ của xây dựng của bạn để Crashlytics, sử dụng mới mappingFileUploadEnabled cờ trong firebaseCrashlytics mở rộng Gradle. Khi được đặt thành false, Crashlytics không thể giải mã dấu vết ngăn xếp của ứng dụng của bạn. Đối với cấu hình obfuscator phi tiêu chuẩn, sử dụng mappingFile tham số để thiết lập một vị trí mới cho tập tin bản đồ của bạn. Các cờ này có thể được sử dụng cho defaultConfig, cũng như cho bất kỳ loại bản dựng hoặc hương vị nào.

SDK Firebase Crashlytics

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: 'com.google.gms.google-services'

android {
    // ...

    buildTypes {
        debug {
            minifyEnabled true
            firebaseCrashlytics {
                // If you don't need crash reporting for your debug build,
                // you can speed up your build by disabling mapping file uploading.
                mappingFileUploadEnabled false
            }
        }

        release {
            minifyEnabled true
            // When minifyEnabled is set to true, Crashlytics automatically
            // uploads mapping files because the plugin detects that obfuscation
            // is enabled. mappingFileUploadEnabled defaults to true if
            // minifyEnabled is true.
        }
    }
}

Lý do cho sự thay đổi

Chúng tôi đã cập nhật các tác vụ Gradle và các tùy chọn cấu hình để phù hợp hơn với các quy ước của Gradle.


Crashlytics chỉ có thể sử dụng dữ liệu do Google Analytics thu thập.

Bạn không còn có thể thu thập dữ liệu với Câu trả lời vải sau khi nâng cấp lên SDK Firebase Crashlytics. Để có các chỉ số cho người dùng không gặp sự cố và đường dẫn, hãy chuyển sang sử dụng Google Analytics thay thế. Lưu ý rằng dữ liệu Câu trả lời lịch sử của bạn không thể di chuyển sang Firebase.

Thăm Bắt đầu sử dụng Google Analytics để tìm hiểu cách thêm Google Analytics để ứng dụng của bạn.

Lý do cho sự thay đổi

Giờ đây, chúng tôi cung cấp Google Analytics để giúp bạn hiểu rõ hơn về dữ liệu sự cố của mình. Với Analytics, bạn có thể tiếp tục thu thập số liệu thống kê cho ứng dụng của mình trong bảng điều khiển Firebase.


Bước tiếp theo