刀科の技術学習ブログ

アプリサイドから、web系フロント・バックとAWSによるインフラ領域へ学習を進めていきます。

【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コンテンツを作ってる人は、あんまり多くないと思います。同じような事をやろうとして、この壁にぶち当たった人の助けになれば幸いです。