Das Crashlytics Gradle-Plug-in kann automatisch erkennen, wenn Sie Ihren Code verschleiert haben. Wenn bei Ihrem Build eine Zuordnungsdatei generiert wird, lädt das Plug-in diese hoch, damit die Crashlytics-Server die Stack-Traces Ihrer App mithilfe der Datei als nicht verschleierter und visuell lesbarer Code rendern können.
Erforderliche Konfiguration bei Verwendung von R8, ProGuard und DexGuard
Crashlytics kann mit jeder ProGuard-kompatiblen Zuordnungsdatei deobfuskiert werden und wurde zusätzlich mit ProGuard, R8 und DexGuard getestet.
Wenn Ihre App R8 mit aktivierter Verschleierung und Android Gradle 4.2.0 oder höher verwendet, erstellt Crashlytics lesbare Absturzberichte. Crashlytics hat vor Kurzem die Unterstützung für Apps verbessert, die sowohl Kotlin als auch R8 verwenden. Dies kann zu unerwarteten Problembeschreibungen führen.
Wenn Ihre App die ProGuard-Konfigurationsdatei verwendet, müssen Sie die Informationen beibehalten, die Crashlytics zum Erstellen lesbarer Absturzberichte benötigt. Fügen Sie dazu der ProGuard- oder DexGuard-Konfigurationsdatei die folgenden Zeilen hinzu:
-keepattributes SourceFile,LineNumberTable # Keep file names and line numbers. -keep public class * extends java.lang.Exception # Optional: Keep custom exceptions.
Wenn Sie Fragen zu DexGuard haben oder Probleme damit auftreten, wenden Sie sich bitte direkt an das Guardsquare-Supportteam. Wenn Sie Hilfe mit ProGuard benötigen, besuchen Sie die Guardsquare-Communityforen, um Unterstützung von einem Experten zu erhalten.
Verschleierte Build-Varianten beibehalten
Wenn Sie verhindern möchten, dass das Crashlytics-Gradle-Plug-in die Zuordnungsdatei für Varianten mit Obfuscation hochlädt, legen Sie in der Gradle-Datei des Moduls (auf App-Ebene) (normalerweise <project>/<app-module>/build.gradle.kts
oder <project>/<app-module>/build.gradle
) die Gradle-Erweiterungseigenschaft firebaseCrashlytics.mappingFileUploadEnabled
auf false
fest. Dadurch können sich die Build-Zeiten für verschleierte Builds verkürzen. Die resultierenden Stack-Traces werden jedoch auf der Seite Crashlytics der Firebase-Konsole verschleiert angezeigt.
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 } } } }