| เลือกแพลตฟอร์ม: | 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) ให้ตั้งค่า
firebaseCrashlytics.mappingFileUploadEnabled พร็อพเพอร์ตี้ส่วนขยาย Gradle เป็น
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 } } } }