LoginSignup
3
0

More than 3 years have passed since last update.

UnityでAndroidのプラグインのクラスが見つからなくて(ClassNotFoundException)何故か使えないときに怪しむべきProGuard、Minify

Posted at

Androidのプラグイン何故か使えない

俺は完璧に設定しているのにビルドして実行するとClassNotFoundExceptionでAndroidプラグインが使えないことがあって時間を費やしたのですが、いろいろ調べた結果ProGuardのMinifyという処理が原因でした。ClassNotFoundExceptionの原因調べててProGuardまでたどり着かなくね?という懸念があったので共有します。
自分がたどり着いたのはこれにProGuradの記述があったからです。。。

リリースビルドはMinifyが有効になっている

デフォルトの状態でリリースビルドするとProGuardによるMinify処理が行われるようになっているみたいです。
チェックが入っていてMinifyを切るとプラグインの機能が使えるようになりました。
スクリーンショット 2020-10-28 16.45.17.png

ProGuardって何?

ProGuardはアプリのアプリの圧縮、難読化、最適化の機能みたいですね。
アプリの圧縮、難読化、最適化
この処理によってプラグインで使っている機能まで取り去られるみたいなことが起きているみたいです。

ProGuardの設定

ProGuardの設定ファイルを作成することで勝手に処理されない部分を指定できるようになっているようです。Minifyを切ってしまうとこの機能の恩恵が受けられなくなるのでこの方法で対処するのがベターなのではないでしょうか。

スクリーンショット 2020-10-28 16.46.14.png

この Custom Proguard File というチェックをつけるとproguard-user.txtが作成されるのでそれを編集することで設定できます。

proguard-user.txt
-keep class android.support.v4.content.** {
    *;
}

例えばandroid.support.v4.contentでClassNotFoundExceptionが出ていた場合はこんなふうに指定する感じです。この状態でビルドするとMinify対象外になる感じですかね。別の書き方もあるようですので、リンクを参考してください。

まとめ

  • 何故かClassNotFoundExceptionが出たときはMinifyを疑ってみよう。
  • ProGuardの設定で対処しよう。
  • これわかりづらいから何とかならんのか。。。

参考

Unity に Admob 実装した時、Proguard や Minify を無効にせずに Releaseビルドする方法
Unity Android ビルドの Minify オプションの罠

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0