Plugin Gradle Crashlytics dapat mendeteksi secara otomatis saat Anda meng-obfuscate kode. Saat build menghasilkan file pemetaan, plugin akan menguploadnya sehingga server Crashlytics dapat menggunakan file tersebut untuk menampilkan stack trace aplikasi sebagai kode yang tidak di-obfuscate dan dapat dibaca manusia.
Konfigurasi yang diperlukan saat menggunakan R8, ProGuard, dan DexGuard
Crashlytics dapat men-deobfuscate dengan file pemetaan yang kompatibel dengan ProGuard, dan telah diuji dengan ProGuard, R8, dan DexGuard.
Jika aplikasi Anda menggunakan R8 dengan obfuscation yang diaktifkan beserta Android Gradle 4.2.0+, Crashlytics akan menghasilkan laporan error yang dapat dibaca. Perhatikan bahwa Crashlytics baru-baru ini meningkatkan dukungan untuk aplikasi yang menggunakan Kotlin dan R8, yang dapat menyebabkan beberapa pelabelan masalah tidak terduga.
Jika aplikasi Anda menggunakan file konfigurasi ProGuard, Anda harus menyimpan informasi yang diperlukan Crashlytics untuk menghasilkan laporan error yang dapat dibaca. Lakukan hal ini dengan menambahkan baris berikut ke file konfigurasi ProGuard atau DexGuard Anda:
-keepattributes SourceFile,LineNumberTable # Keep file names and line numbers. -keep public class * extends java.lang.Exception # Optional: Keep custom exceptions.
Untuk mendapatkan bantuan atas pertanyaan atau masalah terkait DexGuard, hubungi langsung tim dukungan Guardsquare. Untuk mendapatkan bantuan terkait ProGuard, buka forum Komunitas Guardsquare untuk mendapatkan bantuan dari pakar.
Mempertahankan varian build yang di-obfuscate
Untuk mencegah plugin Gradle Crashlytics mengupload file pemetaan untuk varian yang menggunakan obfuscation, tetapkan properti ekstensi Gradle firebaseCrashlytics.mappingFileUploadEnabled
ke false
di file Gradle modul (level aplikasi) (biasanya <project>/<app-module>/build.gradle.kts
atau <project>/<app-module>/build.gradle
). Hal ini dapat membantu mempercepat waktu build untuk build yang di-obfuscate, tetapi perhatikan bahwa stack trace yang dihasilkan akan tampil seperti di-obfuscate di halaman Crashlytics pada Firebase console.
Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // To enable Crashlytics mapping file upload for specific build types: buildTypes { getByName("debug") { minifyEnabled = true configure<CrashlyticsExtension> { mappingFileUploadEnabled = false } } } ... // To enable Crashlytics mapping file upload for specific product flavors: flavorDimensions += "environment" productFlavors { create("staging") { dimension = "environment" ... configure<CrashlyticsExtension> { mappingFileUploadEnabled = false } } create("prod") { dimension = "environment" ... configure<CrashlyticsExtension> { mappingFileUploadEnabled = true } } } }
Groovy
android { // To enable Crashlytics mapping file upload for specific build types: buildTypes { debug { minifyEnabled true firebaseCrashlytics { mappingFileUploadEnabled false } } } ... // To enable Crashlytics mapping file upload for specific product flavors: flavorDimensions "environment" productFlavors { staging { dimension "environment" ... firebaseCrashlytics { mappingFileUploadEnabled false } } prod { dimension "environment" ... firebaseCrashlytics { mappingFileUploadEnabled true } } } }