Version: 2020.3
言語: 日本語
開発の迅速なイテレーションのためのアプリケーションのパッチ処理
Android 向けシングルパスステレオレンダリング機能

Android のシンボル

アプリケーションのデバッグを支援するために、Unity のネイティブライブラリのシンボルファイルを含むパッケージを生成することができます。シンボルファイルには、アクティブなメモリアドレスをメソッド名などの使用可能な情報に変換するテーブルが含まれています。この変換プロセスをシンボル化と呼びます。シンボルパッケージを Google Play Console にアップロードすると、Android Vitals ダッシュボードで人間が読めるスタックトレースを表示できます。

シンボルファイルには 2 種類あります。

  • パブリック: シンボルテーブルを含む小さなファイルです。詳細は、パブリックシンボル を参照してください。
  • デバッグ: パブリックシンボルファイルに含まれるすべての情報と、より詳細なデバッグに使用できる完全なデバッグ情報が含まれています。詳しくは、デバッグシンボル を参照してください。

以下のライブラリのシンボルファイルを生成することができます。

  • libmain: 最初の Unity エンジンのロードロジック関連。
  • libunity: Unity のエンジンコード。
  • libil2cpp: C++ コードに変換したプロジェクトからの C# スクリプトを含みます。

Unity は、libmainlibunity のシンボルファイルを生成します。Gradle は、libil2cpp のシンボルファイルを生成します。

パブリックシンボル

パブリックシンボルファイルには、関数のアドレスを人間が読める文字列に解決する情報が含まれています。Unity は --strip-debug パラメーターを使用して、詳細なデバッグ情報を削除したパブリックシンボルを作成します。これにより、パブリックシンボルファイルとパッケージは、デバッグシンボル ファイルとパッケージよりも小さくなります。

パブリックシンボルファイルは、.sym.so というファイル拡張子を使用します。

デバッグシンボル

デバッグシンボルファイルには、完全なデバッグ情報とシンボルテーブルが含まれています。それを使って以下を行えます。

  • スタックトレースを解決し、ソースコードが利用可能なアプリケーションをデバッグすることができます。
  • アプリケーションにネイティブデバッガーを取り付け、コードをデバッグします。

Unity は、--only-keep-debug パラメーターを使用して、デバッグシンボルを作成します。詳細については、Linux ユーザーマニュアルの–only-keep-debug を参照してください。

デバッグシンボルファイルは、.dbg.so というファイル拡張子を使用します。

ノート: デバッグシンボルが利用できない場合、Unity はビルド時に パブリックシンボル ファイルをプロジェクトに配置します。libmainlibunity のライブラリではデバッグシンボルは利用できないため、Unity は常にパブリックシンボルファイルを生成します。

シンボルパッケージの生成

アプリケーションのシンボルパッケージ生成を有効にするには、以下を行います。

  1. Build Settings ウィンドウを開きます (File > Build Settings)。
  2. Player Settings をクリックし、Player 設定ウィンドウを開きます。
  3. Android 設定タブを選択し、Other Settings > Configuration を選択します。
  4. Scripting BackendIL2CPP に設定します。
  5. Player 設定ウィンドウを終了し、Build 設定ウィンドウに戻ります。
  6. Platform リストから Android プラットフォームを選択します。
  7. Create symbols.zip を有効にします。

シンボルパッケージの生成を有効にした後、プロジェクトをビルドし、libmainlibunitylibil2cpp ライブラリ用のシンボルファイルを含む .zip ファイルを生成します。Unity は、libil2cpp ライブラリのパブリックシンボルとデバッグシンボルの両方を生成し、libmainlibunity ライブラリのパブリックシンボルを生成します。Unity は、このシンボルパッケージを出力ディレクトリ内に置きます。

Android Build 設定で Export Project を有効にすると、ビルドプロセスを実行する際にUnity はプロジェクトのビルドやシンボルの生成を行いません。代わりに、Android Studio 用にプロジェクトをエクスポートし、出力ディレクトリの unityLibrary/symbols に空のディレクトリを作成します。エクスポートされたプロジェクトを Android Studio からビルドすると、Gradle は libil2cpp シンボルファイルを生成して、unityLibrary/symbols/<architecture>/ ディレクトリに配置します。libmainlibunity のシンボルファイルを取得してシンボルパッケージを完成させるには、手動でそれらを見つけて unityLibrary/symbols/<architecture>/ ディレクトリにコピーする必要があります。これらのファイルの場所は、 Strip Engine Code Player 設定を有効にしているかどうかによって異なります。

  • Strip Engine Code が有効になっている場合
  • libunity: <project-path>/Temp/StagingArea/symbols/<architecture>/ ノート: Unity は、エディターを終了すると、Temp ディレクトリを削除します。つまり、プロジェクトをエクスポートした後、エディターを終了する前にシンボルファイルをコピー/移動する必要があります。
  • libmain: <editor>/PlaybackEngines/AndroidPlayer/Variations/<scripting backend>/<build type>/Symbols/<architecture>/
  • Strip Engine Code が無効になっている場合
  • libunity and libmain: <editor>/PlaybackEngines/AndroidPlayer/Variations/<scripting backend>/<build type>/Symbols/<architecture>/

パブリックまたはデバッグシンボルファイルを使用する前に、ファイル拡張子の一部を削除する必要があります。パブリックシンボルファイルの場合、これは .sym です。デバッグシンボルファイルの場合、.dbg です。


Google Play コンソールでのシンボルの使用

アプリケーションを Google Play にアップロードした後、パブリックシンボル パッケージをアップロードできます。この方法については、Google のドキュメント Deobfuscate or symbolicate crash stack traces を参照してください。

ノート: Google Play では、シンボルパッケージをアップロードする前にアプリケーションが受けたクラッシュはシンボル化されません。

開発の迅速なイテレーションのためのアプリケーションのパッチ処理
Android 向けシングルパスステレオレンダリング機能