Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

AndroidNDKクラッシュレポートを取得する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Android アプリにネイティブ ライブラリが含まれている場合、アプリのビルド構成を少し更新するだけで、Firebase Crashlytics からネイティブ コードの完全なスタック トレースと詳細なクラッシュ レポートを有効にできます。

このガイドでは、Firebase Crashlytics SDK for NDK を使用してクラッシュ レポートを構成する方法について説明します。

Unity プロジェクトで Crashlytics の使用を開始する方法を探している場合は、 Unity 入門ガイド を確認してください。

あなたが始める前に

  1. まだ行っていない場合は、 Firebase を Android プロジェクトに追加します。 Android アプリをお持ちでない場合は、サンプル アプリをダウンロードできます。

  2. 推奨: クラッシュ フリー ユーザー、ブレッドクラム ログ、ベロシティ アラートなどの機能を取得するには、Firebase プロジェクトで Google アナリティクスを有効にする必要があります。

    • 既存の Firebase プロジェクトで Google アナリティクスが有効になっていない場合は、Firebase コンソールの [ ] > [プロジェクト設定] の[統合] タブから Google アナリティクスを有効にすることができます。

    • 新しい Firebase プロジェクトを作成する場合は、プロジェクト作成ワークフローで Google アナリティクスを有効にします。

ステップ 1 : Crashlytics SDK for NDK をアプリに追加する

モジュール (アプリ レベル) の Gradle ファイル(通常は<project>/<app-module>/build.gradle ) で、Crashlytics NDK Android ライブラリの依存関係を追加します。ライブラリのバージョン管理には、 Firebase Android BoMを使用することをお勧めします。

Crashlytics で最適なエクスペリエンスを得るには、Firebase プロジェクトでGoogle アナリティクスを有効にし、Google アナリティクス用の Firebase SDK をアプリに追加することをお勧めします。

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:31.1.0')

    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics-ndk'
    implementation 'com.google.firebase:firebase-analytics'
}

Firebase Android BoMを使用すると、アプリは常に互換性のあるバージョンの Firebase Android ライブラリを使用します。

(代替) BoM を使用せずに Firebase ライブラリの依存関係を追加する

Firebase BoM を使用しないことを選択した場合は、依存関係の行で各 Firebase ライブラリ バージョンを指定する必要があります。

アプリで複数のFirebase ライブラリを使用する場合は、BoM を使用してライブラリ バージョンを管理することを強くお勧めします。これにより、すべてのバージョンに互換性が確保されます。

dependencies {
    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics-ndk:18.3.2'
    implementation 'com.google.firebase:firebase-analytics:21.2.0'
}

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:31.1.0')

    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics-ndk'
    implementation 'com.google.firebase:firebase-analytics-ktx'
}

Firebase Android BoMを使用すると、アプリは常に互換性のあるバージョンの Firebase Android ライブラリを使用します。

(代替) BoM を使用せずに Firebase ライブラリの依存関係を追加する

Firebase BoM を使用しないことを選択した場合は、依存関係の行で各 Firebase ライブラリ バージョンを指定する必要があります。

アプリで複数のFirebase ライブラリを使用する場合は、BoM を使用してライブラリ バージョンを管理することを強くお勧めします。これにより、すべてのバージョンに互換性が確保されます。

dependencies {
    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics-ndk:18.3.2'
    implementation 'com.google.firebase:firebase-analytics-ktx:21.2.0'
}

ステップ 2 : Crashlytics Gradle プラグインをアプリに追加する

  1. ルート レベル (プロジェクト レベル) のGradle ファイル ( <project>/build.gradle ) で、ビルドスクリプトの依存関係として Crashlytics Gradle プラグインを追加します。

    buildscript {
        repositories {
          // Make sure that you have the following two repositories
          google()  // Google's Maven repository
          mavenCentral()  // Maven Central repository
        }
    
        dependencies {
            ...
            classpath 'com.android.tools.build:gradle:7.2.0'
    
            // Make sure that you have the Google services Gradle plugin dependency
            classpath 'com.google.gms:google-services:4.3.14'
    
            // Add the dependency for the Crashlytics Gradle plugin
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2'
        }
    }
  2. モジュール (アプリ レベル) のGradle ファイル (通常は<project>/<app-module>/build.gradle ) に、Crashlytics Gradle プラグインを追加します。

    plugins {
        id 'com.android.application'
    
        // Make sure that you have the Google services Gradle plugin
        id 'com.google.gms.google-services'
    
        // Add the Crashlytics Gradle plugin
        id 'com.google.firebase.crashlytics'
        ...
    }

ステップ 3 : firebaseCrashlytics拡張機能をビルドに追加する

モジュール (アプリ レベル) の Gradle ファイル(通常はapp/build.gradle ) で、 firebaseCrashlytics拡張機能を追加します。

Java

// ...

android {
  // ...
  buildTypes {
      release {
          // Add this extension
          firebaseCrashlytics {
              // Enable processing and uploading of native symbols to Firebase servers.
              // By default, this is disabled to improve build speeds.
              // This flag must be enabled to see properly-symbolicated native
              // stack traces in the Crashlytics dashboard.
              nativeSymbolUploadEnabled true
          }
      }
  }
}

Kotlin+KTX

// ...

android {
  // ...
  buildTypes {
      release {
          // Add this extension
          firebaseCrashlytics {
              // Enable processing and uploading of native symbols to Firebase servers.
              // By default, this is disabled to improve build speeds.
              // This flag must be enabled to see properly-symbolicated native
              // stack traces in the Crashlytics dashboard.
              nativeSymbolUploadEnabled true
          }
      }
  }
}

ステップ 4 : ネイティブ シンボルの自動アップロードを設定する

NDK クラッシュから読み取り可能なスタック トレースを生成するには、Crashlytics がネイティブ バイナリのシンボルを認識する必要があります。 Crashlytics Gradle プラグインには、このプロセスを自動化するためのuploadCrashlyticsSymbolFile BUILD_VARIANTタスクが含まれています。

  1. 自動シンボル アップロードのタスクにアクセスできるように、モジュール (アプリ レベル) の Gradle ファイルでnativeSymbolUploadEnabledtrueに設定されていることを確認してください。

  2. メソッド名がスタック トレースに表示されるようにするには、NDK ライブラリをビルドするたびに、 uploadCrashlyticsSymbolFile BUILD_VARIANTタスクを明示的に呼び出す必要があります。例えば:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. Crashlytics SDK for NDK と Crashlytics Gradle プラグインはどちらも、ネイティブ共有オブジェクト内の GNU ビルド ID の存在に依存しています。

    各バイナリでreadelf -nを実行すると、この ID の存在を確認できます。ビルド ID がない場合は、ビルド システムのフラグに-Wl,--build-idを追加して問題を修正します。

ステップ 5 : テスト クラッシュを強制してセットアップを終了する

Crashlytics の設定を完了し、Firebase コンソールの Crashlytics ダッシュボードで初期データを確認するには、テスト クラッシュを強制する必要があります。

  1. テスト クラッシュを強制するために使用できるコードをアプリに追加します。

    アプリのMainActivityで次のコードを使用して、押すとクラッシュするボタンをアプリに追加できます。ボタンには「Test Crash」というラベルが付いています。

    Java

    Button crashButton = new Button(this);
    crashButton.setText("Test Crash");
    crashButton.setOnClickListener(new View.OnClickListener() {
       public void onClick(View view) {
           throw new RuntimeException("Test Crash"); // Force a crash
       }
    });
    
    addContentView(crashButton, new ViewGroup.LayoutParams(
           ViewGroup.LayoutParams.MATCH_PARENT,
           ViewGroup.LayoutParams.WRAP_CONTENT));
    

    Kotlin+KTX

    val crashButton = Button(this)
    crashButton.text = "Test Crash"
    crashButton.setOnClickListener {
       throw RuntimeException("Test Crash") // Force a crash
    }
    
    addContentView(crashButton, ViewGroup.LayoutParams(
           ViewGroup.LayoutParams.MATCH_PARENT,
           ViewGroup.LayoutParams.WRAP_CONTENT))
    
  2. アプリをビルドして実行します。

  3. アプリの最初のクラッシュ レポートを送信するために、テスト クラッシュを強制します。

    1. テスト デバイスまたはエミュレーターからアプリを開きます。

    2. アプリで、上記のコードを使用して追加した [Test Crash] ボタンを押します。

    3. アプリがクラッシュしたら、アプリを再起動して、アプリがクラッシュ レポートを Firebase に送信できるようにします。

  4. Firebase コンソールのCrashlytics ダッシュボードに移動して、テストのクラッシュを確認します。

    コンソールを更新しても 5 分経ってもテスト クラッシュが表示されない場合は、デバッグ ログを有効にして、アプリがクラッシュ レポートを送信しているかどうかを確認してください。


以上です!現在、Crashlytics はアプリのクラッシュを監視しており、Crashlytics ダッシュボードでクラッシュ レポートと統計を表示して調査できます。



シンボルをアップロードするための代替オプション

上記のこのページのメイン ワークフローは、標準の Gradle ビルドに適用されます。ただし、一部のアプリは別の構成またはツールを使用します (たとえば、Gradle 以外のビルド プロセス)。このような状況では、シンボルを正常にアップロードするために次のオプションが役立つ場合があります。

オプション: ライブラリ モジュールと外部依存関係のシンボルをアップロードする

このオプションは、次の状況で役立ちます。

  • Gradle 内でカスタマイズされた NDK ビルド プロセスを使用する場合
  • ネイティブ ライブラリがライブラリ/機能モジュールに組み込まれている場合、またはサードパーティによって提供されている場合
  • シンボルの自動アップロード タスクが失敗する場合、またはダッシュボードにシンボル化されていないクラッシュが表示される場合

オプション: 非 Gradle ビルドまたはアクセスできないストリップされていないネイティブ ライブラリのシンボルをアップロードする

このオプションは、次の状況で役立ちます。

  • Gradle 以外のビルド プロセスを使用する場合

  • ストリップされていないネイティブ ライブラリが何らかの方法で提供され、Gradle ビルド中にアクセスできない場合



トラブルシューティング

Firebase コンソールと logcat で異なるスタック トレースが表示される場合は、トラブルシューティング ガイドを参照してください。

次のステップ

  • オプトイン レポート、ログ、キー、致命的でないエラーの追跡を追加して、クラッシュ レポートの設定をカスタマイズします

  • Google Play と統合して、Crashlytics ダッシュボードで直接 Google Play トラックによって Android アプリのクラッシュ レポートをフィルタリングできるようにします。これにより、ダッシュボードを特定のビルドに集中させることができます。