Halaman ini memberikan bantuan pemecahan masalah dan jawaban atas pertanyaan umum (FAQ) tentang penggunaan Crashlytics. Jika tidak dapat menemukan hal yang Anda cari atau membutuhkan bantuan lainnya, hubungi dukungan Firebase.
FAQ/pemecahan masalah umum
Melihat format yang berbeda (dan terkadang "varian") untuk beberapa masalah dalam tabel Masalah
Anda mungkin melihat dua format berbeda untuk masalah yang tercantum dalam tabel Issues di Firebase console. Anda mungkin juga melihat fitur yang disebut "varian" dalam beberapa masalah. Berikut adalah alasannya.
Pada awal 2023, kami meluncurkan mesin analisis yang telah ditingkatkan untuk mengelompokkan peristiwa serta desain yang diperbarui dan beberapa fitur lanjutan untuk masalah baru (seperti varian). Lihat postingan blog terbaru kami untuk semua detailnya, tetapi Anda dapat membaca penjelasannya di bawah.
Crashlytics menganalisis semua peristiwa dari aplikasi Anda (seperti error, non-fatal, dan ANR) dan membuat kelompok peristiwa yang disebutmasalah — semua peristiwa dalam masalah memiliki titik kegagalan yang sama.
Untuk mengelompokkan peristiwa ke dalam masalah ini, mesin analisis yang telah ditingkatkan kini melihat banyak aspek peristiwa, termasuk frame dalam stack trace, pesan pengecualian, kode error, dan karakteristik platform atau jenis error lainnya{101 }.
Namun, dalam kelompok peristiwa ini, stack trace yang mengarah ke kegagalan mungkin berbeda. Stack trace yang berbeda dapat berarti penyebab utama yang berbeda. Untuk merepresentasikan kemungkinan perbedaan ini dalam masalah, kami sekarang membuat varian dalam masalah - setiap varian adalah subgrup peristiwa dalam masalah yang memiliki titik kegagalan yang sama dan stack trace yang serupa. Dengan varian, Anda dapat men-debug stack trace yang paling umum dalam suatu masalah dan menentukan apakah penyebab utama yang berbeda menyebabkan kegagalan tersebut.
Berikut adalah hal yang akan Anda temukan dengan peningkatan ini:
Metadata yang diperbarui ditampilkan dalam baris Issue
Kini lebih mudah untuk memahami dan menanggulangi masalah di aplikasi Anda.Lebih sedikit masalah duplikat
Perubahan nomor baris tidak menyebabkan masalah baru.Proses debug yang lebih mudah untuk masalah yang kompleks dengan penyebab utama berbeda
Gunakan varian untuk men-debug stack trace yang paling umum dalam suatu masalah.Peringatan dan sinyal yang lebih bermakna
Masalah baru benar-benar mewakili bug baru.Penelusuran yang lebih canggih
Setiap masalah berisi metadata yang lebih mudah ditelusuri, seperti jenis pengecualian dan nama paket.
Berikut adalah peningkatan yang diluncurkan:
Saat mendapatkan peristiwa baru dari aplikasi Anda, kami akan memeriksa apakah peristiwa tersebut cocok dengan masalah yang ada.
Jika tidak ada kecocokan, kami akan otomatis menerapkan algoritme pengelompokan peristiwa yang lebih cerdas ke peristiwa tersebut dan membuat masalah baru dengan desain metadata yang diubah.
Ini adalah update besar pertama yang kami buat pada pengelompokan peristiwa. Jika Anda memiliki masukan atau mengalami masalah, beri tahu kami dengan mengirimkan laporan.
Tidak melihat metrik bebas error dan/atau pemberitahuan kecepatan
Jika Anda tidak melihat metrik bebas error (seperti pengguna dan sesi bebas error) dan/atau pemberitahuan kecepatan, pastikan Anda menggunakan Crashlytics SDK v18.6.0+ (atau Firebase BoM v32.6.0+).
Tidak melihat log breadcrumb
Jika Anda tidak melihat log breadcrumb, sebaiknya periksa konfigurasi aplikasi Anda untuk Google Analytics. Pastikan Anda memenuhi persyaratan berikut:
Anda telah mengaktifkan Google Analytics di project Firebase Anda.
Anda telah mengaktifkan Berbagi data untuk Google Analytics. Pelajari setelan ini lebih lanjut di artikel Mengelola setelan berbagi data Analytics
Anda sudah menambahkan Firebase SDK untuk Google Analytics ke aplikasi Anda. SDK ini harus ditambahkansebagai tambahan ke Crashlytics SDK.
Anda menggunakan versi Firebase SDK terbaru untuk semua produk yang digunakan di aplikasi Anda.
Pastikan terutama Anda menggunakan setidaknya versi Firebase SDK untuk Google Analytics berikut:
Android — v17.2.3+ (BoM v24.7.1+) .
Mengapa ANR hanya dilaporkan untuk Android 11+?
Crashlytics mendukung pelaporan ANR untuk aplikasi Android dari perangkat yang menjalankan Android 11 dan versi yang lebih tinggi. API yang mendasari yang kami gunakan untuk mengumpulkan ANR (getHistoricalProcessExitReasons) lebih andal dibandingkan pendekatan berbasis SIGQUIT atau watchdog. API ini hanya tersedia di perangkat Android 11+.
Mengapa beberapa ANR tidak memiliki BuildId
?
Jika beberapa ANR Anda tidak memiliki BuildId
, pecahkan masalah sebagai berikut:
Pastikan Anda menggunakan Crashlytics Android SDK dan versi plugin Gradle Crashlytics yang terbaru.
Jika
BuildId
untuk Android 11 dan beberapa ANR Android 12 tidak ada, mungkin Anda menggunakan SDK, plugin Gradle, atau keduanya yang sudah usang. Agar dapat mengumpulkanBuildId
untuk ANR ini dengan benar, Anda harus menggunakan versi berikut:- Crashlytics Android SDK v18.3.5+ (Firebase BoM v31.2.2+)
- Plugin Gradle Crashlytics v2.9.4+
Periksa apakah Anda menggunakan lokasi non-standar untuk library bersama.
Jika hanya
BuildId
yang hilang untuk library bersama aplikasi Anda, kemungkinan Anda tidak menggunakan lokasi default standar untuk library bersama. Jika ini yang terjadi, Crashlytics mungkin tidak dapat menemukanBuildId
terkait. Sebaiknya pertimbangkan untuk menggunakan lokasi standar untuk library bersama.Pastikan Anda tidak menghapus
BuildId
selama proses build.Perhatikan bahwa tips pemecahan masalah berikut berlaku untuk ANR dan masalah pada native code.
Periksa apakah
BuildId
ada dengan menjalankanreadelf -n
pada biner Anda. JikaBuildId
tidak ada, tambahkan-Wl,--build-id
ke flag untuk sistem build Anda.Pastikan Anda tidak menghapus
BuildId
secara tidak sengaja sebagai upaya untuk mengurangi ukuran APK.Jika Anda mempertahankan versi library yang telah dihapus dan dihapus garisnya, pastikan untuk mengarah ke versi yang benar dalam kode Anda.
Perbedaan antara laporan ANR di dasbor Crashlytics dan Konsol Google Play
Kemungkinan ada ketidakcocokan pada jumlah ANR antara Google Play dan Crashlytics. Hal ini wajar karena adanya perbedaan mekanisme pengumpulan dan pelaporan data ANR. Crashlytics melaporkan ANR saat aplikasi dimulai kembali, sedangkan Android Vitals mengirimkan data ANR setelah ANR terjadi.
Selain itu, Crashlytics hanya menampilkan ANR yang terjadi di perangkat yang menjalankan Android 11+, dibandingkan dengan Google Play yang menampilkan ANR dari perangkat yang menerima izin pengumpulan data dan layanan Google Play.
Perbedaan antara pelacakan tumpukan NDK di dasbor Crashlytics dan logcat
Toolchain LLVM dan GNU memiliki default dan penanganan yang berbeda untuk segmen hanya baca pada biner aplikasi, yang dapat menghasilkan pelacakan tumpukan yang tidak konsisten di Firebase console. Untuk mengatasi ini, tambahkan flag penaut berikut ke proses build Anda:
Jika menggunakan penaut
lld
dari toolchain LLVM, tambahkan:-Wl,--no-rosegment
Jika menggunakan penaut
ld.gold
dari toolchain GNU, tambahkan:-Wl,--rosegment
Jika masih melihat inkonsistensi pelacakan tumpukan (atau jika tidak satu pun flag tersebut relevan dengan toolchain Anda), coba tambahkan flag penaut berikut ke proses build:
-fno-omit-frame-pointer
Bagaimana cara menggunakan biner generator file simbol Breakpad saya sendiri untuk NDK?
Plugin Crashlytics menyertakan generator file simbol Breakpad yang disesuaikan.
Jika lebih suka menggunakan biner sendiri untuk membuat file simbol Breakpad (misalnya, jika Anda lebih memilih untuk mem-build semua file native yang dapat dieksekusi dalam rantai build dari sumber), gunakan properti ekstensi symbolGeneratorBinary
opsional untuk menentukan jalur ke file yang dapat dieksekusi tersebut.
Anda dapat menentukan jalur ke biner generator file simbol Breakpad dengan salah satu dari dua cara berikut:
Opsi 1: Menentukan jalur melalui ekstensi
firebaseCrashlytics
di filebuild.gradle
AndaTambahkan blok berikut ini ke file
build.gradle.kts
level aplikasi Anda:Plugin Gradle v3.0.0+
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") } } } }
versi plugin yang lebih rendah
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") } } } } }
Opsi 2: Menentukan jalur melalui baris properti di file properti Gradle Anda
Anda dapat menggunakan properti
com.google.firebase.crashlytics.breakpadBinary
untuk menentukan jalur ke file yang dapat dieksekusi.Anda dapat memperbarui file properti Gradle secara manual atau melalui command line. Misalnya, untuk menentukan jalur melalui command line, gunakan perintah seperti berikut:
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.breakpadBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
Tidak ada error dengan DexGuard
Jika melihat pengecualian berikut, kemungkinan Anda menggunakan versi DexGuard yang tidak kompatibel dengan Firebase Crashlytics SDK:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
Pengecualian ini tidak menyebabkan aplikasi Anda error, tetapi mencegahnya mengirim laporan error. Untuk memperbaikinya:
Gunakan rilis DexGuard 8.x terbaru. Versi terbaru berisi aturan yang diperlukan oleh Firebase Crashlytics SDK.
Jika tidak ingin mengubah versi DexGuard, coba tambahkan baris berikut ke aturan obfuscation (di file konfigurasi DexGuard):
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
Mengapa saya melihat error dari file .kt
yang diberi label sebagai masalah .java
?
Saat aplikasi menggunakan obfuscator yang tidak mengekspos ekstensi file, Crashlytics membuat setiap masalah dengan ekstensi file .java
secara default.
Agar Crashlytics dapat membuat masalah dengan ekstensi file yang benar, pastikan aplikasi Anda menggunakan penyiapan berikut:
- Menggunakan Android Gradle 4.2.0 atau versi yang lebih tinggi
- Menggunakan R8 dengan obfuscation diaktifkan. Untuk mengupdate aplikasi ke R8, ikuti dokumentasi ini.
Perlu diperhatikan bahwa setelah memperbarui penyiapan sesuai dengan yang dijelaskan di atas, Anda mungkin akan mulai melihat masalah .kt
baru yang merupakan duplikat dari masalah .java
yang sudah ada. Lihat FAQ untuk mempelajari situasi tersebut lebih lanjut.
Mengapa saya melihat masalah .kt
yang merupakan duplikat dari masalah .java
yang sudah ada?
Mulai pertengahan Desember 2021, Crashlytics meningkatkan dukungan untuk aplikasi yang menggunakan Kotlin.
Hingga baru-baru ini, obfuscator yang tersedia tidak mengekspos ekstensi file, sehingga Crashlytics membuat setiap masalah dengan ekstensi file .java
secara default.
Namun, pada Android Gradle 4.2.0, R8 mendukung ekstensi file.
Dengan update ini, Crashlytics kini dapat menentukan apakah setiap class yang digunakan dalam aplikasi ditulis dengan Kotlin dan menyertakan nama file yang benar dalam tanda tangan masalah. Error kini diatribusikan dengan benar ke file .kt
(yang sesuai) jika aplikasi Anda memiliki penyiapan berikut:
- Aplikasi Anda menggunakan Android Gradle 4.2.0 atau versi yang lebih tinggi.
- Aplikasi Anda menggunakan R8 dengan obfuscation diaktifkan.
Karena error baru kini menyertakan ekstensi file yang benar dalam tanda tangan masalahnya, Anda mungkin melihat masalah .kt
baru yang sebenarnya hanya merupakan duplikat dari masalah berlabel .java
yang sudah ada. Di Firebase console, kami mencoba mengidentifikasi dan memberi tahu Anda jika masalah .kt
baru merupakan kemungkinan duplikat dari masalah berlabel .java
yang sudah ada.
Siapa yang dapat melihat, menulis, dan menghapus catatan tentang masalah?
Catatan memungkinkan anggota project untuk mengomentari masalah tertentu dengan pertanyaan, update status, dll.
Saat anggota project memposting catatan, catatan tersebut akan diberi label dengan email akun Google-nya. Alamat email ini akan terlihat bersama dengan catatan oleh semua anggota project yang memiliki akses untuk melihat catatan tersebut.
Berikut ini akan dijelaskan tentang akses yang diperlukan untuk melihat, menulis, dan menghapus catatan:
Anggota project dengan salah satu peran berikut dapat melihat dan menghapus catatan yang ada dan menulis catatan baru tentang suatu masalah.
- Pemilik atau Editor Project, Firebase Admin, Quality Admin, atau Crashlytics Admin
Anggota project dengan salah satu peran berikut dapat melihat catatan yang diposting tentang masalah, tetapi mereka tidak dapat menghapus atau menulis catatan.
- Project Viewer, Firebase Viewer, Quality Viewer, atau Crashlytics Viewer
Bagaimana cara penghitungan pengguna bebas error?
Lihat bagian Memahami metrik bebas error.
Siapa yang dapat melihat, menulis, dan menghapus catatan pada masalah?
Catatan memungkinkan anggota project untuk mengomentari masalah tertentu dengan pertanyaan, update status, dll.
Saat anggota project memposting catatan, catatan tersebut akan diberi label dengan email akun Google-nya. Alamat email ini akan terlihat bersama dengan catatan oleh semua anggota project yang memiliki akses untuk melihat catatan tersebut.
Berikut ini akan dijelaskan tentang akses yang diperlukan untuk melihat, menulis, dan menghapus catatan:
Anggota project dengan salah satu peran berikut dapat melihat dan menghapus catatan yang ada dan menulis catatan baru tentang suatu masalah.
- Pemilik atau Editor Project, Firebase Admin, Quality Admin, atau Crashlytics Admin
Anggota project dengan salah satu peran berikut dapat melihat catatan yang diposting tentang masalah, tetapi mereka tidak dapat menghapus atau menulis catatan.
- Project Viewer, Firebase Viewer, Quality Viewer, atau Crashlytics Viewer
Integrasi
Aplikasi juga menggunakan Google Mobile Ads SDK tetapi tidak mengalami error
Jika project Anda menggunakan Crashlytics bersama dengan Google Mobile Ads SDK, mungkin terjadi gangguan dari pelapor error saat pengendali pengecualian didaftarkan. Untuk memperbaiki masalah ini, nonaktifkan pelaporan error di Mobile Ads SDK dengan memanggil disableSDKCrashReporting
.
Di mana lokasi set data BigQuery saya?
Setelah Anda menautkan Crashlytics ke BigQuery, set data baru yang Anda buat secara otomatis berada di Amerika Serikat, terlepas dari lokasi project Firebase Anda.
Dukungan platform
Apakah Crashlytics mendukung armeabi?
Firebase Crashlytics NDK tidak mendukung ARMv5 (armeabi). Dukungan untuk ABI ini telah dihapus sejak NDK r17.
Masalah yang mengalami regresi
Apa yang dimaksud dengan masalah yang mengalami regresi?
Sebuah masalah mengalami regresi saat sebelumnya Anda telah menutupnya, tetapi Crashlytics mendapatkan laporan baru bahwa masalah tersebut muncul kembali. Crashlytics otomatis akan membuka kembali masalah yang mengalami regresi ini agar Anda dapat mengatasinya sebagaimana mestinya untuk aplikasi Anda.
Berikut contoh skenario yang menjelaskan cara Crashlytics mengategorikan masalah sebagai regresi:
- Untuk pertama kalinya, Crashlytics mendapatkan laporan error terkait Error "A". Crashlytics akan membuka masalah terkait untuk error tersebut (Masalah "A").
- Anda dapat memperbaiki bug ini dengan cepat, menutup Masalah "A", lalu merilis versi baru aplikasi.
- Crashlytics akan menerima laporan lain tentang Masalah "A" setelah Anda menutup masalah.
- Jika laporan berasal dari versi aplikasi yang diketahui Crashlytics saat Anda menutup masalah (artinya versi tersebut telah mengirimkan laporan error untuk error apa pun), Crashlytics tidak akan menganggap masalah tersebut sebagai regresi. Masalah akan tetap ditutup.
- Jika laporan berasal dari versi aplikasi yang tidak diketahui Crashlytics saat Anda menutup masalah (artinya versi sama sekali tidak pernah mengirim laporan error untuk error apa pun), Crashlytics akan menganggap masalah mengalami regresi dan akan membuka kembali masalah tersebut.
Saat masalah mengalami regresi, kami mengirimkan pemberitahuan deteksi regresi dan menambahkan sinyal regresi ke masalah tersebut untuk memberi tahu Anda bahwa Crashlytics telah membuka kembali masalah ini. Jika Anda tidak ingin masalah dibuka kembali karena algoritma regresi kami, "nonaktifkan" masalah, bukan menutupnya.
Mengapa saya melihat masalah yang mengalami regresi untuk versi aplikasi yang lebih lama?
Jika laporan berasal dari versi aplikasi lama yang belum pernah mengirim laporan error apa pun saat Anda menutup masalah, maka Crashlytics akan mempertimbangkan masalah yang mengalami regresi dan membuka kembali masalah tersebut.
Situasi ini dapat terjadi dalam situasi berikut: Anda telah memperbaiki bug dan merilis versi baru aplikasi, tetapi Anda masih memiliki pengguna di versi lama tanpa perbaikan bug. Jika, kebetulan, salah satu versi lama tersebut tidak pernah mengirim laporan error sama sekali saat Anda menutup masalah, dan pengguna tersebut mulai menemukan bug, maka laporan error tersebut akan memicu masalah yang mengalami regresi.
Jika Anda tidak ingin masalah dibuka kembali karena algoritma regresi kami, "nonaktifkan" masalah, bukan menutupnya.