Google AdMob SDKを組み込んだUnityプロジェクトをAndroid向けにビルドした際に、超ハマったので備忘録として記録に残しておきます。実際の対応方法は環境やバージョンによって異なるかもしれません。予めご了承ください。
# 実証時の環境
執筆日:2023年11月4日 OS:Windows 10 Unityバージョン:2021.3.30f1 AdMob SDKバージョン:8.5.1
# 問題となった現象
ビルドされたアプリケーションが、実機、エミュレーター上ともに正常に動作しない。具体的には、下記のコードのような初期化メソッドすら実行されず中断されてしまった。
AdMob SDK以外の機能には全く問題なく、またC#のコードには特に問題になるような変更は加えてはいなかった。
# 原因はビルド設定のminifyだった
結論から言うと、原因はUnity Editorのメニューの[File]-[Build Settings]-[Player Settings]を開いて、更にその中の一番したにあるPublishing Settingsの下の方にあるMinify設定項目だった。
リリース用ビルドなのだからと、releaseにもチェックを入れたのがマズかったようです。画像のようにリリースからチェックを外し、R8だけにチェックを入れてビルドしたら正常に動作しました。
# 何故releaseにチェック入れてはいけないのかAIに聞いてみた
以下はGoogle Bardに聞いた回答です。Google AdMobに関する質問なのでChat-GPTではなくBardに聞いてみました。以下はAIからの回答をそのままコピペしたものです。
Unity Editorのplayer settingsのなかにあるpublisher settingsのminify設定で、use R8,release,debugのそれぞれの項目の機能と用途は、以下のとおりです。 **use R8** デフォルトの設定です。Android向けのリリースビルドで、コードを最小化してサイズを小さくします。 コードの難読化も行われるため、ゲームの改造を防ぐことができます。 ただし、難読化によってデバッグが難しくなる場合があります。 **release** コードを最小化してサイズを小さくしますが、難読化は行われません。 デバッグが容易なため、リリースビルドの前や、デバッグに時間をかける必要がある場合に使用します。 **debug** コードを最小化せず、デバッグ情報を残します。 デバッグが最も容易なため、開発やテストに使用します。
# それぞれの項目の用途
**リリースビルド** ゲームを一般公開する際に使用します。コードの難読化によってゲームの改造を防ぐことで、著作権を保護することができます。 **デバッグビルド** ゲームの開発やテストに使用します。デバッグ情報を残すことで、エラーの原因を特定しやすくなります。 **まとめ** ゲームの公開目的に合わせて、適切な設定を選択してください。 **補足** R8は、Android向けのコード最適化ツールです。 難読化は、コードを複雑にして読みにくくする処理です。 デバッグ情報は、エラーの原因を特定するために役立つ情報です。
# 原因を直接聞いてみた結果
具体的に直接AIに聞いてみた。
質問は R8とreleaseの二つにチェックを入れてビルドするとadmob SDKの機能が起動しなくなります。原因はわかりますか? です。以下がAIからの回答です。
R8は、Android向けのコード最適化ツールです。R8を有効にすると、コードが最小化され、難読化されます。これは、コードのサイズを小さくしてパフォーマンスを向上させる効果がありますが、同時に、コードの可読性やデバッグ性を低下させる可能性があります。 AdMob SDKは、Android向けの広告配信プラットフォームです。AdMob SDKは、コードの難読化によって影響を受けやすいため、R8とreleaseの両方を有効にすると、AdMob SDKの機能が起動しなくなる可能性があります。 具体的には、AdMob SDKが使用する以下のコードが、R8によって削除または難読化される可能性があります。 AdMob SDKの初期化コード AdMob SDKの広告表示コード これらのコードが削除または難読化されると、AdMob SDKが正常に機能しなくなり、広告が表示されないなどの問題が発生します。 この問題を解決するには、R8を有効にしたままで、releaseを無効にします。これにより、コードの難読化が行われなくなるため、AdMob SDKの機能が正常に動作するようになります。 具体的には、Unity Editorのplayer settingsのなかにあるpublisher settingsのminify設定で、releaseのチェックを外します。 また、AdMob SDKの最新バージョンを使用することも有効です。AdMob SDKの最新バージョンでは、R8による最適化の影響を軽減するための対策が取られています。 なお、AdMob SDKの機能が起動しない場合、以下の点も確認してください。 AdMob SDKの設定が正しく行われているか デバイスのAndroid OSがAdMob SDKの対応OSであるか AdMob SDKの広告枠が有効になっているか これらの点を確認しても問題が解決しない場合は、AdMobのサポートにお問い合わせください。
一行にまとめると、Use R8だけチェックして他は外せです。
# その他の注意点
ビルド設定やプログラムに問題が無いのに公告が表示されない時の1つの要因としてAndroid Resolverの可能性もあります。一見、リゾルブが終わっているように見えても実は失敗しているかもしれないので、Force Resolveを試してみるといいかもしれません。
今後、広告の実装で躓いたらこの記事を思い出して参考にしたいと思います。