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