| เลือกแพลตฟอร์ม: | iOS+ Android Flutter Unity |
ปลั๊กอิน Gradle Crashlytics สามารถตรวจหาได้โดยอัตโนมัติเมื่อคุณปรับโค้ดให้ยากต่อการอ่าน (Obfuscate) เมื่อบิวด์สร้างไฟล์การแมป ปลั๊กอินจะอัปโหลดไฟล์ดังกล่าว เพื่อให้เซิร์ฟเวอร์ Crashlytics ใช้ไฟล์นี้แสดงผล Stack Trace ของแอป เป็นโค้ดที่ไม่ได้ปรับให้ยากต่อการอ่านและอ่านได้
การกำหนดค่าที่จำเป็นเมื่อใช้ R8, ProGuard และ DexGuard
Crashlytics สามารถปรับโค้ดที่ปรับให้ยากต่อการอ่าน (Deobfuscate) ได้ด้วยไฟล์การแมปที่เข้ากันได้กับ ProGuard และ ยังได้รับการทดสอบกับ ProGuard, R8 และ DexGuard แล้วด้วย
หากแอปของคุณใช้ R8 โดยเปิดใช้การปรับโค้ดให้ยากต่อการอ่าน (Obfuscation) พร้อมกับ 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 เพื่อรับความช่วยเหลือจากผู้เชี่ยวชาญ
เก็บตัวแปรของบิวด์ที่ปรับโค้ดให้ยากต่อการอ่าน (Obfuscated)
หากต้องการป้องกันไม่ให้ปลั๊กอิน Crashlytics Gradle อัปโหลดไฟล์การแมปสำหรับตัวแปรที่ใช้การปรับโค้ดให้ยากต่อการอ่าน (Obfuscation) ให้ตั้งค่าพร็อพเพอร์ตี้ส่วนขยาย Gradle firebaseCrashlytics.mappingFileUploadEnabled เป็น false ในไฟล์ Gradle ระดับโมดูล (แอป) (โดยปกติจะเป็น <project>/<app-module>/build.gradle.kts หรือ <project>/<app-module>/build.gradle) ซึ่งจะช่วยเร่งเวลาในการบิวด์สำหรับบิวด์ที่ปรับโค้ดให้ยากต่อการอ่าน (Obfuscated) แต่โปรดทราบว่า Stack Trace ที่ได้จะปรากฏเป็นโค้ดที่ปรับให้ยากต่อการอ่าน (Obfuscated) ในหน้า 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 } } } }