Mendapatkan laporan error yang dapat dibaca di dasbor Crashlytics


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 pelacakan tumpukan 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 pelacakan tumpukan 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
    }
  }
}
}