Crashlytics ダッシュボードで読み取り可能なクラッシュ レポートを取得する

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)で Gradle 拡張プロパティ firebaseCrashlytics.mappingFileUploadEnabledfalse に設定します。これにより、難読化されたビルドのビルド時間を高速化できますが、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
    }
  }
}
}