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

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


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