Nhận báo cáo sự cố dễ đọc trong trang tổng quan Crashlytics (Android)

Chọn nền tảng: iOS+ Android Flutter Unity


Trình bổ trợ Crashlytics Gradle có thể tự động phát hiện khi bạn làm rối mã nguồn. Khi bản dựng của bạn tạo một tệp ánh xạ, trình bổ trợ sẽ tải tệp đó lên để máy chủ Crashlytics có thể sử dụng tệp này để 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 và con người có thể đọc được.

Cấu hình bắt buộc khi sử dụng R8, ProGuard và DexGuard

Crashlytics có thể huỷ làm rối bằng mọi tệp ánh xạ tương thích với ProGuard và đã được kiểm thử thêm với ProGuard, R8 và DexGuard.

Nếu ứng dụng của bạn sử dụng R8 và bật tính năng làm rối cùng với Android Gradle 4.2.0 trở lên, Crashlytics sẽ tạo báo cáo sự cố dễ đọc. Xin lưu ý rằng Crashlytics gần đây, Crashlytics đã 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 đề không mong muốn về việc gắn nhãn.

Nếu ứng dụng của bạn sử dụng tệp cấu hình ProGuard, thì bạn cần giữ lại thông tin Crashlytics yêu cầu để tạo báo cáo sự cố dễ đọ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 bị làm rối

Để ngăn trình bổ trợ Crashlytics Gradle tải tệp ánh xạ cho các biến thể sử dụng tính năng làm rối, 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 xây dựng cho các bản dựng bị làm rối, nhưng xin lưu ý rằng dấu vết ngăn xếp kết quả sẽ xuất hiện dưới dạng bị làm rối 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
    }
  }
}
}