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