Firebase Crashlytics SDK'ya yükseltin

Artık, diğer Firebase ürünleriyle daha tutarlı ve kullanımı daha sezgisel olan geliştirilmiş API'ler sunan yeni resmi Firebase Crashlytics SDK'sını kullanarak uygulamanızda Crashlytics'i kurabilirsiniz.

Bu kılavuz, eski Fabric SDK'dan yeni SDK'ya nasıl yükseltileceğini açıklar. Yeni API'lerle birlikte gelen değişiklikleri, değişikliklerin nedenini ve gerekirse kodunuzu nasıl güncelleyeceğinizi açıklar.

Sen başlamadan önce

Firebase Crashlytics SDK uygulama ilk uygulamanızı göç App Destek Kütüphanesi'nin eski sürümlerini kullanan eğer öyleyse, bir bağımlılık olarak AndroidX kullanır AndroidX .

1. Adım: Bir Firebase yapılandırma dosyası ekle

  1. Sizin açın Proje Ayarları . Uygulamalarınız kartında, bir yapılandırma dosyasına ihtiyacınız olan uygulamanın paket adını seçin.

  2. Senin Firebase Android yapılandırma dosyasını edinmek için İndirme google-services.json tıklayın ( google-services.json ).

  3. Yapılandırma dosyanızı uygulamanızın modül (uygulama düzeyi) dizinine taşıyın.

2. Adım: Firebase Crashlytics SDK ekle

  1. Uygulamanızın kök düzeyinde (proje düzeyinde) build.gradle :

    • Fabric'in Maven deposunu Google'ın Maven deposuyla değiştirin.

    • Fabric Gradle eklentisini Firebase Crashlytics Gradle eklentisi ile değiştirin. Android Studio 4.1 Canary kullanıyorsanız, eklenti Crashlytics Gradle eklemeyi unutmayın sürümü 2.0.0 veya sonrası.

    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.7.1'
      }
    }
    
  2. Uygulama düzeyinde ise build.gradle Firebase Crashlytics eklentisi ile Kumaş eklentisi değiştirin:

    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. Son olarak, Firebase Crashlytics SDK'sını ekleyin. Uygulama düzeyinde ise build.gradle , yeni Firebase Crashlytics SDK ile mirasını Kumaş Crashlytics SDK değiştirin. 17.0.0 veya sonraki bir sürümünü eklediğinizden emin olun (15 Kasım 2020'den itibaren, kilitlenme raporlarınızın Firebase konsolunda görünmesi için bu gereklidir).

    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.1'
    
      // Recommended: Add the Google Analytics SDK
      implementation 'com.google.firebase:firebase-analytics:19.0.1'
    }
    

NDK kazasında raporlama kadar (İsteğe bağlı) Seti

Firebase Crashlytics, Android Yerel Geliştirme Kiti (NDK) kullanılarak oluşturulan uygulamalar için kilitlenme raporlaması sunar.

Yerel çökmeleri tespit etmek ve bildirmek için:

  1. Uygulama düzeyinde ise build.gradle dosyası Firebase Crashlytics NDK bağımlılık ile Kumaş NDK bağımlılığı değiştirin. Ardından eklemek firebaseCrashlytics uzantısı ve etkinleştirdiğinizden emin olun nativeSymbolUploadEnabled bayrağı. Bu sürece uygulamanızı sağlar ve düzgün-symbolicated yığın izlerini görüntüleyebilmek için Crashlytics özgü sembolleri karşıya Crashlytics pano .

    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.1'
    }
    // ...
    
    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. Aşağıdaki NDK'ya özgü Gradle görevlerini çalıştırın:

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

NDK kazasında raporlama için Crashlytics kullanma hakkında daha fazla bilgi için bkz Crashlytics NDK belgelerine .

3. Adım: kodunuzu güncelleme

Aşağıdaki SDK değişikliklerini inceleyin ve kodunuz için uygun güncellemeleri yapın:


Crashlytics artık kimlikleri Firebase kurulum kimliklerine göre değiştiriyor.

Crashlytics, uygulamanızın örneklerini belirlemek ve kullanıcılarınızın verilerini cihazlarıyla ilişkilendirmek için Crashlytics Kurulum UUID'sini kullanır. Daha önce Crashlytics, cihazının reklam kimliği değiştiğinde kullanıcınızın Kurulum UUID'sini değiştiriyordu. Artık Crashlytics, kullanıcının Firebase kurulum kimliğine (FID) göre Kurulum UUID'sini döndürüyor. Daha fazla bilgi için, ziyaret Firebase kurulum kimlikleri yönetme .

değişmek için sebep

FID'lerin kullanılması, diğer Firebase SDK'ları ile tutarlıdır.


Crashlytics için yeni paket ve sınıf adı com.google.firebase.crashlytics.FirebaseCrashlytics'dir.

Artık FirebaseCrashlytics sınıfındaki statik işlevler yerine FirebaseCrashlytics singleton'daki örnek yöntemlerini kullanarak Crashlytics özelliklerini çağırabilirsiniz. FirebaseCrashlytics tekil yoluyla global olarak erişilebilir getInstance() statik işlevi.

Kumaş SDK'sı

Java

import com.crashlytics.android.Crashlytics;

// ...

// Operations on Crashlytics.
Crashlytics.someAction()

Kotlin+KTX

import com.crashlytics.android.Crashlytics

// ...

// Operations on Crashlytics.
Crashlytics.someAction()

Firebase Crashlytics SDK'sı

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

değişmek için sebep

Yeni SDK'nın kök paketi ve giriş noktası artık diğer Firebase SDK'ları ile uyumludur. Ek olarak, örnek yöntemleriyle alay edilmesi statik işlevlerden daha kolaydır ve daha az test edilebilirlik zorluğu yaratır.


FirebaseCrashlytics artık Fabric SDK ile çalışmamaktadır.

Artık Crashlytics, artık Fabric API anahtarını kullanmayan yeni Firebase Crashlytics SDK'sında tanımlanan bir ContentProvider kullanılarak otomatik olarak başlatılıyor. Crashlytics artık uygulamanızın kullandığı google-services.json sizin Firebase proje ile uygulamayı ilişkilendirmek ve tarihsel kaza verilerini korumak için dosyayı.

Eğer (Kumaş API anahtarı varsa io.fabric.ApiKey ) sizin bildirilen AndroidManifest.xml dosyası çıkarı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>

Varsayılan olarak, Crashlytics otomatik toplar ve raporları, uygulamanızın tüm örneklerini çöküyor, ama sadece etkinleştiren kullanıcıların bunu etkinleştirmeyi seçebilir. İçinde otomatik kilitlenme raporlamayı devre dışı bırakmak için <application> sizin blok AndroidManifest.xml dosyası, set firebase_crashlytics_collection_enabled için false :

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

değişmek için sebep

Diğer Firebase SDK'larıyla tutarlı olması için Crashlytics artık bir ContentProvider aracılığıyla otomatik olarak başlatılıyor. Diğer SDK'larıyla gibi, şimdi kullanarak istediğiniz zaman geçersiz kılabilirsiniz devre dışı otomatik veri toplama, bir apaçık bayrağı sağlar setCrashlyticsCollectionEnabled . Yöntem, uygulamanızın kilitlenme raporlama davranışı üzerinde size daha fazla kontrol sağlar.


Crashlytics.log artık bir örnek yöntemidir.

Yeni SDK artık statik içerir Crashlytics.log yöntemi. Özel günlük iletileri eklemek için, yeni örnek yöntemi kullanmak crashlytics.log yerine. Yeni yöntemin artık logcat'e yansımadığını unutmayın (bu davranışı korumak istiyorsanız bir sarmalayıcı yazmanızı öneririz). Daha fazla bilgi için ziyaret edin eklenti özel günlük iletileri .

Kumaş SDK'sı

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

Firebase Crashlytics SDK'sı

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

değişmek için sebep

İsteğiniz üzerine, Crashlytics günlüklerini logcat'e yansıtmayı durdurduk. Örnek yöntemlerini kullanmak, kodunuzu test etmeyi de kolaylaştırır.


setBool, setDouble, setFloat ve setInt, setLong ve setString setCustomKey içinde toplanır.

Biz yöntem, özel anahtar belirleyiciler toplanmış setCustomKey . Önceden, kilitlenme raporunuzla birlikte gönderilecek anahtar/değer çiftlerini ayarlamak için özel anahtar ayarlayıcıları kullanabiliyordunuz. Şimdi, kullanabileceğiniz setCustomKey(String, value) ilkel ve dize türlerini kabul aşırı yüklendi. Daha fazla bilgi için, ziyaret Özel anahtarlar ekleyin.

Kumaş SDK'sı

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

Firebase Crashlytics SDK'sı

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

değişmek için sebep

Yeni yöntem adı Crashlytics'e özeldir ve Crashlytics'in anahtar/değer uyumlu olmadığını açıkça ortaya koymaktadır.


setUserIdentifier artık setUserId'dir. setUserName ve setUserEmail kaldırılır.

Daha önce, kullanarak bir çökme olayıyla ilişkili ad veya e-posta ayarlayabilirsiniz setUserName ve setUserEmail , ancak bu yöntemler artık tanımlanmıştır. Kullanıcılar için belirlenmiş kimlikleri yeni tercih edilen yöntem kullanmaktır setUserId . Daha fazla bilgi için, ziyaret belirle kullanıcı tanımlayıcıları.

Kumaş SDK'sı

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

Firebase Crashlytics SDK'sı

Java

crashlytics.setUserId("myAppUserId");

Kotlin+KTX

crashlytics.setUserId("myAppUserId")

değişmek için sebep

Biz yöntem adı benimsenmiştir setUserId diğer Firebase API'leri ve kaldırılan ile tutarlı olması için setUserName ve setUserEmail Crashlytics aracılığıyla PII günlüğü vazgeçirmek için.


Crashlytics.logException(Throwable), FirebaseCrashlytics.recordException(Throwable) ile değiştirilir.

Crashlytics artık hem Android hem de iOS için yerleşik hata ve istisna türlerinin günlüğe kaydedilmesini de destekliyor.

Kumaş SDK'sı

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

Firebase Crashlytics SDK'sı

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

değişmek için sebep

Yeni yöntem recordException(Throwable) daha kolay bir şekilde ayırt ila log(String) farklı davranır. Ayrıca, platformlar arasında daha tutarlı olması için yeni API'yi yeniden adlandırdık.


CrashlyticsListener, didCrashOnPreviousExecution() ile değiştirilir.

CrashlyticsListener, daha önce Crashlytics'in önceki bir uygulama oturumunun bir kilitlenmeyle ne zaman sona erdiğini belirtmesine izin verdi; bu, yeniden başlatma sırasında kilitlenme sonrası mesajları görüntüleyen uygulamalar için kullanışlıdır. Şimdi, onun geri arama senkronize API çağrısı ile değiştirilmiştir didCrashOnPreviousExecution() .

Kumaş SDK'sı

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)

Firebase Crashlytics SDK'sı

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

değişmek için sebep

Yeni API, ne ortak metin ne de bir geri arama gerektirmediğinden CrashlyticsListener'dan daha az ayrıntılı ve çalışmak için daha az zorlayıcıdır. Önceden, zaman uyumsuz geri arama, geri aramanın ne zaman çağrılacağını garanti etmiyordu.


Çarpışma yöntemi kaldırıldı.

Yeni SDK, daha önce uygulamanızda bir kilitlenmeye zorlayarak Crashlytics yapılandırmanızı doğrulamak için kullanabileceğiniz kilitlenme yöntemini artık içermiyor. Bir atın RuntimeException bir kilitlenmeyi zorlamak için.

Kumaş SDK'sı

Java

Crashlytics.getInstance().crash();

Kotlin+KTX

Crashlytics.getInstance().crash()

Firebase Crashlytics SDK'sı

Java

throw new RuntimeException("Test Crash");

Kotlin+KTX

throw RuntimeException("Test Crash")

değişmek için sebep

Yeni yöntemler, uygulamanızın neden olduğu kilitlenmelerin çalışma zamanı sırasında mı yoksa uygulamanın yerel SDK'sında mı meydana geldiğini açıkça belirtir.


Crashlytics Gradle eklentisi yeni bayraklar içerir.

Gradle eklentisi, Crashlytics'e özgü Gradle görevlerini otomatik olarak yapılandırmaya ve yürütmeye devam eder. Oluşturduğunuz yapı Crashlytics Gradle eklentisinden görevleri yürütmesini gerektiriyorsa, çalıştırarak mevcut Firebase Crashlytics görevlere bakın ./gradlew app:tasks . Uygulamanız bir NDK kullanıyorsa, açıkça çağırmak gerekir uploadCrashlyticsSymbolFile[ BUILD_VARIANT ] Gradle görev Crashlytics özgü sembolleri yüklemeye devam etmek.

Crashlytics özgü yapı bayrakları ext.alwaysUpdateBuildId ve ext.enableCrashlytics artık desteklenmemektedir. Varsa, bunları Gradle yapılandırmanızdan kaldırın. Uygulama (örneğin R8 veya Proguard) Bayt kodu obfuscator kullanıyorsa ve Crashlytics için build en eşleme dosyası yüklemek istemiyorsanız, yeni kullanmak mappingFileUploadEnabled bayrağı firebaseCrashlytics Gradle uzantısı. Yanlış olarak ayarlandığında Crashlytics, uygulamanızın yığın izlerinin gizliliğini kaldıramaz. Standart dışı obfuscation yapılandırmaları için kullanmak mappingFile sizin eşleme dosyası için yeni bir konum belirlemek için parametre. Bu bayraklar, defaultConfig için ve ayrıca herhangi bir yapı türü veya lezzet için kullanılabilir.

Firebase Crashlytics SDK'sı

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

değişmek için sebep

Gradle kurallarıyla daha tutarlı olması için Gradle görevlerini ve yapılandırma seçeneklerini güncelledik.


Crashlytics, yalnızca Google Analytics tarafından toplanan verileri kullanabilir.

Firebase Crashlytics SDK'ya yükselttikten sonra Yapı Yanıtları ile artık veri toplayamazsınız. Kilitlenmeyen kullanıcılar ve içerik haritaları için metrikler almak için bunun yerine Google Analytics'i kullanmaya geçin. Geçmiş Yanıtlar verilerinizin Firebase'e taşınamayacağını unutmayın.

Ziyaret Başlangıç Google Analytics kullanarak uygulamanıza Google Analytics ekleyerek öğrenmek için.

değişmek için sebep

Artık kilitlenme verileriniz hakkında daha fazla bilgi edinmenize yardımcı olmak için Google Analytics'i sunuyoruz. Analytics ile Firebase konsolunda uygulamanız için istatistik toplamaya devam edebilirsiniz.


Sonraki adımlar