| 選取平台: | iOS+ Android Flutter Unity |
Crashlytics Gradle 外掛程式可自動偵測您是否對程式碼進行模糊處理。建構作業產生對應檔案時,外掛程式會上傳該檔案,讓 Crashlytics 伺服器使用該檔案,將應用程式的堆疊追蹤轉譯為未模糊處理且人類可讀的程式碼。
使用 R8、ProGuard 和 DexGuard 時的必要設定
Crashlytics 可使用任何與 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 外掛程式上傳使用模糊處理的變化版本對應檔案,請在模組 (應用程式層級) Gradle 檔案 (通常是 <project>/<app-module>/build.gradle.kts 或 <project>/<app-module>/build.gradle) 中,將 firebaseCrashlytics.mappingFileUploadEnabled Gradle 擴充功能屬性設為 false。這有助於加快模糊處理建構作業的建構時間,但請注意,產生的堆疊追蹤會在 Firebase 控制台的 Crashlytics 頁面中顯示為模糊處理。
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 } } } }