Unity に Admob 実装した時、Proguard や Minify を無効にせずに Releaseビルドする方法

広告出したい!Proguard で難読化したい!Minify でサイズ小さくしたい!そんなわがままを通す方法。

何があったのか

Unity で Release ビルドした apk を実機でデバッグすると、広告が出ない場面に遭遇。
Android Studio 開いて logcat 眺めていると、、

Release ビルドで Admob 関連のクラスが見つからない

E/Unity: AndroidJavaException: java.lang.ClassNotFoundException: com.google.android.gms.ads.MobileAds
java.lang.ClassNotFoundException: com.google.android.gms.ads.MobileAds
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:453)
at java.lang.Class.forName(Class.java:378)
at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
at com.unity3d.player.UnityPlayer.c(Unknown Source:0)
at com.unity3d.player.UnityPlayer$e$2.queueIdle(Unknown Source:72)
at android.os.MessageQueue.next(MessageQueue.java:394)
at android.os.Looper.loop(Looper.java:148)
at com.unity3d.player.UnityPlayer$e.run(Unknown Source:32)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.MobileAds" on path: DexPathList[[zip file "/data/app/com.hirohomme.xxxxx-xxxxx==/application.apk"],nativeLibraryDirectories=[/data/app/com.hirohomme.xxxxx-xxxxx==/lib/arm, /data/app/com.hirohomme.xxxxx-xxxxx==/application.apk!/l

と、

E/Unity: AndroidJavaException: java.lang.ClassNotFoundException: com.google.unity.ads.UnityAdListener
java.lang.ClassNotFoundException: com.google.unity.ads.UnityAdListener
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:453)
at java.lang.Class.forName(Class.java:378)
at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
at com.unity3d.player.UnityPlayer.c(Unknown Source:0)
at com.unity3d.player.UnityPlayer$e$2.queueIdle(Unknown Source:72)
at android.os.MessageQueue.next(MessageQueue.java:394)
at android.os.Looper.loop(Looper.java:148)
at com.unity3d.player.UnityPlayer$e.run(Unknown Source:32)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.unity.ads.UnityAdListener" on path: DexPathList[[zip file "/data/app/com.hirohomme.
xxxxx-xxxxx==/application.apk"],nativeLibraryDirectories=[/data/app/com.hirohomme.
xxxxx-xxxxx==/lib/arm, /data/app/com.hirohomme.xxxxx-
xxxxx==/application.apk!/l

リリースビルドで動かない。。クラスが見つからない。。難読化か!?(ピコーン)

解決策

1.Proguard の除外設定

Asset/Plugins/Android/proguard-user.txt 配置して Admob 広告関連メンバの除外設定。

-keep public class com.google.android.gms.ads.** {
   public *;
}
-keep public class com.google.ads.** {
   public *;
}
-keep class com.google.unity.** {
   public *;
}

2.Unity から Proguard ルールの参照

あとがき

ネット上には「Proguard無効にするといいよ!Minify無効にするといいよ!」とか記事有ったりするけど、自分で何をしようとしているのかちゃんと理解して選択しないとですね。

以上!

コメント

タイトルとURLをコピーしました