Firebase Crashlytics'i kullanmaya başlayın


Android uygulamanız yerel kitaplıklar içeriyorsa uygulamanızın derleme yapılandırmasında birkaç küçük güncelleme yaparak Firebase Crashlytics bölümünden yerel kodunuz için tam yığın izlemelerini ve ayrıntılı kilitlenme raporlarını etkinleştirebilirsiniz.

Bu kılavuzda, NDK için Firebase Crashlytics SDK'sı ile kilitlenme raporlamasının nasıl yapılandırılacağı açıklanmaktadır.

Unity projelerinizde Crashlytics'ı kullanmaya nasıl başlayacağınızı öğrenmek istiyorsanız Unity'yi kullanmaya başlama kılavuzuna göz atın.

Başlamadan önce

  1. Henüz yapmadıysanız Android projenize Firebase'i ekleyin. Android uygulamanız yoksa örnek bir uygulama indirebilirsiniz.

  2. Önerilir: Kilitlenme, ölümcül olmayan veya ANR etkinliğine yol açan kullanıcı işlemlerini anlamak için izleme kaydı günlüklerini otomatik olarak almak istiyorsanız Firebase projenizde Google Analytics seçeneğini etkinleştirmeniz gerekir.

    • Mevcut Firebase projenizde Google Analytics etkin değilse Firebase konsolunda > Proje ayarları bölümündeki Entegrasyonlar sekmesinden Google Analytics özelliğini etkinleştirebilirsiniz.

    • Yeni bir Firebase projesi oluşturuyorsanız proje oluşturma iş akışı sırasında Google Analytics etkinleştirin.

  3. Uygulamanızın aşağıdaki minimum sürümlere sahip olduğundan emin olun:

    • Gradle 8.0
    • Android Gradle eklentisi 8.1.0
    • Google hizmetleri Gradle eklentisi 4.4.1

1. adım: NDK için Crashlytics SDK'sını uygulamanıza ekleyin

Modülünüzün (uygulama düzeyinde) Gradle dosyasında (genellikle <project>/<app-module>/build.gradle.kts veya <project>/<app-module>/build.gradle), Android için Crashlytics NDK kitaplığına olan bağımlılığı ekleyin. Kitaplık sürüm kontrolü için Firebase Android BoM kullanmanızı öneririz.

Crashlytics ile optimum deneyim için Firebase projenizde Google Analytics'yi etkinleştirmenizi ve uygulamanıza Google Analytics için Firebase SDK'sını eklemenizi öneririz.

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:34.3.0"))

    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation("com.google.firebase:firebase-crashlytics-ndk")
    implementation("com.google.firebase:firebase-analytics")
}

Firebase Android BoM kullanıldığında uygulamanız Firebase Android kitaplıklarının daima uyumlu sürümlerini kullanır.

(Alternatif)  Firebase kitaplığı bağımlılıklarını BoM kullanmadan ekleyin.

Firebase BoM kullanmamayı tercih ederseniz her Firebase kitaplık sürümünü bağımlılık satırında belirtmeniz gerekir.

Uygulamanızda birden fazla Firebase kitaplığı kullanıyorsanız kitaplık sürümlerini yönetmek için BoM kullanmanızı önemle tavsiye ederiz. Bu sayede tüm sürümlerin uyumlu olması sağlanır.

dependencies {
    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation("com.google.firebase:firebase-crashlytics-ndk:20.0.2")
    implementation("com.google.firebase:firebase-analytics:23.0.0")
}

2. adım: Uygulamanıza Crashlytics Gradle eklentisini ekleyin

  1. Kök düzeyindeki (proje düzeyindeki) Gradle dosyanızda (<project>/build.gradle.kts veya <project>/build.gradle), Crashlytics Gradle eklentisini plugins bloğuna ekleyin:

    Kotlin

    plugins {
        // Make sure that you have the AGP plugin 8.1+ dependency
        id("com.android.application") version "8.1.4" apply false
        // ...
    
        // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency
        id("com.google.gms.google-services") version "4.4.3" apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id("com.google.firebase.crashlytics") version "3.0.6" apply false
    }

    Groovy

    plugins {
        // Make sure that you have the AGP plugin 8.1+ dependency
        id 'com.android.application' version '8.1.4' apply false
        // ...
    
        // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency
        id 'com.google.gms.google-services' version '4.4.3' apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id 'com.google.firebase.crashlytics' version '3.0.6' apply false
    }
  2. Modül (uygulama düzeyi) Gradle dosyanızda (genellikle <project>/<app-module>/build.gradle.kts veya <project>/<app-module>/build.gradle) Crashlytics Gradle eklentisini ekleyin:

    Kotlin

    plugins {
      id("com.android.application")
      // ...
    
      // Make sure that you have the Google services Gradle plugin
      id("com.google.gms.google-services")
    
      // Add the Crashlytics Gradle plugin
      id("com.google.firebase.crashlytics")
    }

    Groovy

    plugins {
      id 'com.android.application'
      // ...
    
      // Make sure that you have the Google services Gradle plugin
      id 'com.google.gms.google-services'
    
      // Add the Crashlytics Gradle plugin
      id 'com.google.firebase.crashlytics'
    }

3. adım: Crashlytics uzantısını derlemenize ekleyin

Modül (uygulama düzeyi) Gradle dosyanızda (genellikle <project>/<app-module>/build.gradle.kts veya <project>/<app-module>/build.gradle) Crashlytics uzantısını yapılandırın.

Kotlin

import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension

// ...

android {
  // ...
  buildTypes {
      getByName("release") {
          // Add this extension
          configure<CrashlyticsExtension> {
              // Enable processing and uploading of native symbols to Firebase servers.
              // By default, this is disabled to improve build speeds.
              // This flag must be enabled to see properly-symbolicated native
              // stack traces in the Crashlytics dashboard.
              nativeSymbolUploadEnabled = true
          }
      }
  }
}

Groovy

// ...

android {
  // ...
  buildTypes {
      release {
          // Add this extension
          firebaseCrashlytics {
              // Enable processing and uploading of native symbols to Firebase servers.
              // By default, this is disabled to improve build speeds.
              // This flag must be enabled to see properly-symbolicated native
              // stack traces in the Crashlytics dashboard.
              nativeSymbolUploadEnabled true
          }
      }
  }
}

4. adım: Yerel sembollerin otomatik olarak yüklenmesini ayarlayın

NDK çökmelerinden okunabilir yığın izlemeleri oluşturmak için Crashlytics, yerel ikili dosyalarınızdaki semboller hakkında bilgi sahibi olmalıdır. Crashlytics Gradle eklentisi bu işlemi otomatikleştirmek için uploadCrashlyticsSymbolFileBUILD_VARIANT görevini içerir.

  1. Otomatik sembol yükleme görevine erişebilmek için modülünüzdeki (uygulama düzeyinde) Gradle dosyasında nativeSymbolUploadEnabled seçeneğinin true olarak ayarlandığından emin olun.

  2. Yöntem adlarının yığın izlerinizde görünmesi için NDK kitaplığınızın her derlemesinden sonra uploadCrashlyticsSymbolFileBUILD_VARIANT görevini açıkça çağırmanız gerekir. Örneğin:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
  3. Hem NDK için Crashlytics SDK'sı hem de Crashlytics Gradle eklentisi, yerel paylaşılan nesnelerde GNU derleme kimliğinin bulunmasına bağlıdır.

    Her ikili dosyada readelf -n komutunu çalıştırarak bu kimliğin varlığını doğrulayabilirsiniz. Derleme kimliği yoksa sorunu düzeltmek için derleme sisteminizin işaretlerine -Wl,--build-id ekleyin.

5. adım: Kurulumu tamamlamak için testin kilitlenmesini zorlayın

Crashlytics kurulumunu tamamlamak ve Firebase konsolunun Crashlytics kontrol panelinde ilk verileri görmek için test kilitlenmesini zorlamanız gerekir.

  1. Uygulamanıza, test sırasında kilitlenmeyi zorlamak için kullanabileceğiniz bir kod ekleyin.

    Uygulamanızın MainActivity bölümünde aşağıdaki kodu kullanarak uygulamanıza, basıldığında kilitlenmeye neden olan bir düğme ekleyebilirsiniz. Düğmenin etiketi "Test Çökmesi"dir.

    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));
  2. Uygulamanızı derleyip çalıştırın.

  3. Uygulamanızın ilk kilitlenme raporunu göndermek için test kilitlenmesini zorlayın:

    1. Uygulamanızı test cihazınızdan veya emülatörünüzden açın.

    2. Uygulamanızda, yukarıdaki kodu kullanarak eklediğiniz "Test Crash" (Test Kilitlenmesi) düğmesine basın.

    3. Uygulamanız çöktükten sonra, kilitlenme raporunu Firebase'e gönderebilmesi için uygulamayı yeniden başlatın.

  4. Test kilitlenmenizi görmek için Crashlytics kontrol paneline gidin.Firebase

    Konsolu yenilemenize rağmen beş dakika sonra hâlâ test kilitlenmesini görmüyorsanız uygulamanızın kilitlenme raporları gönderip göndermediğini görmek için hata ayıklama günlüğünü etkinleştirin.


Hepsi bu kadar. Crashlytics artık uygulamanızda kilitlenmeleri izliyor. Kilitlenme raporlarını ve istatistiklerini Crashlytics kontrol panelinde görüntüleyip inceleyebilirsiniz.

Sonraki adımlar

  • (Önerilen) Yerel bellek hatalarından kaynaklanan kilitlenmelerin hata ayıklanmasına yardımcı olmak için GWP-ASan raporlarını toplayın. Bellekle ilgili bu hatalar, uygulamanızdaki bellek bozulmasıyla ilişkili olabilir. Bu durum, uygulama güvenlik açıklarının başlıca nedenidir. Bu hata ayıklama özelliğinden yararlanmak için uygulamanızda GWP-ASan'ın açıkça etkinleştirildiğinden ve NDK için en yeni Crashlytics SDK'nın (v18.3.6+ veya Firebase BoM v31.3.0+) kullanıldığından emin olun.

  • Katılımlı raporlama, günlükler, anahtarlar ve ölümcül olmayan hataların izlenmesini ekleyerek kilitlenme raporu kurulumunuzu özelleştirin.

  • Android uygulamanızın kilitlenme raporlarını doğrudan Crashlytics kontrol panelinde Google Play kanalıyla filtreleyebilmek için Google Play ile entegrasyon yapın. Bu sayede, kontrol panelinizi belirli derlemelere daha iyi odaklayabilirsiniz.

Sorun giderme

Firebase konsolunda ve logcat'te farklı yığın izlemeleri görüyorsanız Sorun giderme kılavuzu'na bakın.



Sembol yüklemek için alternatif seçenekler

Yukarıdaki bu sayfadaki ana iş akışı, standart Gradle derlemeleri için geçerlidir. Ancak bazı uygulamalar farklı bir yapılandırma veya araç (ör. Gradle dışında bir derleme süreci) kullanır. Bu durumlarda, sembolleri başarıyla yüklemek için aşağıdaki seçeneklerden yararlanabilirsiniz.

Seçenek: Kitaplık modülleri ve harici bağımlılıklar için sembol yükleme

Bu seçenek aşağıdaki durumlarda faydalı olabilir:

  • Gradle'da özelleştirilmiş bir NDK derleme süreci kullanıyorsanız
  • Yerel kitaplıklarınız bir kitaplık/özellik modülünde oluşturulmuşsa veya üçüncü tarafça sağlanmışsa
  • Otomatik sembol yükleme görevi başarısız oluyorsa veya kontrol panelinde sembolsüz kilitlenmeler görüyorsanız

Seçenek: Gradle olmayan derlemeler veya erişilemeyen, şeritlenmemiş yerel kitaplıklar için sembol yükleyin

Bu seçenek aşağıdaki durumlarda faydalı olabilir:

  • Gradle dışında bir derleme süreci kullanıyorsanız

  • Sıkıştırılmamış yerel kitaplıklarınız, Gradle derlemeleri sırasında erişilemeyecek şekilde sağlanıyorsa