Jika aplikasi Android berisi library native, Anda dapat mengaktifkan pelacakan tumpukan penuh dan laporan error yang mendetail untuk kode native dari Firebase Crashlytics dengan sejumlah perubahan kecil pada konfigurasi build aplikasi Anda.
Panduan ini menjelaskan cara mengonfigurasi pelaporan error dengan Firebase Crashlytics SDK untuk NDK.
Jika Anda mencari cara memulai penggunaan Crashlytics di project Unity, lihat panduan Memulai Unity.
Sebelum memulai
Tambahkan Firebase ke project Android jika belum melakukannya. Jika tidak memiliki aplikasi Android, Anda dapat mendownload aplikasi contoh.
Direkomendasikan: Untuk mendapatkan log breadcrumb secara otomatis guna memahami tindakan pengguna yang menyebabkan peristiwa error, non-fatal, atau ANR, Anda harus mengaktifkan Google Analytics di project Firebase Anda.
Jika project Firebase yang ada belum mengaktifkan Google Analytics, Anda dapat mengaktifkan Google Analytics dari tab Integrations di
di > Project settingsFirebase console. Jika Anda membuat project Firebase baru, aktifkan Google Analytics selama alur kerja pembuatan project.
Pastikan bahwa aplikasi Anda memiliki versi minimum yang diperlukan berikut:
- Gradle 8.0
- Plugin Android Gradle 8.1.0
- Plugin Gradle layanan Google 4.4.1
Langkah 1: Tambahkan Crashlytics SDK untuk NDK ke aplikasi Anda
Dalam file Gradle modul (level aplikasi) (biasanya<project>/<app-module>/build.gradle.kts
atau
<project>/<app-module>/build.gradle
),
tambahkan dependensi untuk library Crashlytics untuk Android. Sebaiknya gunakan
Firebase Android BoM
untuk mengontrol pembuatan versi library.
Untuk mengoptimalkan penggunaan Crashlytics, sebaiknya aktifkan Google Analytics di project Firebase dan tambahkan Firebase SDK untuk Google Analytics ke aplikasi Anda.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.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") }
Dengan menggunakan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.
(Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM
Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.
Perlu diperhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi, sebaiknya gunakan BoM untuk mengelola versi library, 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:19.2.1") implementation("com.google.firebase:firebase-analytics:22.1.2") }
Langkah 2: Tambahkan plugin Gradle Crashlytics ke aplikasi Anda
Dalam file Gradle level root (level project) (
<project>/build.gradle.kts
atau<project>/build.gradle
), tambahkan plugin Gradle Crashlytics ke blokplugins
:Kotlin
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id("com.android.application") version "8.1.4" apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id("com.google.gms.google-services") version "4.4.2" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.2" apply false }
Groovy
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id 'com.android.application' version '8.1.4' apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id 'com.google.gms.google-services' version '4.4.2' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.2' apply false }
Dalam file Gradle modul (level aplikasi) (biasanya
<project>/<app-module>/build.gradle.kts
atau<project>/<app-module>/build.gradle
), tambahkan plugin Gradle Crashlytics: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' }
Langkah 3: Tambahkan ekstensi Crashlytics ke build Anda
Dalam file Gradle modul (level aplikasi) (biasanya <project>/<app-module>/build.gradle.kts
atau <project>/<app-module>/build.gradle
), konfigurasikan ekstensi rashlytics extension.
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 } } } }
Langkah 4: Siapkan upload otomatis simbol native
Untuk menghasilkan stack trace yang dapat dibaca dari error NDK, Crashlytics perlu mengetahui simbol dalam biner native Anda. Plugin Gradle Crashlytics menyertakan tugas uploadCrashlyticsSymbolFileBUILD_VARIANT
untuk mengotomatiskan proses ini.
Agar Anda dapat mengakses tugas untuk upload simbol otomatis, pastikan
nativeSymbolUploadEnabled
ditetapkan ketrue
dalam file Gradle modul (level aplikasi).Agar nama metode muncul dalam stack trace, Anda harus secara eksplisit memanggil tugas
uploadCrashlyticsSymbolFileBUILD_VARIANT
setelah setiap build library NDK. Contoh:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
Baik Crashlytics SDK untuk NDK maupun plugin Gradle Crashlytics bergantung pada keberadaan ID build GNU dalam objek native bersama.
Anda dapat memverifikasi keberadaan ID ini dengan menjalankan
pada setiap biner. Jika ID build tidak ada, tambahkanreadelf -n
ke flag sistem build untuk memperbaiki masalah ini.-Wl,--build-id
Langkah 5: Sengaja pancing error pengujian untuk menyelesaikan penyiapan
Untuk menyelesaikan penyiapan Crashlytics dan melihat data awal di dasbor Crashlytics pada Firebase console, Anda harus memaksa error pengujian.
Tambahkan kode ke aplikasi yang dapat Anda gunakan untuk memaksa error pengujian.
Anda dapat menggunakan kode berikut di
MainActivity
aplikasi untuk menambahkan tombol ke aplikasi Anda yang, jika ditekan, akan menyebabkan error. 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:
Buka aplikasi dari emulator atau perangkat pengujian.
Di aplikasi Anda, tekan tombol "Test Crash" yang telah ditambahkan menggunakan kode di atas.
Setelah aplikasi Anda mengalami error, mulai ulang aplikasi agar dapat mengirimkan laporan error ke Firebase.
Buka dasbor Crashlytics di Firebase console untuk melihat error pengujian Anda.
Jika Anda sudah me-refresh konsol dan masih tidak melihat error pengujian setelah lima menit, aktifkan logging debug untuk melihat apakah aplikasi Anda mengirim laporan error atau tidak.
Dan selesai! Crashlytics kini akan memantau aplikasi Anda untuk menemukan error, dan Anda dapat melihat serta menyelidiki laporan error dan statistik error di dasbor Crashlytics.
Langkah berikutnya
(Direkomendasikan) Dapatkan bantuan terkait proses debug error yang disebabkan oleh error memori native dengan mengumpulkan laporan GWP-ASan. Error terkait memori ini dapat dikaitkan dengan kerusakan memori dalam aplikasi Anda, yang merupakan penyebab utama kerentanan keamanan aplikasi. Untuk memanfaatkan fitur proses debug ini, pastikan aplikasi Anda telah mengaktifkan GWP-ASan secara eksplisit dan menggunakan Crashlytics SDK terbaru untuk NDK (v18.3.6 dan yang lebih baru atau Firebase BoM v31.3.0 dan yang lebih baru).
Sesuaikan penyiapan laporan kesalahan dengan menambahkan pelaporan keikutsertaan, log, kunci, dan pelacakan error non-fatal.
Integrasikan dengan Google Play sehingga Anda dapat memfilter laporan error aplikasi Android berdasarkan jalur Google Play secara langsung di dasbor Crashlytics. Dengan demikian, Anda dapat lebih memfokuskan dasbor pada build tertentu.
Pemecahan masalah
Jika stack trace di Firebase console dan di logcat berbeda, lihat panduan Pemecahan Masalah.
Opsi alternatif untuk mengupload simbol
Alur kerja utama yang dijelaskan di atas pada halaman ini 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 agar berhasil mengupload simbol.
Opsi: Upload simbol untuk modul library dan dependensi eksternal
Opsi ini dapat berguna dalam situasi berikut:
- Jika Anda menggunakan proses build NDK yang disesuaikan dalam Gradle
- Jika library native Anda dibangun dalam modul library/fitur atau disediakan oleh pihak ketiga
- Jika tugas upload simbol otomatis gagal atau Anda melihat error yang tidak disimbolisasi di dasbor
Opsi: Upload simbol untuk build non-Gradle atau library native unstripped yang tidak dapat diakses
Opsi ini dapat berguna dalam situasi berikut:
Jika Anda menggunakan proses build selain Gradle
Jika library native unstripped yang disediakan untuk Anda tidak dapat diakses selama build Gradle