Android でクラッシュを報告する

Firebase Crash Reporting は、アプリで発生したエラーの詳細レポートを作成します。 エラーは類似したスタック トレースの問題にグループ化され、ユーザーに与える影響の大きさで優先順位付けされます。自動レポートを受信するだけでなく、カスタム イベントをログに記録して、問題発生に至った過程を把握できるようにすることもできます。

Crash Reporting を設定する

Android で Crash Reporting を設定するには、次の手順を実行します。

  1. まだ設定を行っていない場合は、Android プロジェクト用に Firebase を設定します。
  2. Firebase コンソールでアプリを Firebase プロジェクトに追加します。
  3. Crash Reporting の依存関係をプロジェクト レベルの build.gradle ファイルに追加します。
    compile 'com.google.firebase:firebase-crash:11.0.4'

最初のエラーを作成する

Firebase Crash Reporting では、致命的なエラー(または捕捉されなかった例外)のレポートが自動的に生成されます。また、例外を捕捉するけれども例外の発生も報告したいというケースについてもレポートが生成されるようにできます。そのようなエラーを報告するには、次の手順に沿って操作します。

  1. メイン アクティビティに静的 report メソッドの呼び出しを追加します。
    FirebaseCrash.report(new Exception("My first Android non-fatal error"));
  2. アプリを起動します。
  3. adb logcat または Android Studio のログで、Crash Reporting が有効になっていることを確認するメッセージを探します。
  4. Firebase コンソールの Crash Reporting のセクションをチェックし、エラーを確認します。エラーが表示されるまでに 1~2 分ほどかかることに注意してください。

カスタムログを作成する

Crash Reporting を使用して、エラーレポートやオプションで logcat にカスタム イベントを記録できます。イベントのログを記録するけれども logcat には出力しないという場合、次の例のように引数として文字列を渡すだけで処理できます。

FirebaseCrash.log("Activity created");

logcat 出力を作成する場合は、ログレベルとタグも指定する必要があります。

ProGuard ラベルを可読化する

ProGuard は、ProGuard で難読化した記号を元の名前にマッピングする mapping.txt ファイルを生成します。ProGuard を有効にしている場合、マッピング ファイルをアップロードすると、可読化されたスタック トレースを Crash Reporting インターフェースに表示できます。

次に示すように、テストを目的として ProGuard をデバッグ ビルドタイプで設定してから、./gradlew assembleDebug コマンドを使用してビルドできます。

debug {
   minifyEnabled true
   proguardFiles getDefaultProguardFile('proguard-android.txt'),
     'proguard-rules.pro'
}

Gradle を使用して ProGuard マッピング ファイルをアップロードする

可読化されたスタック トレースを Firebase コンソールで表示するには、Crash Reporting プラグインによって作成された Gradle タスクを使用して、ProGuard マッピング ファイルを Firebase にアップロードできます。

Crash Reporting プラグインを設定するには:

  1. Crash Reporting プラグインを含めるように、ルートレベルの build.gradle ファイルにルールを追加します。
        buildscript {
          repositories {
            jcenter()
            // ...
          }
    
          dependencies {
            // ...
            classpath 'com.google.firebase:firebase-plugins:1.1.1'
          }
        }
    
  2. アプリ プロジェクトの Gradle ファイル(通常は app/build.gradle)で、次の行を「ADD THIS」の下にを追加し、Crash Reporting プラグインを有効化します。
        apply plugin: 'com.android.application'
        // ADD THIS
        apply plugin: 'com.google.firebase.firebase-crash'
    
        android {
          // ...
        }
    
        dependencies {
          // ...
        }
    
  3. 次に、サービス アカウントと秘密鍵を作成します。

    アップロードを認証するためのサービス アカウント キーをダウンロードします。それには、Firebase コンソールからプロジェクトを選択し、[新しい秘密鍵の生成] をクリックします。

  4. $HOME/.gradle/gradle.properties へのファイルパスを指定した FirebaseServiceAccountFilePath というプロパティを追加するか、-P フラグを使用してコマンドラインで別のパスを指定します。後で FirebaseServiceAccountFilePath プロパティを更新して、さまざまなサービス アカウント ファイルでタスクを実行することができます。

    別の方法としては、-P フラグを使用してコマンドラインでマッピング ファイルのパスを指定し、次のようにプロパティを設定することもできます。

    ./gradlew -PFirebaseServiceAccountFilePath=/usr/ServiceAccount/MyApp-a287fsd34.json ...
  5. APK の作成とマッピング ファイルのアップロードを行う場合には、プロジェクト ディレクトリで gradlew コマンドを実行します。次に例を示します。

    ./gradlew :app:firebaseUploadReleaseProguardMapping

    アップロード タスクの正確な名前はビルド バリエーションの名前に応じて変わります(firebaseUpload<VariantName>ProguardMapping のパターンに従います)。可能性のあるアップロード タスク名の詳細なリストについては、次の gradlew コマンドを実行してください。

    ./gradlew :app:tasks

    また、firebaseUploadArchivedProguardMapping タスクを使用して ProGuard マッピング ファイルをアップロードするときに使用する Gradle プロパティを指定することもできます。次の例のように、このタスクを使用して FirebaseCrashMappingFilePathFirebaseCrashVersionCodeFirebaseCrashPackageName に Gradle プロパティを指定できます。

    FirebaseCrashMappingFilePath=path/to/mapping/file
    FirebaseCrashVersionCode=2
    FirebaseCrashPackageName=example.package.name
    
    この例では、プロジェクトのモジュール フォルダーにあるデフォルトの google-services.json(通常は app/)を使用します。google-services.json ファイルを使用しない場合には、FirebaseCrashApiKeyFirebaseCrashAppId の両方に Gradle プロパティを指定する必要があります。

マルチ APK をビルドするアプリの操作

プラグインは、マルチ APK サポートを活用するアプリケーションに対しても有効です。 ビルド バリエーションの各タスクについては、そのバリエーションのすべての APK のマッピング ファイルがアップロードされます。

たとえば、次の Gradle の例に示すように、fullRelease という名前のビルド バリエーション、app-full-armeabi-v7a-release.apkapp-full-armeabi-release.apk などのマルチ APK によってさまざまなアーキテクチャをサポートしているとします。

    productFlavors {
        full {
            applicationId "com.google.firebase.sample.testapp"
            versionName "1.0-full"
        }
    }

    splits {
        abi {
            enable true
            reset()
            include 'armeabi', 'armeabi-v7a'
            universalApk true
        }
    }

./gradlew :app:firebaseUploadReleaseProguardMapping タスクを実行すると、app-armeabi-v7a-release.apkapp-armeabi-release.apk の ProGuard マッピング ファイルがサーバーにアップロードされます。これらのアップロードに対して、次のような出力がコンソールに表示されます。

Successfully uploaded proguard mapping file for app fullArmeabiRelease with versionCode: 1!
Successfully uploaded proguard mapping file for app fullArmeabi-v7aRelease with versionCode: 2!

ProGuard マッピング ファイルを手動でアップロードする

別の方法として、Crash Reporting を参照して [マッピング ファイル] タブを選択することで、mapping.txt ファイルを Firebase コンソールに手動でアップロードすることもできます。

アップロードするファイルを次のようなアプリ固有のファイルパスで探します。

<project root>/<module name>/build/outputs/mapping/<build type>/<appname>-proguard-mapping.txt

次に例を示します。

app/build/outputs/mapping/debug/app-proguard-mapping.txt

既知の問題

Crash Reporting プラグイン バージョン 1.1.0 または 1.1.1 を使用しているときに以下のエラーが発生した場合は、アプリのルートレベルの build.gradle ファイルで、プラグイン バージョン 1.1.0-alpha1 を使用する必要があります。

Cannot create tasks to upload ProGuard Mapping File.java.lang.IllegalStateException: Resolving configuration 'androidTestAnnotationProcessor' directly is not allowed

次のステップ

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。