รับรายงานข้อขัดข้องที่อ่านได้ในหน้าแดชบอร์ด Crashlytics


Crashlyticsปลั๊กอิน Gradle จะตรวจหาโดยอัตโนมัติเมื่อคุณทำให้โค้ดอ่านยาก เมื่อบิลด์สร้างไฟล์การแมป ปลั๊กอินจะอัปโหลดไฟล์ดังกล่าว เพื่อให้เซิร์ฟเวอร์ Crashlytics ใช้ไฟล์ในการแสดงผล สแต็กเทรซของแอปเป็นโค้ดที่อ่านได้และไม่ได้ทำการปกปิด

การกำหนดค่าที่จำเป็นเมื่อใช้ R8, ProGuard และ DexGuard

Crashlytics สามารถถอดรหัสซอร์สโค้ดที่ปรับให้ยากต่อการอ่าน (Obfuscate) ด้วยไฟล์การแมปที่เข้ากันได้กับ ProGuard และ ได้รับการทดสอบเพิ่มเติมกับ ProGuard, R8 และ DexGuard

หากแอปใช้ R8 โดยเปิดการปกปิดโค้ดร่วมกับ Android Gradle 4.2.0 ขึ้นไป Crashlytics จะสร้างรายงานข้อขัดข้องที่อ่านได้ โปรดทราบว่าCrashlytics เราเพิ่งปรับปรุงการรองรับแอปที่ใช้ทั้ง Kotlin และ R8 ซึ่งอาจส่งผลให้การติดป้ายกำกับปัญหาบางอย่างไม่เป็นไปตามที่คาดไว้

หากแอปใช้ไฟล์กำหนดค่า ProGuard คุณจะต้องเก็บรักษาข้อมูลที่ Crashlytics ต้องการเพื่อสร้างรายงานข้อขัดข้องที่อ่านได้ โดยการเพิ่มบรรทัดต่อไปนี้ลงในไฟล์การกำหนดค่า ProGuard หรือ DexGuard

-keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
-keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.

หากต้องการความช่วยเหลือสำหรับคำถามหรือปัญหาที่เกี่ยวข้องกับ DexGuard โปรดติดต่อทีมสนับสนุนของ Guardsquare โดยตรง หากต้องการความช่วยเหลือเกี่ยวกับ ProGuard โปรดไปที่ฟอรัมชุมชนของ Guardsquare เพื่อรับความช่วยเหลือจากผู้เชี่ยวชาญ

เก็บตัวแปรของบิลด์ที่ผ่านการปกปิด

หากต้องการป้องกันไม่ให้ปลั๊กอิน Crashlytics Gradle อัปโหลดไฟล์การแมปสำหรับ ตัวแปรที่ใช้การปกปิดโค้ด ให้ตั้งค่าfirebaseCrashlytics.mappingFileUploadEnabledพร็อพเพอร์ตี้ส่วนขยาย Gradle เป็น false ในไฟล์ Gradle ระดับโมดูล (ระดับแอป) (โดยปกติคือ <project>/<app-module>/build.gradle.kts หรือ <project>/<app-module>/build.gradle) ซึ่งจะช่วยเร่งเวลาบิลด์ สำหรับการบิลด์ที่ปกปิดโค้ด แต่โปรดทราบว่า Stack Trace ที่ได้จะ ปรากฏในรูปแบบที่ปกปิดโค้ดในหน้าCrashlyticsของคอนโซล Firebase

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