Android uygulamanız yerel kitaplıklar içeriyorsa uygulamanızın derleme yapılandırmasında birkaç küçük güncelleme yaparak Firebase Crashlytics'ten yerel kodunuz için tam yığın izlemeyi ve ayrıntılı kilitlenme raporlarını etkinleştirebilirsiniz.
Bu kılavuzda, NDK için Firebase Crashlytics SDK'sı ile kilitlenme raporunun nasıl yapılandırılacağı açıklanmaktadır.
Unity projelerinizde Crashlytics'i 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 bir örnek uygulama indirebilirsiniz.
Önerilen: Kilitlenme, önemli olmayan veya ANR etkinliğiyle sonuçlanan kullanıcı işlemlerini anlamak için içerik haritası günlüklerini otomatik olarak almak için Firebase projenizde Google Analytics'i etkinleştirmeniz gerekir.
Mevcut Firebase projenizde Google Analytics etkin değilse Firebase konsolunda
'nın > Proje ayarlarıEntegrasyonlar sekmesinden Google Analytics'i etkinleştirebilirsiniz. Yeni bir Firebase projesi oluşturuyorsanız proje oluşturma iş akışı sırasında Google Analytics'i etkinleştirin.
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 (uygulama düzeyinde) Gradle dosyanıza (genellikle<project>/<app-module>/build.gradle.kts
veya
<project>/<app-module>/build.gradle
) Android için Crashlytics NDK kitaplığına yönelik bağımlılığı ekleyin. Kitaplık sürümünü kontrol etmek için Firebase Android BoM'u kullanmanızı öneririz.
Crashlytics ile optimum deneyim için, Firebase projenizde Google Analytics'i 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:33.1.1")) // 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 her zaman uyumlu sürümlerini kullanır.
(Alternatif) BoM'u kullanmadan Firebase kitaplığı bağımlılıklarını ekleme
Firebase BoM'yi kullanmamayı seçerseniz her Firebase kitaplığı 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. Böylece 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:19.0.2") implementation("com.google.firebase:firebase-analytics:22.0.2") }
2. Adım: Crashlytics Gradle eklentisini uygulamanıza ekleyin
Kök düzeyindeki (proje düzeyinde) Gradle dosyanızda (
<project>/build.gradle.kts
veya<project>/build.gradle
), Crashlytics Gradle eklentisiniplugins
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.2" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.2" 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.2' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.2' apply false }
Modülünüze (uygulama düzeyinde) Gradle dosyanıza (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 simgelerin otomatik yüklenmesini ayarlayın
NDK kilitlenmelerinden okunabilir yığın izlemeler oluşturmak için Crashlytics'in yerel ikili programlarınızdaki semboller hakkında bilgi sahibi olması gerekir. Crashlytics Gradle eklentisi bu işlemi otomatikleştiren uploadCrashlyticsSymbolFileBUILD_VARIANT
görevini içerir.
Otomatik simge yükleme görevine erişebilmek için modülünüzde (uygulama düzeyi) Gradle dosyanızda
nativeSymbolUploadEnabled
değerinintrue
olarak 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_VARIANT
görevini açıkça çağırmanız gerekir. Örnek:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
Hem NDK için Crashlytics SDK'sı hem de Crashlytics Gradle eklentisi, paylaşılan yerel nesnelerdeki GNU derleme kimliğinin varlığına bağlıdır.
Her ikili programda
komutunu çalıştırarak bu kimliğin varlığını doğrulayabilirsiniz. Derleme kimliği yoksa sorunu düzeltmek için derleme sisteminizin bayraklarınareadelf -n
ekleyin.-Wl,--build-id
5. Adım: Kurulumu tamamlamak için test kilitlenmesini zorunlu kılın
Crashlytics'in kurulumunu tamamlamak ve Firebase konsolunun Crashlytics kontrol panelinde ilk verileri görmek için test kilitlenmesini zorunlu kılmanız gerekir.
Uygulamanıza, test kilitlenmesini zorlamak için kullanabileceğiniz bir kod ekleyin.
Uygulamanıza basıldığında kilitlenmeye neden olan bir düğme eklemek için uygulamanızın
MainActivity
bölümünde aşağıdaki kodu kullanabilirsiniz. Düğmede "Kilitlenmeyi Test Et" etiketi bulunuyor.Kotlin+KTX
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 "Kilitlenmeyi Test Et" düğmesine basın.
Kilitlendikten sonra uygulamanızın kilitlenme raporunu Firebase'e gönderebilmesi için uygulamayı yeniden başlatın.
Test kilitlenmenizi görmek için Firebase konsolunun Crashlytics kontrol paneline gidin.
Konsolu yenilediyseniz ve beş dakika geçmesine rağmen 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ük kaydını etkinleştirin.
Hepsi bu kadar! Crashlytics artık uygulamanızı kilitlenmelere karşı izliyor. Ayrıca, Crashlytics kontrol panelinde kilitlenme raporlarını ve istatistiklerini görüntüleyip inceleyebilirsiniz.
Sonraki adımlar
(Önerilir) GWP-ASan raporlarını toplayarak yerel bellek hatalarının neden olduğu kilitlenmeleri ayıklama konusunda yardım alın. Bellekle ilgili bu hatalar, uygulamanızdaki bellek bozulmasıyla ilişkilendirilebilir. Bu durum, uygulama güvenliği açıklarının önde gelen 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'sının (v18.3.6 ve sonraki sürümleri veya Firebase BoM v31.3.0 ve sonraki sürümleri) kullanıldığından emin olun.
Etkinleştirme raporları, günlükler, anahtarlar ve önemli olmayan hataların izlenmesini ekleyerek kilitlenme raporu ayarlarınızı özelleştirin.
Google Play ile entegre ederek Android uygulamanızın kilitlenme raporlarını doğrudan Crashlytics kontrol panelinde Google Play kanalına göre filtreleyebilirsiniz. Bu sayede kontrol panelinizde belirli derlemelere daha iyi odaklanabilirsiniz.
Sorun giderme
Firebase konsolunda ve logcat'te farklı yığın izlemeler (stack trace) görüyorsanız Sorun giderme kılavuzuna bakın.
Simge yüklemek için alternatif seçenekler
Yukarıdaki bu sayfada yer alan ana iş akışı, standart Gradle derlemeleri için geçerlidir. Ancak bazı uygulamalar farklı bir yapılandırma veya araçlar kullanır (örneğin, Gradle dışında bir derleme işlemi). Bu durumlarda, aşağıdaki seçenekler simgeleri başarıyla yüklemek için yararlı olabilir.
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 işlemi kullanıyorsanız
- Yerel kitaplıklarınız bir kitaplık/özellik modülünde oluşturulmuş veya üçüncü taraflarca sağlanmışsa
- Otomatik simge yükleme görevi başarısız oluyorsa veya kontrol panelinde sembolik olmayan kilitlenmeler görüyorsanız
Seçenek: Gradle olmayan derlemeler veya erişilemeyen sade yerel kitaplıklar için semboller yükleyin
Bu seçenek aşağıdaki durumlarda faydalı olabilir:
Gradle dışında bir derleme işlemi kullanıyorsanız
Size sadeleştirilmemiş yerel kitaplıklar, Gradle derlemeleri sırasında erişilemeyecek şekilde sunulursa