【Unity】【Android】AndroidプロジェクトにUnityコンテンツを追加して難読化したらハマった
普通のAndroidアプリのプロジェクトに、Unityのコンテンツを追加することが出来るわけですが、APKに難読化を行おうとすると、Unity側の実装内容によっては実行時にバグったりします。
エラー時に詳細なログが出ればまだマシですが、今回はNullReferenceExceptionで間接的なクラス情報しか出なくて、原因のコードを特定できずハマったのがこのお話。
難読化に起因する現象なので、一番簡単な解決策は、原因のクラスやらを特定し、ピンポイントで難読化除外すればいいです。
しかし、先にも書いたように間接的なクラス情報(しかもUnityC#側のクラス名)しか出力されずトホホな状態でした。
簡単に何があったのか挙げると、
- Unity側でアバターチャットを作った
- Androidプロジェクトとして出力し、AndroidStudioにて難読化ビルド
- アセットのPhotonVoiceによる発音・録音が機能しなくなった
- さらにAndroid側と連携するためのJNIも、ClassNotFoundExceptionで落ちる
- 難読化せずにビルドすると正常に動作する
こんな経緯。
で、ClassNotFoundの方はパッケージ名[bitter.jnibridge]まで出力されていたので、除外して解決。
音声の方はエラーログからは有益な情報が得られなかった。そこでAPKを解凍して中身のクラスをざっと確認し、オーディオ関連の何かをしているであろうパッケージ[org.fmod]があったので、こちらも除外したところ、無事に動作できました。
今回の件で、難読化から除外すべきパッケージやクラスを、どう突き止めるのかを学べました。APKを開けて中を見ればいい(笑)
Androidアプリの一部としてUnityコンテンツを作ってる人は、あんまり多くないと思います。同じような事をやろうとして、この壁にぶち当たった人の助けになれば幸いです。