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

เลือกแพลตฟอร์ม iOS+ Android เว็บ Flutter Unity


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

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

Crashlytics สามารถถอดรหัสซอร์สโค้ดที่สร้างความสับสนด้วยไฟล์การแมปที่เข้ากันได้กับ 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 เพื่อรับความช่วยเหลือจากผู้เชี่ยวชาญ

เก็บตัวแปรบิลด์ที่สร้างความสับสน

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