Trình bổ trợ Gradle Crashlytics có thể tự động phát hiện thời điểm bạn làm rối mã. Khi bản dựng tạo một tệp ánh xạ, trình bổ trợ sẽ tải tệp đó lên để các máy chủ Crashlytics có thể sử dụng tệp đó nhằm hiển thị dấu vết ngăn xếp của ứng dụng dưới dạng mã không bị làm rối mã nguồn và người dùng có thể đọc được.
Cấu hình bắt buộc khi sử dụng R8, ProGuard và DexGuard
Crashlytics có thể gỡ rối mã nguồn bằng bất kỳ tệp ánh xạ nào tương thích với ProGuard và cũng đã được thử nghiệm với ProGuard, R8 và DexGuard.
Nếu ứng dụng của bạn sử dụng R8 với tính năng làm rối mã nguồn được bật cùng với Android Gradle 4.2.0 trở lên, thì Crashlytics sẽ tạo ra các báo cáo sự cố có thể đọc được. Xin lưu ý rằng Crashlytics gần đây đã cải thiện khả năng hỗ trợ cho các ứng dụng sử dụng cả Kotlin và R8. Điều này có thể dẫn đến một số vấn đề gắn nhãn không mong muốn.
Nếu ứng dụng của bạn sử dụng tệp cấu hình ProGuard, bạn cần lưu giữ thông tin mà Crashlytics yêu cầu để tạo báo cáo sự cố có thể đọc được. Hãy thực hiện việc này bằng cách thêm các dòng sau vào tệp cấu hình ProGuard hoặc DexGuard:
-keepattributes SourceFile,LineNumberTable # Keep file names and line numbers. -keep public class * extends java.lang.Exception # Optional: Keep custom exceptions.
Để được trợ giúp về các câu hỏi hoặc vấn đề liên quan đến DexGuard, hãy liên hệ trực tiếp với nhóm hỗ trợ của Guardsquare. Để được trợ giúp về ProGuard, hãy truy cập vào Diễn đàn cộng đồng Guardsquare để được chuyên gia hỗ trợ.
Giữ lại các biến thể bản dựng đã làm rối mã nguồn
Để ngăn trình bổ trợ Gradle Crashlytics tải tệp ánh xạ lên cho các biến thể sử dụng tính năng làm rối mã nguồn, hãy đặt thuộc tính tiện ích Gradle firebaseCrashlytics.mappingFileUploadEnabled
thành false
trong tệp Gradle mô-đun (cấp ứng dụng) (thường là <project>/<app-module>/build.gradle.kts
hoặc <project>/<app-module>/build.gradle
). Điều này có thể giúp tăng tốc thời gian tạo bản dựng cho các bản dựng bị làm rối mã nguồn, nhưng xin lưu ý rằng dấu vết ngăn xếp thu được sẽ xuất hiện bị làm rối mã nguồn trong trang Crashlytics của bảng điều khiển 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 } } } }