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
) วิธีนี้จะช่วยเร่งเวลาในการสร้างสำหรับบิลด์ที่มีการสร้างความสับสน แต่โปรดทราบว่าสแต็กเทรซที่เป็นผลลัพธ์จะปรากฏขึ้นแบบสร้างความสับสนในหน้า 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 } } } }