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ıza göz atın. Önemli noktaları aşağıda bulabilirsiniz.
Crashlytics, uygulamanızdaki tüm etkinlikleri (ör. kilitlenmeler, ölümcül 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 Artık uygulamanızdaki sorunları daha kolay anlayabilir ve önceliklendirebilirsiniz.
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 izlemelerinden hata ayıklamak 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
bir bildirim göndererek bize bildirin.
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:
Ö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 raporlamasını 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 BuildIds?
ANR'lerinizin bazılarında BuildId eksikse aşağıdaki şekilde sorun giderin:
Güncel bir Crashlytics Android SDK'sı 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çin BuildId'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şkili BuildId'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ırarak BuildId dosyalarının 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 sarmalanmış ve sarmalanmış 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ızdaki firebaseCrashlytics uzantısı aracılığıyla yolu belirtin
Uygulama düzeyindeki build.gradle.kts dosyanıza aşağıdakileri ekleyin:
Gradle eklentisi 3.0.0 ve sonraki sürümler
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")
}
}
}
}
daha eski eklenti sürümleri
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:
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.
Mevcut .java sorunlarının kopyası olan .kt sorunlarını neden görüyorum?
Aralık 2021'in ortaları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.
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.
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 müdahale ediyor olması muhtemeldir. Sorunu düzeltmek için disableSDKCrashReporting'u arayarak Mobile Ads SDK'sında kilitlenme raporlamayı devre dışı bırakın.
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ı bir şekilde 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 giden 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".