| Platform seçin: | iOS+ Android Android NDK Web Flutter Unity |
Android uygulamanızda yerel kitaplıklar kullanıyorsanız uygulamanızın derleme yapılandırmasında birkaç küçük güncelleme yaparak Firebase Crashlytics üzerinden yerel kodunuz için tam yığın izlemeleri ve ayrıntılı kilitlenme raporlarını etkinleştirebilirsiniz.
Bu kılavuzda, NDK için Firebase Crashlytics SDK'sı ile Crash Reporting'in nasıl yapılandırılacağı açıklanmaktadır.
Unity projelerinizde Crashlytics kullanmaya nasıl başlayacağınızı öğrenmek istiyorsanız Unity Başlangıç Kılavuzu'na göz atın.
Başlamadan önce
Henüz yapmadıysanız Android projenize Firebase'i ekleyin. Android uygulamanız yoksa örnek uygulama indirebilirsiniz.
Önerilir: Kilitlenme, önemli olmayan hata veya ANR etkinliğine yol açan kullanıcı işlemlerini anlamak için otomatik olarak breadcrumb günlükleri almak istiyorsanız Firebase projenizde Google Analytics özelliğini etkinleştirmeniz gerekir.
Yeni bir Firebase projesi oluşturuyorsanız proje oluşturma iş akışı sırasında Google Analytics hizmetini etkinleştirin.
Google Analytics etkinleştirilmemiş mevcut bir Firebase projesi kullanıyorsanız Firebase konsolunun
Ayarlar > Entegrasyonlar sayfasında etkinleştirebilirsiniz.
Uygulamanızın aşağıdaki minimum gerekli 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ünü kontrol etmek için Firebase Android BoM kullanmanızı öneririz.
Crashlytics ile en iyi deneyimi yaşamak için Firebase projenizde Google Analytics özelliğini etkinleştirmenizi ve Google Analytics için Firebase SDK'sını uygulamanıza eklemenizi öneririz.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.1.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 kullanarak uygulamanızın her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanmasını sağlayabilirsiniz.
(Alternatif) BoM kullanmadan Firebase kitaplığı bağımlılıklarını ekleme
Firebase BoM kullanmamayı tercih ederseniz her Firebase kitaplığı sürümünü kendi 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 olduğundan emin olabilirsiniz.
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:21.0.1") implementation("com.google.firebase:firebase-analytics:24.0.0") }
2. adım: Crashlytics Gradle eklentisini uygulamanıza ekleyin
Kök düzeyindeki (proje düzeyindeki) Gradle dosyanızda (
<project>/build.gradle.ktsveya<project>/build.gradle), Crashlytics Gradle eklentisinipluginsbloğ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.5.0" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.8" 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.5.0' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.8' apply false }
Modülünüzün (uygulama düzeyinde) Gradle dosyasına (genellikle
<project>/<app-module>/build.gradle.ktsveya<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ünüzün (uygulama düzeyinde) Gradle dosyasında (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 yüklenmesini ayarlayın
NDK kilitlenmelerinden okunabilir yığın izlemeleri (stack trace) oluşturmak için Crashlytics, yerel ikili programlarınızdaki sembolleri bilmelidir. Crashlytics Gradle eklentisi, bu süreci otomatikleştirmek için uploadCrashlyticsSymbolFileBUILD_VARIANT görevini içerir.
Otomatik sembol yükleme görevine erişebilmek için modülünüzün (uygulama düzeyinde) Gradle dosyasında
nativeSymbolUploadEnableddeğerinintrueolarak ayarlandığından emin olun.Yöntem adlarının yığın izlemelerinizde görünmesi için NDK kitaplığınızın her derlemesinden sonra
uploadCrashlyticsSymbolFileBUILD_VARIANTgörevini açıkça çağırmanız gerekir. Örneğin:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
NDK için Crashlytics SDK'sı ve Crashlytics Gradle eklentisi, yerel paylaşılan nesnelerde GNU derleme kimliğinin bulunmasına bağlıdır.
Her ikili dosyada
komutunu çalıştırarak bu kimliğin varlığını doğrulayabilirsiniz. Derleme kimliği yoksa sorunu düzeltmek için derleme sisteminizin işaretlerinereadelf -n ekleyin.-Wl,--build-id
5. adım: Kurulumu tamamlamak için test amaçlı bir kilitlenme zorunlu kılın
Crashlytics kurulumunu tamamlamak ve Firebase konsolunun Crashlytics kontrol panelinde ilk verileri görmek için test amaçlı bir kilitlenme zorlamanız gerekir.
Uygulamanıza, test amaçlı kilitlenme zorlamak için kullanabileceğiniz bir kod ekleyin.
Uygulamanızın
MainActivitydosyasına aşağıdaki kodu ekleyerek uygulamanıza basıldığında kilitlenmeye neden olan bir düğme ekleyebilirsiniz. Düğme "Test Crash" (Kilitlenme Testi) olarak etiketlenmiştir.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));
Uygulamanızı derleyip çalıştırın.
Uygulamanızın ilk kilitlenme raporunu göndermek için test kilitlenmesini zorunlu kılın:
Test cihazınızdan veya emülatörünüzden uygulamanızı açın.
Uygulamanızda, yukarıdaki kodu kullanarak eklediğiniz "Test Crash" düğmesine basın.
Uygulamanız kilitlendikten sonra, kilitlenme raporunu Firebase'e gönderebilmesi için uygulamayı yeniden başlatın.
Test kilitlenme raporunuzu kontrol etmek için Firebase konsolunda DevOps ve Etkileşim > Crashlytics kontrol paneline gidin.
Konsolu yenilediyseniz ve beş dakika sonra test kilitlenmesini hâlâ 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ızı kilitlenmelere karşı izliyor. Kilitlenme raporlarını ve istatistiklerini Crashlytics kontrol panelinde görüntüleyip inceleyebilirsiniz.
Sonraki adımlar
(Önerilir) GWP-ASan raporlarını toplayarak yerel bellek hatalarından kaynaklanan kilitlenmelerde hata ayıklama konusunda yardım alın. Bellekle ilgili bu hatalar, uygulamanızdaki bellek bozulmasıyla ilişkili olabilir. Bu durum, uygulama güvenliği 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.
İsteğe bağlı raporlama, günlükler, anahtarlar ve önemli olmayan hataların izlenmesini ekleyerek kilitlenme raporu kurulumunuzu özelleştirin.
Google Play ile entegrasyon sayesinde Android uygulamanızın kilitlenme raporlarını Google Play kanalına göre filtreleyebilir ve doğrudan Crashlytics kontrol panelinden takip edebilirsiniz. Bu sayede, kontrol panelinizi belirli derlemelere daha iyi odaklayabilirsiniz.
Sorun giderme
Firebase konsolunda ve logcat'te farklı yığın izlemeler görüyorsanız Sorun giderme kılavuzuna 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çenekler faydalı olabilir.
Seçenek: Kitaplık modülleri ve harici bağımlılıklar için sembolleri 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ğlanıyorsa
- Otomatik sembol yükleme görevi başarısız oluyorsa veya Crashlytics kontrol panelinde sembolize edilmemiş kilitlenmeler görüyorsanız
Seçenek: Gradle olmayan derlemeler veya erişilemeyen, çıkarılmamış yerel kitaplıklar için sembol yükleme
Bu seçenek aşağıdaki durumlarda faydalı olabilir:
Gradle dışında bir derleme işlemi kullanıyorsanız
Sıkıştırılmamış yerel kitaplıklarınız, Gradle derlemeleri sırasında erişilemeyecek şekilde sağlanıyorsa