שדרג ל- SDK של Firebase Crashlytics

כעת תוכל להגדיר את Crashlytics באפליקציה שלך על ידי שימוש ב-SDK הרשמי החדש של Firebase Crashlytics, שמציע ממשקי API משופרים שעומדים יותר בקנה אחד עם מוצרי Firebase אחרים ואינטואיטיביים יותר לשימוש.

מדריך זה מתאר כיצד לשדרג ל-SDK החדש מ-SDK מדור קודם. הוא מתאר את השינויים שמגיעים עם ממשקי ה-API החדשים, את הסיבה לשינויים וכיצד לעדכן את הקוד שלך, במידת הצורך.

לפני שאתה מתחיל

Firebase Crashlytics SDK משתמשת AndroidX כתלות, כך שאם האפליקציה משתמשת בגירסאות ישנות יותר של ספריית תמיכה ביישומים, הראשון העבר את האפליקציה אל AndroidX .

שלב 1: הוספת קובץ תצורת Firebase

  1. פתח את גדרות פרויקט . בשנת כרטיס Apps, בחר את שם החבילה של האפליקציה שעבורה צריך קובץ config.

  2. לחץ על google-services.json הורדה לקבל קובץ config Firebase Android שלך ( google-services.json ).

  3. העבר את קובץ התצורה שלך לספריית המודול (ברמת האפליקציה) של האפליקציה שלך.

שלב 2: מוסיפים את SDK Firebase Crashlytics

  1. בשנת ברמת השורש של האפליקציה (פרויקט ברמה) build.gradle :

    • החלף את מאגר Maven של Fabric במאגר Maven של גוגל.

    • החלף את הפלאגין Fabric Gradle בתוסף Firebase Crashlytics Gradle. אם אתה משתמש ב- Android Studio 4.1 הקנריים, הקפד להוסיף את Crashlytics Gradle תוסף גרסה 2.0.0 או במאוחר.

    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. ב app ברמה שלך build.gradle , להחליף את תוסף בד עם תוסף Firebase 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. לבסוף, הוסף את Firebase Crashlytics SDK. ב app ברמה שלך build.gradle , להחליף את מורשתו הבד Crashlytics SDK עם SDK Crashlytics Firebase החדש. ודא שאתה מוסיף גרסה 17.0.0 ואילך (החל מ-15 בנובמבר 2020, זה נדרש כדי שדוחות הקריסה שלך יופיעו במסוף 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.7'
    
      // Recommended: Add the Google Analytics SDK
      implementation 'com.google.firebase:firebase-analytics:20.0.2'
    }
    

(אופציונלי) להגדיר דיווח על קריסת NDK

Firebase Crashlytics מציעה דיווח על קריסה עבור אפליקציות שנבנו באמצעות ערכת הפיתוח המקורית של Android (NDK).

כדי לזהות ולדווח על קריסות מקוריות:

  1. ב app ברמה שלך build.gradle הקובץ, להחליף את התלות NDK בד עם תלות Firebase Crashlytics NDK. ואז, להוסיף את firebaseCrashlytics הרחבה ולוודא לאפשר nativeSymbolUploadEnabled הדגל. זה מאפשר היישום שלך כדי תהליך ולהעלות סימני ילידי Crashlytics כך שתוכל להציג עקבות ערימה-symbolicated כראוי מחווני 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.7'
    }
    // ...
    
    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. הפעל את משימות Gradle הספציפיות ל-NDK הבאות:

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

לקבלת מידע נוסף אודות השימוש Crashlytics לדיווח התרסקות NDK, לראות את התיעוד NDK Crashlytics .

שלב 3: עדכן את הקוד שלך

בדוק את השינויים הבאים ב-SDK ובצע את העדכונים המתאימים לקוד שלך:


Crashlytics מסובב כעת מזהים על סמך מזהי התקנת Firebase.

Crashlytics משתמשת ב-Crashlytics Installation UUID כדי לזהות מופעים של האפליקציה שלך וכדי לשייך את הנתונים של המשתמשים שלך למכשירים שלהם. בעבר, Crashlytics סובב את ה-UUID של ההתקנה של המשתמש שלך כאשר מזהה הפרסום של המכשיר שלהם השתנה. כעת, Crashlytics מסובב את ה-UUID של ההתקנה על סמך מזהה ההתקנה של המשתמש (FID) של המשתמש. לקבלת מידע נוסף, בקרו ניהול מזהי התקנת Firebase .

סיבה לשינוי

השימוש ב-FID עולה בקנה אחד עם ערכות SDK אחרות של Firebase.


החבילה ושם הכיתה החדשים עבור Crashlytics הוא com.google.firebase.crashlytics.FirebaseCrashlytics.

כעת אתה יכול להפעיל תכונות של Crashlytics באמצעות שיטות מופע ביחידת FirebaseCrashlytics במקום פונקציות סטטיות במחלקה FirebaseCrashlytics. סינגלטון FirebaseCrashlytics הוא גלובלי נגיש באמצעות getInstance() פונקציה סטטית.

SDK של בד

Java

import com.crashlytics.android.Crashlytics;

// ...

// Operations on Crashlytics.
Crashlytics.someAction()

קוטלין+KTX

import com.crashlytics.android.Crashlytics

// ...

// Operations on Crashlytics.
Crashlytics.someAction()

Firebase Crashlytics SDK

Java

import com.google.firebase.crashlytics.FirebaseCrashlytics;

// ...

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

קוטלין+KTX

import com.google.firebase.crashlytics.FirebaseCrashlytics

// ...

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

סיבה לשינוי

חבילת השורש ונקודת הכניסה של ה-SDK החדש תואמות כעת ל-SDKs אחרים של Firebase. בנוסף, קל יותר ללעוג לשיטות מופע מאשר פונקציות סטטיות ויוצרות פחות אתגרי בדיקה.


FirebaseCrashlytics כבר לא עובד עם Fabric SDK.

כעת, Crashlytics מופעל אוטומטית באמצעות ContentProvider המוגדר ב-Firebase Crashlytics SDK החדש, שאינו משתמש יותר במפתח Fabric API. Crashlytics חברה משתמש באפליקצית google-services.json קובץ לשייך את אפליקציית עם פרויקט Firebase שלך ולשמור נתוני ההתרסקות ההסטוריים שלך.

אם יש לך את המפתח API בד ( io.fabric.ApiKey ) הכריז שלך AndroidManifest.xml הקובץ, להסיר אותה:

<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>

כברירת מחדל, Crashlytics אוטומטית אוסף דיווחים מתרסקים על כול מופעים של האפליקציה שלך, אבל אתה יכול לבחור להפעיל אותו רק עבור משתמשים שבחרו. כדי לכבות את דיווחי התרסקות אוטומטיים, ב <application> גוש שלך AndroidManifest.xml הקובץ, סט firebase_crashlytics_collection_enabled כדי false :

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

סיבה לשינוי

כדי להיות עקבי עם ערכות פיתוח של Firebase אחרות, Crashlytics מופעל כעת באופן אוטומטי דרך ספק תוכן. כמו עם ערכות SDK אחרים, זה מספק כעת דגל מניפסט לאוסף נתונים אוטומטי להשבית, אשר אתה יכול לעקוף בכל עת באמצעות setCrashlyticsCollectionEnabled . השיטה מעניקה לך יותר שליטה על התנהגות דיווח הקריסה של האפליקציה שלך.


Crashlytics.log היא כעת שיטת מופע.

ה- SDK החדש כבר לא כולל סטטי Crashlytics.log שיטה. כדי להוסיף הודעות יומן מותאמות אישית, השתמש בשיטת המופע החדש crashlytics.log במקום. שימו לב שהשיטה החדשה כבר לא מהדהדת ל-logcat (אנו ממליצים לכתוב עטיפה אם ברצונכם לשמור על התנהגות זו). לקבלת מידע נוסף, בקר להוסיף הודעות יומן מותאם אישית .

SDK של בד

Java

Crashlytics.log("my message");

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

קוטלין+KTX

Crashlytics.log("my message")

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

Firebase Crashlytics SDK

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");

קוטלין+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")

סיבה לשינוי

לבקשתך, הפסקנו להדהד את יומני Crashlytics ל-logcat. שימוש בשיטות מופע גם מקל על בדיקת הקוד שלך.


setBool, setDouble, setFloat ו-setInt, setLong ו-setString מצטברים לתוך setCustomKey.

קיבצנו את קובעי מפתח מותאם אישית לתוך שיטת setCustomKey . בעבר, אתה יכול להשתמש במגדי המפתחות המותאמים אישית כדי להגדיר צמדי מפתח/ערך לשליחה יחד עם דוח הקריסה שלך. עכשיו, אתה יכול להשתמש setCustomKey(String, value) , אשר עמוס לקבל סוגים פרימיטיביים מחרוזת. לקבלת מידע נוסף, בקר להוסיף מפתחות מותאמים אישית.

SDK של בד

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");

קוטלין+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")

Firebase Crashlytics SDK

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");

קוטלין+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")

סיבה לשינוי

שם השיטה החדש ייחודי ל-Crashlytics ומבהיר ש-Crashlytics אינו תואם לערכים מפתח.


setUserIdentifier הוא כעת setUserId. setUserName ו-setUserEmail יוסרו.

בעבר, אתה יכול להגדיר שם או אימייל המשויכת התרסקות באמצעות setUserName ו setUserEmail , אך שיטות אלו אינן מוגדרות. השיטה המועדפת החדשה למזהים סט למשתמשים שלך היא להשתמש setUserId . לקבלת מידע נוסף, בקר מזהי משתמשים סט.

SDK של בד

Java

Crashlytics.setUserIdentifier("myAppUserId");

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

Crashlytics.setUserName("John Doe");

קוטלין+KTX

Crashlytics.setUserIdentifier("myAppUserId")

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

Crashlytics.setUserName("John Doe")

Firebase Crashlytics SDK

Java

crashlytics.setUserId("myAppUserId");

קוטלין+KTX

crashlytics.setUserId("myAppUserId")

סיבה לשינוי

אנחנו אימצנו את שם השיטה setUserId להיות עקבי עם APIs Firebase אחרים והוציאו setUserName ו setUserEmail כדי להרתיע כניסה PII דרך Crashlytics.


Crashlytics.logException(Throwable) מוחלף ב-FirebaseCrashlytics.recordException(Throwable).

Crashlytics תומך כעת גם ברישום של סוגי השגיאות והחריגים המובנים עבור אפליקציות אפל ואנדרואיד כאחד.

SDK של בד

Java

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

// ...

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

קוטלין+KTX

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

// ...

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

Firebase Crashlytics SDK

Java

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

// ...

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

קוטלין+KTX

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

// ...

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

סיבה לשינוי

השיטה החדשה recordException(Throwable) היא יותר בקלות להבחין בין log(String) , אשר מתנהג בצורה שונה. בנוסף, שינינו את שם ה-API החדש כדי שיהיה עקבי יותר בין הפלטפורמות.


ה-CrashlyticsListener מוחלף ב-didCrashOnPreviousExecution().

ה-CrashlyticsListener אפשר בעבר ל-Crashlytics לציין מתי הפעלת אפליקציה קודמת מסתיימת בקריסה, דבר שימושי עבור אפליקציות המציגות הודעות לאחר התרסקות בעת הפעלה מחדש. עכשיו, ההתקשרות שלה מוחלפת שיחת API סינכרוני didCrashOnPreviousExecution() .

SDK של בד

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);

קוטלין+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)

Firebase Crashlytics SDK

Java

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

קוטלין+KTX

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

סיבה לשינוי

ה-API החדש הוא פחות מילולי ופחות מאתגר לעבוד איתו מאשר ה-CrashlyticsListener מכיוון שהוא לא דורש טקסט של לוח או התקשרות חוזרת. בעבר, ההתקשרות הא-סינכרונית לא הבטיחה מתי יופעל ההתקשרות החוזרת.


שיטת הקריסה מוסרת.

ה-SDK החדש כבר לא כולל את שיטת הקריסה, שבה יכולת בעבר להשתמש כדי לאמת את תצורת Crashlytics שלך על ידי כפיית קריסה באפליקציה שלך. לזרוק RuntimeException לכפות בהתרסקות.

SDK של בד

Java

Crashlytics.getInstance().crash();

קוטלין+KTX

Crashlytics.getInstance().crash()

Firebase Crashlytics SDK

Java

throw new RuntimeException("Test Crash");

קוטלין+KTX

throw RuntimeException("Test Crash")

סיבה לשינוי

השיטות החדשות מציינות בבירור אם קריסות האפליקציה שלך התרחשו במהלך זמן ריצה או ב-SDK המקורי של האפליקציה.


התוסף Crashlytics Gradle מכיל דגלים חדשים.

התוסף Gradle ממשיך להגדיר ולבצע משימות Gradle ספציפיות ל-Crashlytics באופן אוטומטי. אם לבנות שלך דורשת פניית משימות מתוסף Crashlytics Gradle, עיינו משימות Crashlytics Firebase הזמינות על ידי הפעלת ./gradlew app:tasks . אם האפליקציה שלך משתמשת NDK, עליך לציין במפורש להפעיל את uploadCrashlyticsSymbolFile[ BUILD_VARIANT ] משימת Gradle להמשיך בהעלאת סימני ילידי Crashlytics.

הדגלים לבנות Crashlytics הספציפי ext.alwaysUpdateBuildId ו ext.enableCrashlytics אינו נתמך יותר. הסר אותם מתצורת Gradle שלך ​​אם הם קיימים. אם האפליקציה שלך משתמשת Obfuscator bytecode (למשל, R8 או ProGuard) ואתה לא רוצה להעלות קובץ המיפוי של ההצטברות שלך Crashlytics, במבנה החדש של mappingFileUploadEnabled דגל firebaseCrashlytics רחבת Gradle. כאשר מוגדר כ-false, Crashlytics לא יכול לטשטש את מעקבי הערימה של האפליקציה שלך. עבור תצורות Obfuscator שאינם סטנדרטיים, השתמש mappingFile פרמטר להגדיר מיקום חדש עבור קובץ מיפוי שלך. ניתן להשתמש בדגלים אלה עבור defaultConfig, כמו גם עבור כל סוג בנייה או טעם.

Firebase Crashlytics SDK

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.
        }
    }
}

סיבה לשינוי

עדכנו את המשימות ואת אפשרויות התצורה של Gradle כדי להיות עקביים יותר עם מוסכמות Gradle.


Crashlytics יכולה להשתמש רק בנתונים שנאספו על ידי Google Analytics.

אינך יכול עוד לאסוף נתונים עם Fabric Answers לאחר שדרוג ל- Firebase Crashlytics SDK. כדי לקבל מדדים עבור משתמשים ופירורי לחם ללא קריסות, עבור לשימוש ב-Google Analytics במקום זאת. שים לב שנתוני התשובות ההיסטוריים שלך לא יכולים לעבור ל-Firebase.

בקר להתחיל להשתמש ב- Google Analytics כדי ללמוד כיצד להוסיף את Google Analytics באפליקציה.

סיבה לשינוי

כעת אנו מציעים את Google Analytics כדי לעזור לך לקבל יותר תובנות לגבי נתוני הקריסה שלך. עם Analytics, אתה יכול להמשיך לאסוף נתונים סטטיסטיים עבור האפליקציה שלך במסוף Firebase.


הצעדים הבאים