リリースビルドにネイティブ シンボルを含める

デフォルトでは、アプリのリリースビルドでネイティブ コード ライブラリが削除されます。この削除は、アプリで使用されるネイティブ ライブラリに含まれるシンボル テーブルとデバッグ情報を削除するものです。ネイティブ コード ライブラリを削除すると、サイズが大幅に削減されますが、情報(クラス名や関数名など)が欠落するため、Google Play Console でクラッシュを診断することはできません。クラッシュをデバッグするには、Google Play Console でアプリにデバッグ シンボル ファイルを含める必要があります。

シンボル ファイルをアップロードする

Google Play Console の Android Vitals で、ネイティブ コードでのクラッシュが報告されます。簡単な手順で、アプリのネイティブ デバッグ シンボル ファイルを生成してアップロードできます。このファイルがあると、ネイティブ コードでのクラッシュのスタック トレースに対して Android Vitals でシンボリケーション(クラス名や関数名を含む)が可能になり、本番環境でアプリをデバッグできます。この手順は、プロジェクトで使用される Android Gradle プラグインのバージョンと、Android App Bundle(推奨)と APK のどちらを使用するかによって異なります。

Android Gradle プラグイン バージョン 4.1 以降

プロジェクトで Android App Bundle(AAB)をビルドする場合は、ネイティブ デバッグ シンボル ファイルを AAB に自動的に含めるようにビルドを構成し、アプリを公開するときに Play Console にアップロードされるようにすることができます。このファイルをリリースビルドに含めるには、アプリの build.gradle.kts ファイルに以下を追加します。

android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }

以下から、デバッグ シンボルのレベルを選択します。

  • SYMBOL_TABLE を使用して、Google Play Console のシンボリケーション スタック トレース内の関数名を取得します。このレベルは Tombstone に対応しています。
  • FULL を使用して Play Console のシンボリケーション スタック トレース内の関数名、ファイル、行番号を取得します。

プロジェクトで APK をビルドする場合は、前述の android.buildTypes.release.ndk.debugSymbolLevel 設定を使用して、ネイティブ デバッグ シンボル ファイルを別個に生成します。Google Play Console にネイティブ デバッグ シンボル ファイルを手動でアップロードします(このプロセスは、スタック トレースの難読化を解除するためにマッピング ファイルをアップロードする場合と同様です)。ビルドプロセスの一環として、Android Gradle プラグインはこのファイルを次のプロジェクトの場所に出力します。

app/build/outputs/native-debug-symbols/<var>variant-name</var>/native-debug-symbols.zip

Android Gradle プラグイン バージョン 4.0 以前(とその他のビルドシステム)

Android Gradle プラグインはビルドプロセスの一環として、ストリップしていないライブラリのコピーをプロジェクト ディレクトリに保持します。このディレクトリ構造は次のようになります。

app/build/intermediates/cmake/universal/release/obj/
├── armeabi-v7a/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
├── arm64-v8a/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
├── x86/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
└── x86_64/
    ├── libgameengine.so
    ├── libothercode.so
    └── libvideocodec.so
  1. 次のようにこのディレクトリの内容を圧縮します。

    cd app/build/intermediates/cmake/universal/release/obj
    zip -r symbols.zip .
    
  2. Google Play Console に手動で symbols.zip ファイルをアップロードします。