Edited at

Unity2018.2でAndroid(NDK)対応したメモ


環境設定


  • 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については、バッチ組んだ方がよいが



  • 文字列バッファの話とか




IL2CPP と Reflection のハマりどころ


  • Strip対策で、Preserved属性をつける

  • 上記をつけても例外でMethod Not Found が Reflection で返ってくることがあるが、メソッド内で別のエラーが起きたときに、リフレクション側で、誤って(?)その例外が出てしまうという現象っぽい。なので、これ以外に出てるエラーがないか、合わせてチェックする必\
    要がありそう。


NativePluginにC#からコールバックを渡す時の罠


特定の端末でのみ、共有ライブラリにしたDLLが読めない問題


  • よくいわれてる、ネーミングルールや、配置規則に従っても、DllNotFoundExceptionを吐く端末が存在する。(Xepriaの某機種とか)


    • C++を直接配置して、IL2CPPで吐き出すコードに直接マージさせて、__internal属性で呼び出すしかなさそう。




対象端末


  • snapdragon435で動くようにチューニング(だいたい30fps維持、最低ラインで奨励とはしない)


    • snapdragon660/710も検討(奨励ラインの端末)