| เลือกแพลตฟอร์ม | 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 } } } }