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