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 izlemeleri ve ayrıntılı kilitlenme raporlarını etkinleştirebilirsiniz.
Bu kılavuzda, NDK için Firebase Crashlytics SDK'sıyla kilitlenme raporlamasının nasıl yapılandırılacağı açıklanmaktadır.
Unity projelerinizde Crashlytics'i nasıl kullanmaya 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 Android projenize Firebase'i 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 özelliklerden yararlanmak için Firebase projenizde Google Analytics'i etkinleştirmeniz gerekir.
Mevcut Firebase projenizde Google Analytics etkin değilse Google Analytics'i projenizin Entegrasyonlar sekmesinden etkinleştirebilirsiniz.
Firebase konsolunda > Proje ayarları .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'sını uygulamanıza ekleyin
Modül (uygulama düzeyi) Gradle dosyanıza (genellikle<project>/<app-module>/build.gradle.kts
veya <project>/<app-module>/build.gradle
), Crashlytics NDK bağımlılığını ekleyin Android için kütüphane. Kitaplık sürümlerini kontrol etmek için Firebase Android BoM'yi kullanmanızı öneririz.Optimum Crashlytics deneyimi 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:32.6.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'yi kullanmadan Firebase kitaplığı bağımlılıklarını ekleyin
Firebase BoM'yi kullanmamayı tercih ederseniz 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 tüm sürümlerin uyumlu olmasını sağlayan BoM'yi kullanmanızı önemle tavsiye ettiğimizi unutmayın.
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.6.0") implementation("com.google.firebase:firebase-analytics:21.5.0") }
Adım 2 : Crashlytics Gradle eklentisini uygulamanıza ekleyin
Kök düzeyindeki (proje düzeyi) Gradle dosyanızda (
<project>/build.gradle.kts
veya<project>/build.gradle
), Crashlytics Gradle eklentisiniplugins
bloğuna ekleyin:Kotlin
plugins { id("com.android.application") version "7.3.0" apply false // ... // Make sure that you have the Google services Gradle plugin dependency id("com.google.gms.google-services") version "4.4.0" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "2.9.9" apply false }
Groovy
plugins { id 'com.android.application' version '7.3.0' apply false // ... // Make sure that you have the Google services Gradle plugin dependency id 'com.google.gms.google-services' version '4.4.0' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '2.9.9' apply false }
Modülünüz (uygulama düzeyi) 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ünüzde (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 sembollerin otomatik 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şebilmeniz için modül (uygulama düzeyi) Gradle dosyanızda
nativeSymbolUploadEnabled
öğesinintrue
olarak ayarlandığından emin olun.Yığın izlemelerinizde yöntem adlarının görünmesi için NDK kitaplığınızın her derlemesinden sonra
uploadCrashlyticsSymbolFile BUILD_VARIANT
görevini açıkça çağırmanız gerekir. Örneğin:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
Hem NDK için Crashlytics SDK'sı hem de Crashlytics Gradle eklentisi, yerel paylaşılan nesneler içindeki GNU yapı kimliğinin varlığına bağlıdır.
Çalıştırarak bu kimliğin varlığını doğrulayabilirsiniz.
readelf -n
her ikili dosyada. Yapı kimliği yoksa ekleyinSorunu çözmek için derleme sisteminizin bayraklarına -Wl,--build-id
.
5. Adım : Kurulumu tamamlamak için test çökmesini zorunlu kılın
Crashlytics kurulumunu tamamlamak ve Firebase konsolunun Crashlytics kontrol panelinde ilk verileri görmek için test kilitlenmesini zorlamanız gerekir.
Test çökmesini zorlamak için kullanabileceğiniz kodu uygulamanıza 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üğmenin etiketi "Çarpışmayı Test Et"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 kilitlenmesini zorlayın:
Uygulamanızı test cihazınızdan veya emülatörünüzden açın.
Uygulamanızda yukarıdaki kodu kullanarak eklediğiniz "Test Crash" butonuna basın.
Uygulamanız 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 sonra hâlâ test kilitlenmesini göremiyorsanı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ı kilitlenmelere karşı izliyor ve kilitlenme raporlarını ve istatistiklerini Crashlytics kontrol panelinde görüntüleyebilir ve inceleyebilirsiniz.
Sonraki adımlar
(Önerilen) GWP-ASan raporlarını toplayarak yerel bellek hatalarının neden olduğu çökmelerde hata ayıklama konusunda yardım alın. Bellekle ilgili bu hatalar, uygulamanızdaki güvenlik açıklarının önde gelen nedeni olan bellek bozulmasıyla ilişkilendirilebilir. 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ı (v18.3.6+ veya Firebase BoM v31.3.0+) kullandığından emin olun.
İsteğe bağlı raporlama, günlükler, anahtarlar ve önemli olmayan hataların takibini ekleyerek kilitlenme raporu kurulumunuzu özelleştirin .
Android uygulamanızın kilitlenme raporlarını doğrudan Crashlytics kontrol panelinde Google Play parçasına göre filtreleyebilmek için Google Play ile entegrasyon yapın . Bu, kontrol panelinizi belirli yapılara daha iyi odaklamanıza olanak tanır.
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 derleme işlemi). Bu durumlarda sembollerin başarıyla yüklenmesi için aşağıdaki seçenekler yararlı olabilir.
Seçenek : Kütüphane modülleri ve dış bağımlılıklar için sembolleri yükleyin
Bu seçenek aşağıdaki durumlarda yararlı 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 yerleşikse veya üçüncü tarafça sağlanıyorsa
- Otomatik sembol yükleme görevi başarısız oluyorsa veya kontrol panelinde sembolik olmayan çökmeler görüyorsanız
Standart Crashlytics sembol yükleme görevi, yerel kitaplıklarınızı uygulama modülünüzün Gradle yapısının bir parçası olarak CMake gibi standart NDK oluşturma araçlarını kullanarak oluşturduğunuzu varsayar.
Bununla birlikte, 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 tarafından sağlanmışsa, ayrıştırılmamış kitaplıklarınızın yolunu açıkça belirtmeniz gerekebilir. Bunu başarmak için unstrippedNativeLibsDir
özelliğini Gradle derleme dosyanızdaki Crashlytics uzantısına ekleyebilirsiniz.
Bu sayfanın başlarında ana iş akışında aşağıdaki başlangıç görevlerini tamamladığınızdan emin olun:
Otomatik sembol yükleme görevinin sembol bilgilerinizi bulabilmesi için aşağıdakileri modülünüzün (uygulama düzeyi) Gradle dosyasına ekleyin (genellikle
<project>/<app-module>/build.gradle.kts
veya<project>/<app-module>/build.gradle
):Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { release { configure
{ nativeSymbolUploadEnabled = true unstrippedNativeLibsDir = file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } } Groovy
// ... android { // ... buildTypes { release { firebaseCrashlytics { nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
Crashlytics eklentisi, belirtilen dizinde
.so
uzantılı yerel kitaplıkları yinelemeli olarak arayacaktır. Crashlytics daha sonra bu tür kitaplıkların tümünden hata ayıklama sembollerini çıkarır ve bunları Firebase sunucularına yükler.unstrippedNativeLibsDir
özelliğinde şunları belirtebilirsiniz:Aşağıdakiler dahil,
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 yapı türü için birden fazla dizin
Son olarak, Crashlytics kurulumunu tamamlamak ve ilk verileri Firebase konsolunun Crashlytics kontrol panelinde görmek için bir test kilitlenmesini zorlayın .
Seçenek : Gradle olmayan yapılar veya erişilemeyen, ayrıştırılmamış yerel kütüphaneler için semboller yükleyin
Bu seçenek aşağıdaki durumlarda yararlı olabilir:
Gradle dışında bir derleme işlemi kullanıyorsanız
Soyulmamış yerel kitaplıklarınız size Gradle derlemeleri sırasında erişilemeyecek bir şekilde sağlandıysa
Bu seçenek, bir yayın yapısı oluşturduğunuzda veya Firebase konsolunda sembolik yığın izlerini görmek istediğiniz herhangi bir yapı oluşturduğunuzda bir Firebase CLI komutunu çalıştırmanızı gerektirir.
Bu sayfanın başlarında ana iş akışında aşağıdaki başlangıç görevlerini tamamladığınızdan emin olun:
Bu seçenekle
firebaseCrashlytics
uzantısını eklemenize veya otomatik sembol yüklemeyi ayarlamanıza gerek olmadığını unutmayın, çünkü bunun yerine sembol dosyalarınızı oluşturmak ve yüklemek için Firebase CLI'yi (sonraki adımlar aşağıdadır) kullanacaksınız.Sembol yükleme için ortamınızı ve projenizi ayarlayın:
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 Ayarları > Yayınlama Ayarları > Oluştur > Özel Ana Bildirim kutusunu işaretleyin.
Assets/Plugins/Android/AndroidManifest.xml
konumunda bulunan bildirim şablonunu açın.Uygulama etiketine aşağıdaki özelliği ekleyin:
<application android:allowNativeHeapPointerTagging="false" ... />
Projenizi oluşturun.
Sembol bilgilerinizi yükleyin.
Derlemeniz tamamlandıktan sonra 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ızdaki Uygulama Kimliğinizmobilesdk_app_id
değeridir; veyaFirebase konsolunda Proje ayarlarınıza gidin. Uygulamalarınız kartına doğru aşağı kaydırın ve 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 dizinde
.so
uzantılı yerel kitaplıkları yinelemeli olarak arayacaktır.APK'yı doğrudan Unity içinden oluşturduk — PATH/TO/SYMBOLS derlemeniz tamamlandığında 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 yükleme için Firebase CLI komutunu kullanmaya ilişkin gelişmiş seçenekleri görüntüleyin
Bayrak Tanım --generator=csym
Varsayılan Breakpad oluşturucu yerine eski cSYM sembol dosyası oluşturucuyu kullanır
Kullanılması tavsiye edilmez. Varsayılan Breakpad sembol dosyası oluşturucusunu 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 eklediyseniz kullanın
build konfigürasyonunuzda symbolGenerator { csym() }
ve bunun yerine Breakpad'i kullanmak için onu geçersiz kılmak istiyorsunuz.--dry-run
Sembol dosyalarını oluşturur ancak 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 ilk verileri Firebase konsolunun Crashlytics kontrol panelinde görmek için bir test kilitlenmesini zorlayın .
Uygulamanızı kilitlenmeye zorlamanın bir parçası olarak oluşturduktan sonra, sembol dosyanızı yüklemek için Firebase CLI
crashlytics:symbols:upload
komutunu çalıştırdığınızdan emin olun.