Jika aplikasi Android Anda berisi pustaka asli , Anda dapat mengaktifkan pelacakan tumpukan penuh dan laporan kerusakan mendetail untuk kode asli Anda dari Firebase Crashlytics dengan beberapa pembaruan kecil pada konfigurasi pembangunan aplikasi Anda.
Panduan ini menjelaskan cara mengonfigurasi pelaporan kerusakan dengan Firebase Crashlytics SDK untuk NDK.
Jika Anda sedang mencari cara untuk memulai dengan Crashlytics di proyek Unity Anda, lihat panduan Memulai Unity .
Sebelum kamu memulai
Jika Anda belum melakukannya, tambahkan Firebase ke proyek Android Anda. Jika Anda tidak memiliki aplikasi Android, Anda dapat mengunduh contoh aplikasi .
Direkomendasikan : Untuk mendapatkan fitur seperti crash-free users, breadcrumb logs, dan velocity alerts, Anda perlu mengaktifkan Google Analytics di project Firebase Anda.
Jika proyek Firebase Anda yang ada tidak mengaktifkan Google Analytics, Anda dapat mengaktifkan Google Analytics dari tab Integrasi di Anda > Setelan proyek di konsol Firebase.
Jika Anda membuat proyek Firebase baru, aktifkan Google Analytics selama alur kerja pembuatan proyek.
Langkah 1 : Tambahkan Crashlytics SDK untuk NDK ke aplikasi Anda
Dalam file Gradle modul (level aplikasi) Anda (biasanya<project>/<app-module>/build.gradle
), tambahkan dependensi untuk library Android Crashlytics NDK. Kami merekomendasikan penggunaan Firebase Android BoM untuk mengontrol pembuatan versi library.Untuk pengalaman optimal dengan Crashlytics, sebaiknya aktifkan Google Analytics di project Firebase Anda dan tambahkan SDK Firebase untuk Google Analytics ke aplikasi Anda.
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:31.2.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' }
Dengan menggunakan Firebase Android BoM , aplikasi Anda akan selalu menggunakan versi pustaka Android Firebase yang kompatibel.
(Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM
Jika Anda memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi pustaka Firebase di baris dependensinya.
Perhatikan bahwa jika Anda menggunakan beberapa pustaka Firebase di aplikasi Anda, kami sangat menyarankan penggunaan BoM untuk mengelola versi pustaka, yang memastikan bahwa semua versi kompatibel.
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.3' implementation 'com.google.firebase:firebase-analytics-ktx:21.2.0' }
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:31.2.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' }
Dengan menggunakan Firebase Android BoM , aplikasi Anda akan selalu menggunakan versi pustaka Android Firebase yang kompatibel.
(Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM
Jika Anda memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi pustaka Firebase di baris dependensinya.
Perhatikan bahwa jika Anda menggunakan beberapa pustaka Firebase di aplikasi Anda, kami sangat menyarankan penggunaan BoM untuk mengelola versi pustaka, yang memastikan bahwa semua versi kompatibel.
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.3' implementation 'com.google.firebase:firebase-analytics:21.2.0' }
Langkah 2 : Tambahkan plugin Crashlytics Gradle ke aplikasi Anda
Di file Gradle level root (level proyek) Anda (
<project>/build.gradle
), tambahkan plugin Crashlytics Gradle sebagai dependensi buildscript: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.2' } }
Dalam file Gradle modul (level aplikasi) Anda (biasanya
<project>/<app-module>/build.gradle
), tambahkan plugin Gradle Crashlytics: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' ... }
Langkah 3 : Tambahkan ekstensi firebaseCrashlytics
ke build
Dalam file Gradle modul (level aplikasi) Anda (biasanya app/build.gradle
), tambahkan ekstensi firebaseCrashlytics
.
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 } } } }
Langkah 4 : Siapkan pengunggahan otomatis simbol asli
Untuk menghasilkan pelacakan tumpukan yang dapat dibaca dari error NDK, Crashlytics perlu mengetahui tentang simbol di biner native Anda. Plugin Crashlytics Gradle menyertakan tugas uploadCrashlyticsSymbolFile BUILD_VARIANT
untuk mengotomatiskan proses ini.
Agar Anda dapat mengakses tugas untuk pengunggahan simbol otomatis, pastikan bahwa
nativeSymbolUploadEnabled
disetel ketrue
dalam file Gradle modul (level aplikasi) Anda.Agar nama metode muncul di pelacakan tumpukan, Anda harus secara eksplisit menjalankan tugas
uploadCrashlyticsSymbolFile BUILD_VARIANT
setelah setiap build library NDK Anda. Sebagai contoh:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
Baik Crashlytics SDK for NDK maupun plugin Crashlytics Gradle bergantung pada keberadaan ID build GNU di dalam objek bawaan yang dibagikan.
Anda dapat memverifikasi keberadaan ID ini dengan menjalankan
readelf -n
pada setiap biner. Jika build ID tidak ada, tambahkan-Wl,--build-id
ke flag sistem build Anda untuk memperbaiki masalah.
Langkah 5 : Paksa uji crash untuk menyelesaikan penyiapan
Untuk menyelesaikan penyiapan Crashlytics dan melihat data awal di dasbor Crashlytics di Firebase console, Anda perlu memaksakan pengujian error.
Tambahkan kode ke aplikasi Anda yang dapat Anda gunakan untuk memaksakan error pengujian.
Anda bisa menggunakan kode berikut di
MainActivity
aplikasi Anda untuk menambahkan tombol ke aplikasi Anda yang, jika ditekan, akan menyebabkan crash. Tombol tersebut diberi label "Test Crash".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));
Bangun dan jalankan aplikasi Anda.
Paksa error pengujian untuk mengirimkan laporan error pertama aplikasi Anda:
Buka aplikasi Anda dari perangkat pengujian atau emulator.
Di aplikasi Anda, tekan tombol "Test Crash" yang Anda tambahkan menggunakan kode di atas.
Setelah aplikasi Anda mogok, mulai ulang agar aplikasi Anda dapat mengirimkan laporan kerusakan ke Firebase.
Buka dasbor Crashlytics di Firebase console untuk melihat error pengujian Anda.
Jika Anda telah me-refresh konsol dan Anda masih belum melihat pengujian error setelah lima menit, aktifkan logging debug untuk melihat apakah aplikasi Anda mengirim laporan kerusakan.
Dan itu saja! Crashlytics sekarang memantau aplikasi Anda untuk kerusakan, dan Anda dapat melihat serta menyelidiki laporan dan statistik kerusakan di dasbor Crashlytics.
Opsi alternatif untuk mengunggah simbol
Alur kerja utama pada halaman ini di atas berlaku untuk build Gradle standar. Namun, beberapa aplikasi menggunakan konfigurasi atau alat yang berbeda (misalnya proses build selain Gradle). Dalam situasi ini, opsi berikut mungkin berguna untuk berhasil mengunggah simbol.
Opsi : Unggah simbol untuk modul pustaka dan dependensi eksternal
Opsi ini dapat membantu dalam situasi berikut:
- Jika Anda menggunakan proses pembuatan NDK yang disesuaikan dalam Gradle
- Jika pustaka asli Anda dibuat dalam modul pustaka/fitur atau disediakan oleh pihak ketiga
- Jika tugas pengunggahan simbol otomatis gagal atau Anda melihat kerusakan yang tidak tersimbolkan di dasbor
Tugas unggahan simbol Crashlytics standar mengasumsikan bahwa Anda membuat pustaka asli sebagai bagian dari pembangunan Gradle modul aplikasi Anda, menggunakan alat pembangunan NDK standar seperti CMake.
Namun, jika Anda menggunakan proses build NDK yang disesuaikan dalam Gradle, atau library native Anda dibuat dalam modul library/fitur atau disediakan oleh pihak ketiga, Anda mungkin perlu secara eksplisit menentukan jalur ke library unstripped Anda. Untuk melakukannya, Anda dapat menambahkan properti unstrippedNativeLibsDir
di dalam ekstensi firebaseCrashlytics
di file build.gradle
Anda.
Pastikan Anda telah menyelesaikan tugas awal berikut dari alur kerja utama sebelumnya di halaman ini:
Agar tugas pengunggahan simbol otomatis dapat menemukan informasi simbol Anda, tambahkan kode berikut ke file
build.gradle
modul (level aplikasi):// ... android { // ... buildTypes { release { firebaseCrashlytics { nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
Plugin Crashlytics akan secara rekursif mencari direktori yang ditentukan untuk library native dengan ekstensi
.so
. Crashlytics kemudian mengekstrak simbol debug dari semua pustaka tersebut dan mengunggahnya ke server Firebase.Inilah yang dapat Anda tentukan di properti
unstrippedNativeLibsDir
:Argumen apa pun yang diizinkan untuk
org.gradle.api.Project#files(Object...)
, termasuk:java.lang.String
,java.io.File
, atauorg.gradle.api.file.FileCollection
Beberapa direktori untuk satu ragam build dengan menyediakan daftar atau instance
FileCollection
Terakhir, paksa pengujian mogok untuk menyelesaikan penyiapan Crashlytics dan untuk melihat data awal di dasbor Crashlytics konsol Firebase.
Opsi : Upload simbol untuk build non-Gradle atau library native unstripped yang tidak dapat diakses
Opsi ini dapat membantu dalam situasi berikut:
Jika Anda menggunakan proses build selain Gradle
Jika pustaka asli Anda yang tidak dilucuti diberikan kepada Anda dengan cara tertentu sehingga pustaka tersebut tidak dapat diakses selama pembangunan Gradle
Opsi ini mengharuskan Anda menjalankan perintah Firebase CLI saat membuat build rilis atau build apa pun yang ingin Anda lihat pelacakan tumpukan simbolisnya di Firebase console.
Pastikan Anda telah menyelesaikan tugas awal berikut dari alur kerja utama sebelumnya di halaman ini:
Menambahkan Crashlytics SDK untuk NDK dan plugin Crashlytics Gradle .
Perhatikan bahwa dengan opsi ini, Anda tidak perlu menambahkan ekstensi
firebaseCrashlytics
atau menyiapkan pengunggahan simbol otomatis karena Anda akan menggunakan Firebase CLI (langkah selanjutnya di bawah) untuk membuat dan mengunggah file simbol Anda.Siapkan lingkungan dan proyek Anda untuk pengunggahan simbol:
Ikuti petunjuk untuk memasang Firebase CLI .
Jika Anda telah menginstal CLI, pastikan untuk mengupdate ke versi terbarunya .
(hanya untuk aplikasi yang menggunakan Android API level 30+) Update template
AndroidManifest.xml
aplikasi Anda untuk menonaktifkan Penandaan Pointer:Centang kotak untuk Android Player Settings > Publishing Settings > Build > Custom Main Manifest .
Buka template manifes yang terletak di
Assets/Plugins/Android/AndroidManifest.xml
.Tambahkan atribut berikut ke tag aplikasi:
<application android:allowNativeHeapPointerTagging="false" ... />
Bangun proyek Anda.
Unggah informasi simbol Anda.
Setelah build Anda selesai, buat file simbol yang kompatibel dengan Crashlytics dan upload ke server Firebase dengan menjalankan perintah Firebase CLI berikut:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : ID Aplikasi Android Firebase Anda (bukan nama paket Anda)
Contoh ID Aplikasi Android Firebase:1:567383003300:android:17104a2ced0c9b9b
Berikut adalah dua cara untuk menemukan ID Aplikasi Firebase Anda:
Di file
google-services.json
Anda, ID Aplikasi Anda adalah nilaimobilesdk_app_id
; atauDi konsol Firebase, buka setelan Proyek Anda. Scroll ke bawah ke kartu Aplikasi Anda , lalu klik Aplikasi Firebase yang diinginkan untuk menemukan ID Aplikasinya.
PATH/TO/SYMBOLS : Jalur ke file simbol yang dihasilkan oleh CLI
Diekspor ke proyek Android Studio — PATH/TO/SYMBOLS bisa direktori apa saja. Firebase CLI akan secara rekursif mencari direktori yang ditentukan untuk library native dengan ekstensi
.so
.Membangun APK langsung dari dalam Unity — PATH/TO/SYMBOLS adalah jalur file simbol yang di-zip yang dihasilkan di direktori akar proyek saat pembangunan Anda selesai (misalnya:
myproject/myapp-1.0-v100.symbols.zip
).
Lihat opsi lanjutan untuk menggunakan perintah Firebase CLI untuk membuat dan mengunggah file simbol
Bendera Keterangan --generator=csym
Menggunakan generator file simbol cSYM lama alih-alih generator Breakpad default
Tidak disarankan untuk digunakan. Kami merekomendasikan penggunaan generator file simbol Breakpad default.
--generator=breakpad
Menggunakan generator file simbol Breakpad
Perhatikan bahwa default untuk pembuatan file simbol adalah Breakpad. Hanya gunakan flag ini jika Anda telah menambahkan
symbolGenerator { csym() }
dalam konfigurasi build dan ingin menggantinya untuk menggunakan Breakpad.--dry-run
Menghasilkan file simbol tetapi tidak mengunggahnya
Bendera ini berguna jika Anda ingin memeriksa isi file yang dikirimkan.
--debug
Memberikan informasi debug tambahan Terakhir, paksa pengujian mogok untuk menyelesaikan penyiapan Crashlytics dan untuk melihat data awal di dasbor Crashlytics konsol Firebase.
Setelah Anda mem-build aplikasi sebagai bagian dari pemaksaan error, pastikan untuk menjalankan perintah
crashlytics:symbols:upload
Firebase CLI untuk mengupload file simbol Anda.
Penyelesaian masalah
Jika Anda melihat pelacakan tumpukan yang berbeda di Firebase console dan di logcat, lihat Panduan pemecahan masalah .
Langkah selanjutnya
Sesuaikan penyiapan laporan kerusakan Anda dengan menambahkan pelaporan keikutsertaan, log, kunci, dan pelacakan kesalahan non-fatal.
Integrasikan dengan Google Play sehingga Anda dapat memfilter laporan kerusakan aplikasi Android Anda melalui jalur Google Play langsung di dasbor Crashlytics. Ini memungkinkan Anda untuk lebih memfokuskan dasbor Anda pada build tertentu.