Bu sayfada, sorun giderme yardımı ve Crashlytics kullanımıyla ilgili sık sorulan soruların yanıtları yer almaktadır. Aradığınızı bulamıyorsanız veya daha fazla yardıma ihtiyacınız varsa Firebase Destek Ekibi ile iletişime geçin.
Genel sorun giderme/SSS
Sorunlar tablosunda bazı sorunlar için farklı biçimler (ve bazen "varyantlar") görme
Firebase konsolundaki Sorunlar tablonuzda listelenen sorunlar için iki farklı biçim görebilirsiniz. Ayrıca bazı sorunlarınızda "varyantlar" adlı bir özellik de görebilirsiniz. Bunun nedeni:
2023'ün başlarında, etkinlikleri gruplandırmak için geliştirilmiş bir analiz motorunun yanı sıra güncellenmiş bir tasarım ve yeni sorunlar için bazı gelişmiş özellikler (varyantlar gibi) kullanıma sunduk. Tüm ayrıntılar için son blog yayınımızı inceleyin. Önemli noktaları aşağıda bulabilirsiniz.
Crashlytics, uygulamanızdaki tüm etkinlikleri (ör. kilitlenmeler, önemli olmayan hatalar ve ANR'ler) analiz eder ve sorun adlı etkinlik grupları oluşturur. Bir sorundaki tüm etkinliklerin ortak bir hata noktası vardır.
İyileştirilmiş analiz motoru, etkinlikleri bu sorunlara göre gruplandırmak için artık yığın izlemedeki çerçeveler, istisna mesajı, hata kodu ve diğer platform veya hata türü özellikleri gibi etkinliğin birçok yönünü inceliyor.
Ancak bu etkinlik grubunda, hataya yol açan yığın izlemeler farklı olabilir. Farklı bir yığın izleme, farklı bir temel neden anlamına gelebilir. Bir sorundaki bu olası farkı temsil etmek için artık sorunlarda varyantlar oluşturuyoruz. Her varyant, bir sorundaki aynı hata noktasına ve benzer yığın izlemeye sahip etkinliklerin alt grubudur. Varyantlar sayesinde, bir sorundaki en yaygın yığın izlemelerinden hata ayıklama yapabilir ve farklı temel nedenlerin hataya yol açıp açmadığını belirleyebilirsiniz.
Bu iyileştirmeler sayesinde şunları deneyimleyebilirsiniz:
Sorun satırında gösterilen meta veriler yenilendi
Uygulamanızdaki sorunları anlamak ve önceliklendirmek artık daha kolay.Daha az yinelenen sorun
Satır numarası değişikliği yeni bir soruna neden olmaz.Çeşitli kök nedenleri olan karmaşık sorunların daha kolay hata ayıklanması
Bir sorundaki en yaygın yığın izlemelerinde hata ayıklama için varyantları kullanın.Daha anlamlı uyarılar ve sinyaller
Yeni bir sorun aslında yeni bir hatayı temsil eder.Daha güçlü arama
Her sorun, istisna türü ve paket adı gibi daha fazla aranabilir meta veri içerir.
Bu iyileştirmeler şu şekilde kullanıma sunulacaktır:
Uygulamanızdan yeni etkinlikler aldığımızda bunların mevcut bir sorunla eşleşip eşleşmediğini kontrol ederiz.
Eşleşme yoksa daha akıllı etkinlik gruplandırma algoritmamızı etkinliğe otomatik olarak uygular ve yenilenen meta veri tasarımıyla yeni bir sorun oluştururuz.
Bu, etkinlik gruplandırmamızda yaptığımız ilk büyük güncellemedir. Geri bildiriminiz veya karşılaştığınız bir sorun varsa lütfen
Kilitlenme sorunu ile karşılaşmayan kullanıcı sayısı metriklerini ve/veya hız uyarılarını görememe
Kilitlenmesiz metrik (ör. kilitlenmesiz kullanıcılar ve oturumlar) ve/veya hız uyarıları görmüyorsanız Crashlytics SDK 18.6.0 veya sonraki bir sürümü (veya Firebase BoM 32.6.0 veya sonraki bir sürümü) kullandığınızdan emin olun.
İçerik haritası günlüklerini görememe
Breadcrumb günlüklerini görmüyorsanız uygulamanızın Google Analytics yapılandırmasını kontrol etmenizi öneririz. Aşağıdaki koşulları karşılamanız gerekir:
Firebase projenizde Google Analytics'u etkinleştirdiniz.
Google Analytics için Veri paylaşımını etkinleştirdiniz. Bu ayar hakkında daha fazla bilgiyi Analytics veri paylaşım ayarlarınızı yönetme başlıklı makalede bulabilirsiniz.
Uygulamanıza şu SDK'ları eklediniz: Google Analytics için Firebase SDK'sını Bu SDK, Crashlytics SDK'sına ek olarak eklenmelidir.
Uygulamanızda kullandığınız tüm ürünler için en son Firebase SDK sürümlerini kullanıyorsunuz.
Özellikle Google Analytics için Firebase SDK'sının en az aşağıdaki sürümünü kullandığınızdan emin olun:
Android — v17.2.3+ (BoM v24.7.1+) .
ANR'ler neden yalnızca Android 11 ve üzeri sürümlerde bildirilir?
Crashlytics, Android 11 ve sonraki sürümleri çalıştıran cihazlardaki Android uygulamaları için ANR raporlamayı destekler. ANR'leri toplamak için kullandığımız temel API (getHistoricalProcessExitReasons), SIGQUIT veya gözetleyici tabanlı yaklaşımlardan daha güvenilirdir. Bu API yalnızca Android 11 ve sonraki sürümleri çalıştıran cihazlarda kullanılabilir.
Why are some ANRs missing BuildId
s?
ANR'lerinizin bazılarında BuildId
eksikse aşağıdaki şekilde sorun giderin:
Güncel bir Crashlytics Android SDK ve Crashlytics Gradle eklentisi sürümü kullandığınızdan emin olun.
Android 11 ve bazı Android 12 ANR'leri için
BuildId
'ler eksikse muhtemelen güncel olmayan bir SDK, Gradle eklentisi veya her ikisini birden kullanıyorsunuzdur. Bu ANR'ler içinBuildId
'leri doğru şekilde toplamak üzere aşağıdaki sürümleri kullanmanız gerekir:- Crashlytics Android SDK'sı 18.3.5 ve sonraki sürümler (Firebase BoM 31.2.2 ve sonraki sürümler)
- Crashlytics Gradle eklentisi v2.9.4 ve sonraki sürümler
Paylaşılan kitaplıklarınız için standart olmayan bir konum kullanıp kullanmadığınızı kontrol edin.
Yalnızca uygulamanızın paylaşılan kitaplıkları için
BuildId
eksikse paylaşılan kitaplıklar için standart, varsayılan konumu kullanmıyor olabilirsiniz. Bu durumda Crashlytics, ilişkiliBuildId
'leri bulamayabilir. Paylaşılan kitaplıklar için standart konumu kullanmanızı öneririz.Derleme işlemi sırasında
BuildId
'leri kaldırmadığınızdan emin olun.Aşağıdaki sorun giderme ipuçlarının hem ANR'ler hem de yerel kilitlenmeler için geçerli olduğunu unutmayın.
İkili dosyalarınızda
readelf -n
çalıştırarakBuildId
dosyalarının mevcut olup olmadığını kontrol edin.BuildId
yoksa derleme sisteminizin işaretlerine-Wl,--build-id
ekleyin.APK boyutunuzu küçültmek için
BuildId
'leri yanlışlıkla kaldırmadığınızdan emin olun.Bir kitaplığın stripped ve stripped olmayan sürümlerini saklıyorsanız kodunuzda doğru sürümü gösterdiğinizden emin olun.
Crashlytics kontrol panelindeki ANR raporları ile Google Play Console arasındaki farklılıklar
Google Play ile Crashlytics arasındaki ANR sayıları arasında uyuşmazlık olabilir. ANR verilerini toplama ve raporlama mekanizmasındaki farklılık nedeniyle bu durum beklenir. Crashlytics, uygulama bir sonraki sefer açıldığında ANR'leri bildirir. Android Vitals ise ANR oluştuktan sonra ANR verilerini gönderir.
Ayrıca Crashlytics, yalnızca Android 11 ve sonraki sürümleri çalıştıran cihazlarda gerçekleşen ANR'leri gösterir. Google Play ise Google Play Hizmetleri'nin yüklü olduğu ve veri toplama izninin kabul edildiği cihazlardaki ANR'leri gösterir.
Crashlytics kontrol panelindeki ve logcat'teki NDK yığın izlemeleri arasındaki farklar
LLVM ve GNU araç zincirlerinde, uygulamanızın ikili dosyalarının salt okunur segmenti için farklı varsayılan değerler ve işlemler vardır. Bu durum, Firebase konsolunda tutarsız yığın izlemeleri oluşturabilir. Bu sorunu azaltmak için derleme sürecinize aşağıdaki bağlayıcı işaretlerini ekleyin:
LLVM araç setindeki
lld
bağlayıcıyı kullanıyorsanız şunları ekleyin:-Wl,--no-rosegment
GNU araç zincirindeki
ld.gold
bağlayıcıyı kullanıyorsanız şunları ekleyin:-Wl,--rosegment
Yine yığın izleme tutarsızlıkları görüyorsanız (veya bu işaretlerden hiçbiri araç zincirinizle alakalı değilse) bunun yerine derleme sürecinize aşağıdakileri eklemeyi deneyin:
-fno-omit-frame-pointer
NDK için kendi Breakpad simge dosyası oluşturucu ikili dosyamı nasıl kullanırım?
Crashlytics eklentisi, özelleştirilmiş bir Breakpad sembol dosyası oluşturucu içerir.
Breakpad simge dosyalarını oluşturmak için kendi ikili dosyanızı kullanmayı tercih ediyorsanız (ör. derleme zincirinizdeki tüm yerel yürütülebilir dosyaları kaynaktan derlemeyi tercih ediyorsanız) yürütülebilir dosyanın yolunu belirtmek için isteğe bağlı symbolGeneratorBinary
uzantı özelliğini kullanın.
Breakpad simge dosyası oluşturucu ikili dosyasının yolunu iki şekilde belirtebilirsiniz:
1. Seçenek:
build.gradle
dosyanızdakifirebaseCrashlytics
uzantısı aracılığıyla yolu belirtinUygulama düzeyindeki
build.gradle.kts
dosyanıza aşağıdakileri ekleyin:android { buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true // Add these optional fields to specify the path to the executable symbolGeneratorType = "breakpad" breakpadBinary = file("
/PATH/TO/BREAKPAD/DUMP_SYMS ") } } } }android { // ... buildTypes { // ... release { // ... firebaseCrashlytics { // existing; required for either symbol file generator nativeSymbolUploadEnabled true // Add this optional new block to specify the path to the executable symbolGenerator { breakpad { binary file("
/PATH/TO/BREAKPAD/DUMP_SYMS ") } } } } }2. seçenek: Gradle mülk dosyanızda bir mülk satırı aracılığıyla yolu belirtin
Yürütülebilir dosyanın yolunu belirtmek için
com.google.firebase.crashlytics.breakpadBinary
özelliğini kullanabilirsiniz.Gradle özellik dosyanızı manuel olarak veya komut satırı üzerinden güncelleyebilirsiniz. Örneğin, yolu komut satırı üzerinden belirtmek için aşağıdaki gibi bir komut kullanın:
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.breakpadBinary=
/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
Dexguard ile kilitlenme yaşanmıyor
Aşağıdaki istisnayı görüyorsanız DexGuard'ın Firebase Crashlytics SDK'sıyla uyumlu olmayan bir sürümünü kullanıyor olabilirsiniz:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
Bu istisna, uygulamanızı kilitlemez ancak kilitlenme raporları göndermesini engeller. Bu sorunu düzeltmek için:
DexGuard 8.x'in en son sürümünü kullandığınızdan emin olun. En son sürüm, Firebase Crashlytics SDK'sı tarafından zorunlu kılınan kuralları içerir.
DexGuard sürümünüzü değiştirmek istemiyorsanız karartma kurallarınıza (DexGuard yapılandırma dosyanızda) aşağıdaki satırı eklemeyi deneyin:
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
Neden .java
sorunu olarak etiketlenen .kt
dosyalarında kilitlenmeler görüyorum?
Bir uygulama, dosya uzantısını göstermeyen bir karartıcı kullandığında Crashlytics, her sorunu varsayılan olarak .java
dosya uzantısıyla oluşturur.
Crashlytics'ün doğru dosya uzantısıyla sorun oluşturabilmesi için uygulamanızda aşağıdaki kurulumun kullanıldığından emin olun:
- Android Gradle 4.2.0 veya sonraki sürümleri kullanıyor
- Karartma etkinken R8 kullanılır. Uygulamanızı R8'e güncellemek için bu dokümanları inceleyin.
Yukarıda açıklanan kuruluma geçtikten sonra, mevcut .java
sorunlarının kopyası olan yeni .kt
sorunları görmeye başlayabileceğinizi unutmayın. Bu durum hakkında daha fazla bilgi edinmek için SSS bölümünü inceleyin.
Neden mevcut .java
sorunlarının kopyası olan .kt
sorunları görüyorum?
Aralık 2021'in ortasından itibaren Crashlytics, Kotlin kullanan uygulamalar için desteği iyileştirdi.
Yakın zamana kadar mevcut karartıcı araçlar dosya uzantısını göstermediğinden Crashlytics, her sorunu varsayılan olarak .java
dosya uzantısıyla oluşturuyordu.
Ancak Android Gradle 4.2.0'dan itibaren R8, dosya uzantılarını destekler.
Bu güncellemeyle birlikte Crashlytics, uygulamada kullanılan her sınıfın Kotlin'de yazılıp yazılmadığını belirleyebilir ve sorun imzasına doğru dosya adını dahil edebilir. Uygulamanızda aşağıdaki kurulum varsa kilitlenmeler artık .kt
dosyalarıyla (uygun olduğu şekilde) doğru şekilde ilişkilendiriliyor:
- Uygulamanız Android Gradle 4.2.0 veya sonraki bir sürümü kullanıyor.
- Uygulamanızda karartma özelliği etkinken R8 kullanılıyor.
Yeni kilitlenmeler artık sorun imzalarında doğru dosya uzantısını içerdiğinden, aslında mevcut .java
etiketli sorunların kopyası olan yeni .kt
sorunları görebilirsiniz. Firebase konsolunda, yeni bir .kt
sorununun mevcut bir .java
etiketli sorunun kopyası olup olmadığını tespit edip size bildirmeye çalışıyoruz.
Bir sorunla ilgili notları kimler görüntüleyebilir, yazabilir ve silebilir?
Notlar, proje üyelerinin belirli sorunlarla ilgili soru, durum güncellemesi vb. yorumlar yapmasına olanak tanır.
Proje üyeleri tarafından eklenen notlar, Google Hesabı e-posta adresiyle etiketlenir. Bu e-posta adresi, notu görüntüleme erişimi olan tüm proje üyelerine notla birlikte gösterilir.
Aşağıda, notları görüntülemek, yazmak ve silmek için gereken erişim açıklanmaktadır:
Aşağıdaki rollerden herhangi birine sahip proje üyeleri, mevcut notları görüntüleyip silebilir ve bir sorunla ilgili yeni notlar yazabilir.
Aşağıdaki rollerden herhangi birine sahip proje üyeleri, bir sorunla ilgili olarak yayınlanan notları görüntüleyebilir ancak notları silebilir veya not yazamaz.
Kilitlenme sorunu yaşamayan kullanıcı sayısı nasıl hesaplanır?
Kilitlenmesiz metrikleri anlama başlıklı makaleyi inceleyin.
Bir sorunla ilgili notları kimler görüntüleyebilir, yazabilir ve silebilir?
Notlar, proje üyelerinin belirli sorunlarla ilgili soru, durum güncellemesi vb. yorumlar yapmasına olanak tanır.
Proje üyeleri tarafından eklenen notlar, Google Hesabı e-posta adresiyle etiketlenir. Bu e-posta adresi, notu görüntüleme erişimi olan tüm proje üyelerine notla birlikte gösterilir.
Aşağıda, notları görüntülemek, yazmak ve silmek için gereken erişim açıklanmaktadır:
Aşağıdaki rollerden herhangi birine sahip proje üyeleri, mevcut notları görüntüleyip silebilir ve bir sorunla ilgili yeni notlar yazabilir.
Aşağıdaki rollerden herhangi birine sahip proje üyeleri, bir sorunla ilgili olarak yayınlanan notları görüntüleyebilir ancak notları silebilir veya not yazamaz.
Entegrasyonlar
Uygulama, Google Mobile Ads SDK'sını da kullanıyor ancak kilitlenmiyor
Projenizde Google Mobile Ads SDK'sının yanı sıra Crashlytics kullanılıyorsa istisna işleyicileri kaydederken kilitlenme raporlayıcılarının müdahale ediyor olması muhtemeldir. Sorunu düzeltmek için disableSDKCrashReporting
SDK'sında kilitlenme raporlamasını kapatmak üzere disableSDKCrashReporting
numaralı telefonu arayın.Mobile Ads
BigQuery veri kümem nerede bulunur?
Crashlytics'yi BigQuery'ye bağladıktan sonra, oluşturduğunuz yeni veri kümeleri Firebase projenizin konumundan bağımsız olarak otomatik olarak ABD'de konumlandırılır.
Platform desteği
Crashlytics, armeabi'yi destekliyor mu?
Firebase Crashlytics NDK, ARMv5'i (armeabi) desteklemez. Bu ABI desteği, NDK r17'den itibaren kaldırılmıştır.
Geri çekilen sorunlar
Gerileyen sorun nedir?
Daha önce kapattığınız bir sorunla ilgili olarak Crashlytics, sorunun tekrar ortaya çıktığına dair yeni bir rapor alır. Crashlytics, gerileyen bu sorunları otomatik olarak yeniden açar. Böylece, uygulamanıza uygun şekilde ele alabilirsiniz.
Crashlytics'ün bir sorunu nasıl gerileme olarak sınıflandırdığını açıklayan örnek bir senaryo aşağıda verilmiştir:
- Crashlytics, "A" kilitlenmesiyle ilgili ilk kez kilitlenme raporu alır. Crashlytics, bu kilitlenmeyle ilgili ilgili sorunu açar ("A" sorunu).
- Bu hatayı hızlıca düzeltir, "A" sorununu kapatır ve ardından uygulamanızın yeni bir sürümünü yayınlarsınız.
- Crashlytics, sorunu kapattıktan sonra "A" sorunuyla ilgili başka bir rapor alır.
- Rapor, sorunu kapattığınızda Crashlytics'nin bildiği bir uygulama sürümünden geliyorsa (yani sürüm, herhangi bir kilitlenme için kilitlenme raporu göndermişse) Crashlytics, sorunun gerilediği sonucuna varmaz. Sorun kapatılır.
- Rapor, sorunu kapattığınızda Crashlytics'in bilmediği bir uygulama sürümünden geliyorsa (yani sürüm, hiçbir kilitlenme için hiçbir kilitlenme raporu göndermediyse) Crashlytics, sorunun geri geldiğini düşünür ve sorunu yeniden açar.
Bir sorun gerilediğinde, Crashlytics'ün sorunu yeniden açtığını size bildirmek için bir gerileme algılama uyarısı gönderir ve soruna bir gerileme sinyali ekleriz. Bir sorunun, gerileme algoritmamız nedeniyle yeniden açılmasını istemiyorsanız sorunu kapatmak yerine "sessize alın".
Eski uygulama sürümlerinde neden gerileme sorunları görüyorum?
Bir rapor, sorunu kapattığınızda hiç kilitlenme raporu göndermemiş eski bir uygulama sürümünden geliyorsa Crashlytics sorunun geri geldiğini düşünür ve sorunu yeniden açar.
Bu durum aşağıdaki durumda ortaya çıkabilir: Bir hatayı düzelttiniz ve uygulamanızın yeni sürümünü yayınladınız, ancak uygulamanızın eski sürümlerini kullanan ve bu hatayı düzeltme almayan kullanıcılarınız hâlâ var. Bu eski sürümlerden biri, sorunu kapattığınızda hiç kilitlenme raporu göndermediyse ve bu kullanıcılar hatayla karşılaşmaya başlarsa bu kilitlenme raporları, geriye dönük bir sorunu tetikler.
Bir sorunun, geriye dönük analiz algoritmamız nedeniyle yeniden açılmasını istemiyorsanız sorunu kapatmak yerine "devre dışı bırakın".