こんにちわ、オオバです。

UnityでAndroid向けにIL2CPPビルドした際に
以下のようなエラーが出た場合の対処法の紹介です。

Exception: /Applications/Unity/Hub/Editor/2018.3.7f1/Unity.app  
/Contents/il2cpp/build/il2cppcore/il2cppcore.dll did not run properly!  

エラー分の中で注目すべきはこちら
il2cppcore.dll did not run properly!です。

調査すると2パターンの原因があるようです。

  1. パスに日本語が含まれている
  2. 参照エラー

またエラーの本質はログの前後に出力されていることもあるため、
コンソールをしっかり読み込むことは
バグを早く取り除くことにおいて重要です。

上記のエラーと同タイミングで別のエラー内容が出ていると思うので、答えはそちらから探します。

目次

日本語名パスが含まれる

Unityプロジェクトまでのパスに
日本語が混じっているとビルドは失敗します。

あまり想定されないケースですが、
UnityプロジェクトのAssets配下に
日本語名のPrefabが入っていても問題はありません

参照エラー

オオバの場合はコチラが原因でした。

エラーログ内に以下のような記述がある場合、
参照エラーが起きています。

error: undefined reference to 'Hoge_'  

この場合、Hoge_メソッドが存在しないということなので、
エディタの全文検索でHoge_を探します。

シンボル定義ミスによるエラー

iOS向けプラグインなのに#if UNITY_IOS
くくっていなかったのが原因でした。

【誤】Androidでビルドエラー
[DllImport("__Internal")]  
private static extern string Hoge_();  

【正】ビルド成功
#if UNITY_IOS
    // iOSだけの処理をUNITY_IOSで囲うことで、  
    // Androidビルドから除外する  
    [DllImport("__Internal")]  
    private static extern string Hoge_();  
#endif

マルチプラットフォーム開発のシンボルは慎重に

複数プラットフォーム同時開発において
シンボル定義はトラブルの1つです。

理想はシンボル定義が無いことです。
しかし各プラットフォーム固有の処理は
どうしても発生します。

そんな時に気にしておきたいことは、
他の開発者の環境も考慮しておくことです。

チームメンバーの大半がMacユーザーでも
一部のメンバーがWindowsということもあります。

それぞれで動作するように、
シンボルは慎重に定義すべきでしょう。

オススメ記事
2021秋 Asset Refreshセール
100以上のアセットがなんと50%OFF!!オオバもいくつか買いました!
期間 : 10月2日午後3時59分まで
検証環境
参考サイト