Android uygulamanız yerel kitaplıklar içeriyorsa , uygulamanızın derleme yapılandırmasında birkaç küçük güncellemeyle Firebase Crashlytics'ten yerel kodunuz için tam yığın izlemelerini ve ayrıntılı kilitlenme raporlarını etkinleştirebilirsiniz.
Bu kılavuz, NDK için Firebase Crashlytics SDK ile kilitlenme raporlamasının nasıl yapılandırılacağını açıklar.
Unity projelerinizde Crashlytics'e nasıl başlayacağınızı arıyorsanız, Unity Başlarken kılavuzuna göz atın.
Sen başlamadan önce
Henüz yapmadıysanız, Firebase'i Android projenize ekleyin . Android uygulamanız yoksa örnek bir uygulama indirebilirsiniz.
Önerilen : Kilitlenme sorunu yaşamayan kullanıcılar, içerik haritası günlükleri ve hız uyarıları gibi özellikleri almak için Firebase projenizde Google Analytics'i etkinleştirmeniz gerekir.
Mevcut Firebase projenizde Google Analytics etkin değilse, Google Analytics'i Firebase konsolundaki Entegrasyonlar > Proje ayarları sekmesinden etkinleştirebilirsiniz.
Yeni bir Firebase projesi oluşturuyorsanız, proje oluşturma iş akışı sırasında Google Analytics'i etkinleştirin.
1. Adım : NDK için Crashlytics SDK'yı uygulamanıza ekleyin
Modül (uygulama düzeyinde) Gradle dosyanıza (genellikle<project>/<app-module>/build.gradle
), Crashlytics NDK Android kitaplığı için bağımlılığı ekleyin. Kitaplık sürüm oluşturmayı kontrol etmek için Firebase Android BoM'yi kullanmanızı öneririz.En iyi Crashlytics deneyimi için Firebase projenizde Google Analytics'i etkinleştirmenizi ve Google Analytics için Firebase SDK'yı uygulamanıza eklemenizi öneririz.
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.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-ktx' }
Firebase Android BoM'yi kullandığınızda, uygulamanız her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanır.
(Alternatif) BoM kullanmadan Firebase kitaplığı bağımlılıkları ekleyin
Firebase BoM'yi kullanmamayı seçerseniz, her bir Firebase kitaplığı sürümünü bağımlılık satırında belirtmeniz gerekir.
Uygulamanızda birden çok Firebase kitaplığı kullanıyorsanız kitaplık sürümlerini yönetmek için tüm sürümlerin uyumlu olmasını sağlayan BoM'yi kullanmanızı kesinlikle öneririz.
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:18.3.7' implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0' }
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.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'yi kullandığınızda, uygulamanız her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanır.
(Alternatif) BoM kullanmadan Firebase kitaplığı bağımlılıkları ekleyin
Firebase BoM'yi kullanmamayı seçerseniz, her bir Firebase kitaplığı sürümünü bağımlılık satırında belirtmeniz gerekir.
Uygulamanızda birden çok Firebase kitaplığı kullanıyorsanız kitaplık sürümlerini yönetmek için tüm sürümlerin uyumlu olmasını sağlayan BoM'yi kullanmanızı kesinlikle öneririz.
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:18.3.7' implementation 'com.google.firebase:firebase-analytics:21.3.0' }
2. Adım : Crashlytics Gradle eklentisini uygulamanıza ekleyin
Kök düzeyinde (proje düzeyinde) Gradle dosyanıza (
<project>/build.gradle
), Crashlytics Gradle eklentisini bir buildscript bağımlılığı olarak ekleyin:buildscript { repositories { // Make sure that you have the following two repositories google() // Google's Maven repository mavenCentral() // Maven Central repository } dependencies { ... classpath 'com.android.tools.build:gradle:7.2.0' // Make sure that you have the Google services Gradle plugin dependency classpath 'com.google.gms:google-services:4.3.15' // Add the dependency for the Crashlytics Gradle plugin classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5' } }
Modül (uygulama düzeyinde) Gradle dosyanıza (genellikle
<project>/<app-module>/build.gradle
), Crashlytics Gradle eklentisini ekleyin: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 : Yapınıza firebaseCrashlytics
uzantısını ekleyin
Modül (uygulama düzeyinde) Gradle dosyanıza (genellikle app/build.gradle
), firebaseCrashlytics
uzantısını ekleyin.
Kotlin+KTX
// ... 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 } } } }
Java
// ... 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 olarak yüklenmesini ayarlayın
NDK çökmelerinden okunabilir yığın izleri üretmek için Crashlytics'in yerel ikili dosyalarınızdaki semboller hakkında bilgi sahibi olması gerekir. Crashlytics Gradle eklentisi, bu işlemi otomatikleştirmek için uploadCrashlyticsSymbolFile BUILD_VARIANT
görevini içerir.
Otomatik sembol yükleme görevine erişebilmek için modül (uygulama düzeyinde) Gradle dosyanızda
nativeSymbolUploadEnabled
öğesinintrue
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
uploadCrashlyticsSymbolFile BUILD_VARIANT
görevini açıkça çağırmalısınız. Örneğin:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
Hem NDK için Crashlytics SDK hem de Crashlytics Gradle eklentisi, yerel paylaşılan nesnelerde GNU derleme kimliğinin varlığına bağlıdır.
Her bir ikili dosyada
readelf -n
komutunu çalıştırarak bu kimliğin varlığını doğrulayabilirsiniz. Yapı kimliği yoksa, sorunu çözmek için yapı sisteminizin bayraklarına-Wl,--build-id
ekleyin.
5. Adım : Kurulumu bitirmek için bir test çökmesine zorlayın
Crashlytics kurulumunu tamamlamak ve Firebase konsolunun Crashlytics kontrol panelinde ilk verileri görmek için bir test kilitlenmesini zorlamanız gerekir.
Uygulamanıza, bir test kilitlenmesini zorlamak için kullanabileceğiniz kod ekleyin.
Uygulamanıza, basıldığında çökmeye neden olan bir düğme eklemek için uygulamanızın
MainActivity
aşağıdaki kodu kullanabilirsiniz. Düğme "Çökmeyi Test Et" olarak etiketlenmiştir.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ı oluşturun ve çalıştırın.
Uygulamanızın ilk kilitlenme raporunu göndermek için test çökmesini zorunlu kılın:
Uygulamanızı test cihazınızdan veya öykünücünüzden açın.
Uygulamanızda, yukarıdaki kodu kullanarak eklediğiniz "Test Crash" düğmesine basın.
Uygulamanız kilitlendikten sonra, uygulamanızın kilitlenme raporunu Firebase'e gönderebilmesi için 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 hala 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 .
Ve bu kadar! Crashlytics artık uygulamanızı çökmelere karşı izliyor ve kilitlenme raporlarını ve istatistiklerini Crashlytics kontrol panelinde görüntüleyip inceleyebilirsiniz.
Sonraki adımlar
(Önerilen) GWP-ASan raporlarını toplayarak yerel bellek hatalarından kaynaklanan çökmelerde hata ayıklama konusunda yardım alın. Bellekle ilgili bu hatalar, uygulama güvenlik açıklarının önde gelen nedeni olan uygulamanızdaki bellek bozulmasıyla ilişkilendirilebilir. Bu özellikten yararlanmak için uygulamanızda GWP-ASan'ın açıkça etkinleştirildiğinden ve NDK için en son Crashlytics SDK'yı (v18.3.6+ veya Firebase BoM v31.3.0+) kullandığından emin olun.
Kaydolma raporları, günlükler, anahtarlar ve önemli olmayan hataların izlenmesini ekleyerek kilitlenme raporu kurulumunuzu özelleştirin .
Google Play ile entegre edin, böylece Android uygulamanızın kilitlenme raporlarını doğrudan Crashlytics kontrol panelinde Google Play izine göre filtreleyebilirsiniz. Bu, kontrol panelinizi belirli yapılara daha iyi odaklamanızı sağlar.
Sorun giderme
Firebase konsolunda ve logcat'te farklı yığın izleri görüyorsanız Sorun Giderme kılavuzuna bakın.
Sembolleri yüklemek için alternatif seçenekler
Yukarıdaki bu sayfadaki ana iş akışı, standart Gradle yapıları için geçerlidir. Ancak, bazı uygulamalar farklı bir yapılandırma veya araç kullanır (örneğin, Gradle dışında bir oluşturma işlemi). Bu durumlarda, sembolleri başarıyla yüklemek için aşağıdaki seçenekler yardımcı olabilir.
Seçenek : Kitaplık modülleri ve harici bağımlılıklar için semboller yükleyin
Bu seçenek aşağıdaki durumlarda yardımcı olabilir:
- Gradle içinde özelleştirilmiş bir NDK oluşturma işlemi kullanıyorsanız
- Yerel kitaplıklarınız bir kitaplık/özellik modülünde oluşturulmuşsa veya bir üçüncü tarafça sağlanmışsa
- Otomatik sembol yükleme görevi başarısız oluyorsa veya kontrol panelinde simgesel olmayan kilitlenmeler görüyorsanız
Standart Crashlytics sembol yükleme görevi, CMake gibi standart NDK oluşturma araçlarını kullanarak uygulama modülünüzün Gradle derlemesinin bir parçası olarak yerel kitaplıklarınızı oluşturduğunuzu varsayar.
Ancak, Gradle içinde özelleştirilmiş bir NDK oluşturma işlemi kullanıyorsanız veya yerel kitaplıklarınız bir kitaplık/özellik modülünde oluşturulmuşsa veya bir üçüncü tarafça sağlanmışsa, ayrıştırılmamış kitaplıklarınızın yolunu açıkça belirtmeniz gerekebilir. Bunu gerçekleştirmek için, build.gradle
dosyanızdaki firebaseCrashlytics
uzantısına unstrippedNativeLibsDir
özelliğini ekleyebilirsiniz.
Bu sayfada daha önce ana iş akışından aşağıdaki başlangıç görevlerini tamamladığınızdan emin olun:
Otomatik sembol yükleme görevinin sembol bilgilerinizi bulabilmesi için modül (uygulama düzeyinde)
build.gradle
dosyanıza aşağıdakini ekleyin:// ... android { // ... buildTypes { release { firebaseCrashlytics { nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
Crashlytics eklentisi, belirtilen dizinde
.so
uzantılı yerel kitaplıkları tekrar tekrar arar. Crashlytics daha sonra bu tür tüm kitaplıklardan hata ayıklama sembollerini çıkarır ve bunları Firebase sunucularına yükler.unstrippedNativeLibsDir
özelliğinde şunları belirtebilirsiniz:org.gradle.api.Project#files(Object...)
için izin verilen herhangi bir bağımsız değişken:java.lang.String
,java.io.File
veyaorg.gradle.api.file.FileCollection
Bir liste veya
FileCollection
örneği sağlayarak tek bir derleme türü için birden çok dizin
Son olarak, Crashlytics kurulumunu tamamlamak ve Firebase konsolunun Crashlytics kontrol panelinde ilk verileri görmek için bir test kilitlenmesini zorlayın .
Seçenek : Gradle olmayan yapılar veya erişilemeyen ayrıştırılmamış yerel kitaplıklar için semboller yükleyin
Bu seçenek aşağıdaki durumlarda yardımcı olabilir:
Gradle dışında bir oluşturma işlemi kullanıyorsanız
Soyulmamış yerel kitaplıklarınız size bir şekilde Gradle derlemeleri sırasında erişilemeyecek şekilde sağlanmışsa
Bu seçenek, Firebase konsolunda sembolik yığın izlerini görmek istediğiniz bir sürüm derlemesi veya herhangi bir yapı oluşturduğunuzda bir Firebase CLI komutu çalıştırmanızı gerektirir.
Bu sayfada daha önce ana iş akışından aşağıdaki başlangıç görevlerini tamamladığınızdan emin olun:
NDK için Crashlytics SDK ve Crashlytics Gradle eklentisi eklendi.
Bu seçenekle, simge dosyalarınızı oluşturmak ve yüklemek için bunun yerine Firebase CLI'yi (sonraki adımlar aşağıdadır) kullanacağınız için,
firebaseCrashlytics
uzantısını eklemenize veya otomatik simge yüklemeyi ayarlamanıza gerek olmadığını unutmayın.Sembol yükleme için ortamınızı ve projenizi kurun:
Firebase CLI'yi yüklemek için talimatları izleyin.
CLI'yi zaten yüklediyseniz, en son sürümüne güncellediğinizden emin olun.
(yalnızca Android API düzeyi 30+ kullanan uygulamalar için) İşaretçi Etiketlemeyi devre dışı bırakmak için uygulamanızın
AndroidManifest.xml
şablonunu güncelleyin:Android Player Settings > Publishing Settings > Build > Custom Main Manifest kutusunu işaretleyin.
Assets/Plugins/Android/AndroidManifest.xml
konumunda bulunan bildirim şablonunu açın.Uygulama etiketine şu özelliği ekleyin:
<application android:allowNativeHeapPointerTagging="false" ... />
Projenizi oluşturun.
Sembol bilgilerinizi yükleyin.
Derlemeniz bittiğinde, Crashlytics uyumlu bir sembol dosyası oluşturun ve aşağıdaki Firebase CLI komutunu çalıştırarak bunu Firebase sunucularına yükleyin:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : Firebase Android Uygulama Kimliğiniz (paket adınız değil)
Örnek Firebase Android Uygulama Kimliği:1:567383003300:android:17104a2ced0c9b9b
Firebase Uygulama Kimliğinizi bulmanın iki yolu:
google-services.json
dosyanızda, Uygulama Kimliğinizmobilesdk_app_id
değeridir; veyaFirebase konsolunda Proje ayarlarınıza gidin. Uygulamalarınız kartına ilerleyin, ardından Uygulama Kimliğini bulmak için istediğiniz Firebase Uygulamasını tıklayın.
PATH/TO/SYMBOLS : CLI tarafından oluşturulan sembol dosyasının yolu
Bir Android Studio projesine aktarıldı — PATH/TO/SYMBOLS herhangi bir dizin olabilir. Firebase CLI, belirtilen dizini
.so
uzantılı yerel kitaplıklar için yinelemeli olarak arayacaktır.APK'yı doğrudan Unity içinden oluşturun — PATH/TO/SYMBOLS derlemeniz bittiğinde proje kök dizininde oluşturulan sıkıştırılmış sembol dosyasının yoludur (örneğin:
myproject/myapp-1.0-v100.symbols.zip
).
Sembol dosyası oluşturma ve karşıya yükleme için Firebase CLI komutunu kullanmaya yönelik gelişmiş seçenekleri görüntüleyin
bayrak Tanım --generator=csym
Varsayılan Breakpad oluşturucu yerine eski cSYM simge dosyası oluşturucuyu kullanır
Kullanım için önerilmez. Varsayılan Breakpad sembol dosyası oluşturucuyu kullanmanızı öneririz.
--generator=breakpad
Breakpad sembol dosyası oluşturucuyu kullanır
Sembol dosyası oluşturma için varsayılanın Breakpad olduğunu unutmayın. Bu bayrağı yalnızca yapı yapılandırmanıza
symbolGenerator { csym() }
eklediyseniz ve bunun yerine Breakpad'i kullanmak için geçersiz kılmak istiyorsanız kullanın.--dry-run
Sembol dosyalarını oluşturur ancak bunları karşıya yüklemez
Gönderilen dosyaların içeriğini incelemek istiyorsanız bu bayrak kullanışlıdır.
--debug
Ek hata ayıklama bilgileri sağlar Son olarak, Crashlytics kurulumunu tamamlamak ve Firebase konsolunun Crashlytics kontrol panelinde ilk verileri görmek için bir test kilitlenmesini zorlayın .
Kilitlenmeye zorlamanın bir parçası olarak uygulamanızı oluşturduktan sonra sembol dosyanızı yüklemek için Firebase CLI
crashlytics:symbols:upload
komutunu çalıştırdığınızdan emin olun.