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 Community のフォーラムを利用して、専門家のサポートを求めてください。
難読化されたビルド バリアントを保持する
難読化を使用するバリアントのマッピング ファイルを 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 } } } }