環境設定
- SDKは24=7.0(Minimam API Levelは21=Android5.0)
- NDKは13b(AndroidStudio経由ではなく直接アーカイブから拾う必要あり)
- Javaはjdk1.8.0_131.jdk
- 例によってJavaはサイト構成が腐ってて目的にページにたどり着くのが困難です。UnityのJDK設定のBrowsの自動検出でないよ=>ダイアログからリンク飛ばしてもらうのが一番確実。
Libraryが不可視フォルダーなので、GUIで設定したかったら、
https://helpx.adobe.com/jp/x-productkb/global/cpsid_91195.html
とか参考に、不可視属性を解除しておく必要あり。
なお、Mojaveだとこの方法が塞がれており、別の方法を取る必要がある。
一番てっ取り早いのはこれ。
https://appletoolbox.com/2018/02/how-to-show-your-user-library-in-macos-high-sierra-and-sierra/
Appleは何させたいんだよ、、本当にくそくそくそ!!!!
ビルド時間
- Monoよりやや長くなる。2回目以降/MacMiniで3分程度
ネイティブプラグインについて
- 2018.2以降はC++を直接投げ込んで良い。
- サンプルが公式から配布されてるので、それをみつつ、やれば迷うことはない。
- 個人的にDLLをリポジトリに増やしたくないので、プロジェクト上は生のC/C++を入れておいて、NDKでビルドさせる
- デバッグは、別フォルダで該当ソースをもってきて、テスト実行することにしよう。
- あと、NDKのバージョン違いとかで、実行時にエラー(エラーメッセージが的外れでこれが原因と気付きにくい)も起きるの嫌だから...
- サンプルでもってくるpackageのdllも、この理由で環境によっては実行時エラーになるため、リビルド必須
- この方法だと、IL2CPPで勝手にビルド対象に入るが、外部依存のライブラリとかが絡むとめんどくさい
- Permissionについては、バッチ組んだ方がよいが
- 一度ビルドすると、 Temp/StagingArea/AndroidManifest.xml が生成されるので、それを Plugins/Android/ にコピーして、必要なものを追加する。
- ドキュメントとしては、こちらを参照: https://docs.unity3d.com/ja/current/Manual/android-manifest.html
- 一度ビルドすると、 Temp/StagingArea/AndroidManifest.xml が生成されるので、それを Plugins/Android/ にコピーして、必要なものを追加する。
- 文字列バッファの話とか
IL2CPP と Reflection のハマりどころ
- Strip対策で、Preserved属性をつける
- 上記をつけても例外でMethod Not Found が Reflection で返ってくることがあるが、メソッド内で別のエラーが起きたときに、リフレクション側で、誤って(?)その例外が出てしまうという現象っぽい。なので、これ以外に出てるエラーがないか、合わせてチェックする必\ 要がありそう。
NativePluginにC#からコールバックを渡す時の罠
- メソッドはStaticに、かつ、MonoPInvokeCallback属性をつける。
特定の端末でのみ、共有ライブラリにしたDLLが読めない問題
- よくいわれてる、ネーミングルールや、配置規則に従っても、DllNotFoundExceptionを吐く端末が存在する。(Xepriaの某機種とか)
- C++を直接配置して、IL2CPPで吐き出すコードに直接マージさせて、__internal属性で呼び出すしかなさそう。
対象端末
- snapdragon435で動くようにチューニング(だいたい30fps維持、最低ラインで奨励とはしない)
- snapdragon660/710も検討(奨励ラインの端末)