Bu sayfada sorun giderme yardımı ve Crashlytics'in kullanımıyla ilgili sık sorulan soruların yanıtları sağlanmaktadır. Aradığınızı bulamıyorsanız veya ek yardıma ihtiyacınız varsa Firebase desteğiyle iletişime geçin.
Genel sorun giderme/SSS
Firebase konsolundaki Sorunlar tablonuzda listelenen sorunlar için iki farklı biçim fark edebilirsiniz. Ayrıca bazı sorunlarınızda "varyantlar" adı verilen bir özelliği de fark edebilirsiniz. İşte nedeni!
2023'ün başlarında, etkinlikleri gruplamak için iyileştirilmiş bir analiz motorunun yanı sıra güncellenmiş bir tasarım ve yeni sorunlar için bazı gelişmiş özellikleri (varyantlar gibi!) kullanıma sunduk. Tüm ayrıntılar için son blog gönderimize göz atın, ancak öne çıkanları aşağıda okuyabilirsiniz.
Crashlytics, uygulamanızdaki tüm etkinlikleri (çökmeler, ölümcül olmayanlar ve ANR'ler gibi) analiz eder ve sorun adı verilen etkinlik grupları oluşturur; bir sorundaki tüm olayların ortak bir başarısızlık noktası vardır.
Olayları bu sorunlar halinde gruplandırmak için, gelişmiş analiz motoru artık yığın izlemedeki çerçeveler, istisna mesajı, hata kodu ve diğer platform veya hata türü özellikleri dahil olmak üzere olayın birçok yönüne bakıyor.
Ancak bu olay grubu içinde hataya yol açan yığın izleri farklı olabilir. Farklı bir yığın izleme, farklı bir temel neden anlamına gelebilir. Bir sorun içindeki bu olası farklılığı temsil etmek için artık sorunlar içinde değişkenler oluşturuyoruz; her değişken, aynı hata noktasına ve benzer yığın izine sahip bir sorundaki olayların bir alt grubudur. Varyantlarla, bir sorun içindeki en yaygın yığın izlerinde hata ayıklayabilir ve hataya farklı temel nedenlerin yol açıp açmadığını belirleyebilirsiniz.
Bu iyileştirmelerle karşılaşacağınız deneyimler şunlardır:
Sorun satırında görüntülenen yenilenen meta veriler
Artık uygulamanızdaki sorunları anlamak ve önceliklendirmek daha kolay.Daha az yinelenen sorun
Satır numarası değişikliği yeni bir sayıya yol açmaz.Çeşitli kök nedenlere sahip karmaşık sorunların daha kolay hata ayıklanması
Bir sorundaki en yaygın yığın izlerinde hata ayıklamak için değişkenleri kullanın.Daha anlamlı uyarılar ve sinyaller
Yeni bir sorun aslında yeni bir hatayı temsil eder.Daha güçlü arama
Her sayı, istisna türü ve paket adı gibi daha fazla aranabilir meta veri içerir.
Bu iyileştirmelerin nasıl sunulduğu aşağıda açıklanmıştır:
Uygulamanızdan yeni etkinlikler aldığımızda bunların mevcut bir sorunla eşleşip eşleşmediğini kontrol edeceğiz.
Eşleşme olmazsa, daha akıllı olay gruplandırma algoritmamızı etkinliğe otomatik olarak uygulayacağız ve yenilenen meta veri tasarımıyla yeni bir sorun yaratacağız.
Bu, etkinlik gruplandırmamızda yaptığımız ilk büyük güncellemedir. Geri bildiriminiz varsa veya herhangi bir sorunla karşılaşırsanız lütfen bir rapor göndererek bize bildirin.
Kilitlenme yaşanmayan ölçümleri (kilitlenme yaşanmayan kullanıcılar ve oturumlar gibi) ve/veya hız uyarılarını göremiyorsanızCrashlytics SDK v18.6.0+ (veya Firebase BoM v32.6.0+).
İçerik haritası günlüklerini göremiyorsanız uygulamanızın Google Analytics yapılandırmasını kontrol etmenizi öneririz. Aşağıdaki gereksinimleri karşıladığınızdan emin olun:
Firebase projenizde Google Analytics'i etkinleştirdiniz .
Google Analytics için Veri paylaşımını etkinleştirdiniz. Analytics veri paylaşımı ayarlarınızı yönetme bölümünde bu ayar hakkında daha fazla bilgi edinin
Google Analytics için Firebase SDK'sını ekledinizuygulamanıza. Bu SDK, Crashlytics SDK'ya ek olarak eklenmelidir.
Uygulamanızda kullandığınız tüm ürünler içinen son Firebase SDK sürümlerinikullanıyorsunuz.
Özellikle Google Analytics için Firebase SDK'nın en azından aşağıdaki sürümünü kullandığınızdan emin olun:
Android — v17.2.3+ (BoM v24.7.1+) .
Crashlytics, Android 11 ve sonraki sürümleri çalıştıran cihazlardan gelen Android uygulamaları için ANR raporlamasını destekler. ANR'leri toplamak için kullandığımız temel API ( getHistoricalProcessExitReasons ), SIGQUIT veya gözlemci tabanlı yaklaşımlardan daha güvenilirdir. Bu API yalnızca Android 11+ cihazlarda kullanılabilir.
ANR'lerinizden bazılarının BuildId
eksikse aşağıdaki şekilde sorunu giderin:
Güncel bir Crashlytics Android SDK'sı ve Crashlytics Gradle eklentisi sürümünü kullandığınızdan emin olun.
Android 11 ve bazı Android 12 ANR'leri için
BuildId
eksikse büyük olasılıkla güncel olmayan bir SDK, Gradle eklentisi veya her ikisini birden kullanıyorsunuzdur. Bu ANR'lere ilişkinBuildId
doğru şekilde toplamak için aşağıdaki sürümleri kullanmanız gerekir:- Crashlytics Android SDK'sı v18.3.5+ (Firebase BoM v31.2.2+)
- Crashlytics Gradle eklentisi v2.9.4+
Paylaşılan kitaplıklarınız için standart olmayan bir konum kullanıp kullanmadığınızı kontrol edin.
Uygulamanızın paylaşılan kitaplıkları için yalnızca
BuildId
eksikse, büyük olasılıkla paylaşılan kitaplıklar için standart, varsayılan konumu kullanmıyorsunuzdur. Durum böyleyse Crashlytics ilişkiliBuildId
dosyalarını bulamayabilir. Paylaşılan kitaplıklar için standart konumu kullanmayı düşünmenizi öneririz.Derleme işlemi sırasında
BuildId
s'yi çıkarmadığı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
komutunu çalıştırarakBuildId
var olup olmadığını kontrol edin.BuildId
s yoksa, derleme sisteminizin bayraklarına-Wl,--build-id
ekleyin.APK boyutunuzu küçültmek amacıyla
BuildId
istemeden çıkarmadığınızdan emin olun.Bir kitaplığın çıkarılmış ve çıkarılmamış sürümlerini saklıyorsanız kodunuzda doğru sürümü işaret ettiğinizden emin olun.
Google Play ile Crashlytics arasındaki ANR sayısı arasında uyumsuzluk olabilir. ANR verilerinin toplanması ve raporlanması mekanizmasındaki farklılık nedeniyle bu beklenen bir durumdur. Crashlytics, uygulama bir sonraki başlatıldığında ANR'leri bildirirken Android Vitals, ANR verilerini ANR oluştuktan sonra gönderir.
Ayrıca Crashlytics yalnızca Android 11+ çalıştıran cihazlarda oluşan ANR'leri görüntülerken, Google Play hizmetlerine sahip ve veri toplama izni kabul edilen cihazlardan gelen ANR'leri görüntüleyen Google Play'dir.
LLVM ve GNU araç zincirleri, uygulamanızın ikili dosyalarının salt okunur bölümü için farklı varsayılanlara ve işlemlere sahiptir; bu, Firebase konsolunda tutarsız yığın izlemeleri oluşturabilir. Bunu azaltmak için derleme sürecinize aşağıdaki bağlayıcı bayraklarını ekleyin:
LLVM araç zincirindeki
lld
bağlayıcıyı kullanıyorsanız şunu ekleyin:-Wl,--no-rosegment
GNU araç zincirinden
ld.gold
bağlayıcısını kullanıyorsanız şunu ekleyin:-Wl,--rosegment
Hala yığın izleme tutarsızlıkları görüyorsanız (veya her iki işaret de araç zincirinizle ilgili değilse), bunun yerine derleme sürecinize aşağıdakileri eklemeyi deneyin:
-fno-omit-frame-pointer
Crashlytics eklentisi özelleştirilmiş bir Breakpad sembol dosyası oluşturucuyu bir araya getirir. Breakpad simge dosyalarını oluşturmak için kendi ikili dosyanızı kullanmayı tercih ederseniz (örneğin, derleme zincirinizdeki tüm yerel yürütülebilir dosyaları kaynaktan oluşturmayı tercih ederseniz), yürütülebilir dosyanın yolunu belirtmek için isteğe bağlı symbolGeneratorBinary
uzantı özelliğini kullanın.
Breakpad sembol dosyası oluşturucu ikili dosyasının yolunu iki yoldan biriyle belirleyebilirsiniz:
Seçenek 1 :
build.gradle
dosyanızdakifirebaseCrashlytics
uzantısı aracılığıyla yolu belirtinAşağıdakileri uygulama düzeyindeki
build.gradle
dosyanıza ekleyin: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") } } } } }
Seçenek 2 : Gradle özellikler dosyanızdaki bir özellik satırı aracılığıyla yolu belirtin
Yürütülebilir dosyanın yolunu belirtmek için
com.google.firebase.crashlytics.symbolGeneratorBinary
özelliğini kullanabilirsiniz.Gradle özellikler dosyanızı manuel olarak güncelleyebilir veya dosyayı komut satırı aracılığıyla güncelleyebilirsiniz. Örneğin, yolu komut satırı aracılığıyla belirtmek için aşağıdakine benzer bir komut kullanın:
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.symbolGeneratorBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
Aşağıdaki istisnayı görüyorsanız büyük ihtimalle DexGuard'ın Firebase Crashlytics SDK'sıyla uyumlu olmayan bir sürümünü kullanıyorsunuzdur:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
Bu istisna uygulamanızı çökertmez ancak kilitlenme raporları göndermesini engeller. Bunu düzeltmek için:
En son DexGuard 8.x sürümünü kullandığınızdan emin olun. En son sürüm, Firebase Crashlytics SDK'sının gerektirdiği kuralları içerir.
DexGuard sürümünüzü değiştirmek istemiyorsanız, gizleme kurallarınıza (DexGuard yapılandırma dosyanızda) aşağıdaki satırı eklemeyi deneyin:
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
Bir uygulama, dosya uzantısını açığa çıkarmayan bir gizleme aracı kullandığında Crashlytics, her sorunu varsayılan olarak bir .java
dosya uzantısıyla oluşturur.
Crashlytics'in doğru dosya uzantısıyla ilgili sorunlar oluşturabilmesi için uygulamanızın aşağıdaki kurulumu kullandığından emin olun:
- Android Gradle 4.2.0 veya üstünü kullanır
- Gizleme açıkken R8'i kullanır. Uygulamanızı R8'e güncellemek için bu belgeleri izleyin.
Yukarıda açıklanan kuruluma güncelleme yaptıktan sonra, mevcut .java
sorunlarının kopyası olan yeni .kt
sorunlarını görmeye başlayabileceğinizi unutmayın. Bu durum hakkında daha fazla bilgi edinmek için SSS'ye bakın.
Aralık 2021'in ortasından itibaren Crashlytics, Kotlin kullanan uygulamalara yönelik desteği iyileştirdi.
Yakın zamana kadar mevcut karartma araçları dosya uzantısını açığa çıkarmıyordu, dolayısıyla 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ı desteklemektedir.
Bu güncellemeyle Crashlytics artık uygulamada kullanılan her sınıfın Kotlin'de yazılıp yazılmadığını belirleyebiliyor ve sorun imzasına doğru dosya adını ekleyebiliyor. Uygulamanız aşağıdaki kuruluma sahipse, kilitlenmeler artık doğru bir şekilde .kt
dosyalarıyla (uygun olduğu şekilde) ilişkilendiriliyor:
- Uygulamanız Android Gradle 4.2.0 veya üstünü kullanıyor.
- Uygulamanız gizleme açıkken R8 kullanıyor.
Yeni çökmeler artık sorun imzalarında doğru dosya uzantısını içerdiğinden, aslında mevcut .java
etiketli sorunların kopyaları olan yeni .kt
sorunlarını görebilirsiniz. Firebase konsolunda, yeni bir .kt
sorununun mevcut bir .java
etiketli sorunun olası bir kopyası olup olmadığını belirlemeye ve sizinle iletişime geçmeye çalışıyoruz.
Notlar, proje üyelerinin sorular, durum güncellemeleri vb. ile belirli konular hakkında yorum yapmasına olanak tanır.
Bir proje üyesi bir not yayınladığında, bu not kendi Google hesabının e-posta adresiyle etiketlenir. Bu e-posta adresi, notla birlikte, notu görüntüleme erişimi olan tüm proje üyeleri tarafından görülebilir.
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üleyebilir, silebilir ve bir sorunla ilgili yeni notlar yazabilir.
Aşağıdaki rollerden herhangi birine sahip olan proje üyeleri, bir konuya gönderilen notları görüntüleyebilir ancak notu silemez veya yazamaz.
Bkz. Kilitlenmesiz ölçümleri anlama .
Notlar, proje üyelerinin sorular, durum güncellemeleri vb. ile belirli konular hakkında yorum yapmasına olanak tanır.
Bir proje üyesi bir not yayınladığında, bu not kendi Google hesabının e-posta adresiyle etiketlenir. Bu e-posta adresi, notla birlikte, notu görüntüleme erişimi olan tüm proje üyeleri tarafından görülebilir.
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üleyebilir, silebilir ve bir sorunla ilgili yeni notlar yazabilir.
Aşağıdaki rollerden herhangi birine sahip olan proje üyeleri, bir konuya gönderilen notları görüntüleyebilir ancak notu silemez veya yazamaz.
Entegrasyonlar
Projeniz Google Mobile Ads SDK'sının yanı sıra Crashlytics kullanıyorsa kilitlenme raporlayıcılarının istisna işleyicileri kaydederken müdahale etmesi muhtemeldir. Sorunu düzeltmek için, Mobile Ads SDK'sındaki kilitlenme raporlamasını disableSDKCrashReporting
çağırarak kapatın.
Crashlytics'i BigQuery'ye bağladıktan sonra oluşturduğunuz yeni veri kümeleri, Firebase projenizin konumundan bağımsız olarak otomatik olarak ABD'de bulunur.
Platform desteği
Firebase Crashlytics NDK, ARMv5'i (armeabi) desteklemez. Bu ABI'ye yönelik destek NDK r17'den itibaren kaldırıldı.
Gerileyen sorunlar
Daha önce konuyu kapattığınızda bir sorun geriledi ancak Crashlytics, sorunun yeniden oluştuğuna dair yeni bir rapor alıyor. Crashlytics, bu gerileyen sorunları otomatik olarak yeniden açar; böylece bunları uygulamanıza uygun şekilde giderebilirsiniz.
Crashlytics'in bir sorunu regresyon olarak nasıl kategorize ettiğini açıklayan örnek bir senaryoyu burada bulabilirsiniz:
- Crashlytics ilk kez Crash "A" hakkında bir kilitlenme raporu alıyor. Crashlytics söz konusu kilitlenmeyle ilgili bir sorun açar ("A Sorunu").
- Bu hatayı hızlı bir şekilde düzeltir, "A" Sorununu kapatır ve ardından uygulamanızın yeni bir sürümünü yayınlarsınız.
- Sorunu kapattıktan sonra Crashlytics, "A" Sorunu hakkında başka bir rapor alır.
- Rapor, sorunu kapattığınızda Crashlytics'in bildiği bir uygulama sürümüne aitse (yani sürüm herhangi bir kilitlenme için bir kilitlenme raporu göndermişse), Crashlytics sorunu geriletilmiş olarak değerlendirmez. Konu kapalı kalacaktır.
- Rapor, sorunu kapattığınızda Crashlytics'in bilmediği bir uygulama sürümüne aitse (bu, sürümün herhangi bir kilitlenme için hiçbir zaman kilitlenme raporu göndermediği anlamına gelir), Crashlytics sorunun gerilediğini varsayar ve sorunu yeniden açar. .
Bir sorun gerilediğinde, Crashlytics'in sorunu yeniden açtığını size bildirmek için bir gerileme algılama uyarısı göndeririz ve soruna bir gerileme sinyali ekleriz. Regresyon algoritmamız nedeniyle bir konunun yeniden açılmasını istemiyorsanız, konuyu kapatmak yerine "sessizleştirin".
Bir rapor, sorunu kapattığınızda hiç kilitlenme raporu göndermemiş eski bir uygulama sürümünden geliyorsa Crashlytics sorunun gerilediğini varsayar ve sorunu yeniden açar.
Bu durum şu durumda meydana gelebilir: Bir hatayı düzelttiniz ve uygulamanızın yeni bir sürümünü yayınladınız, ancak hâlâ eski sürümlerde hata düzeltmesi olmayan kullanıcılarınız var. Şans eseri, sorunu kapattığınızda bu eski sürümlerden biri hiç kilitlenme raporu göndermediyse ve bu kullanıcılar hatayla karşılaşmaya başlarsa, bu kilitlenme raporları gerileyen bir sorunu tetikleyecektir.
Regresyon algoritmamız nedeniyle bir konunun yeniden açılmasını istemiyorsanız, konuyu kapatmak yerine "sessizleştirin".