コミュニティに寄せられるUnity関係の質問で多いのが、AdmobとUnity SDKを一緒に利用する際の競合問題です。現時点での解決策として、こちらの記事で解説します。
【2020年度版】NCMB Unity SDK とAdmobの競合解決
【2020年度版】NCMB Unity SDK とAdmobの競合解決
競合する理由とその解決方法
UnityプラグインであるGoogle-Mobile-Ads-Unityとncmb_unityでは、バージョンが異なる幾つかのライブラリを指定しています。そのため、それぞれのプラグインがバージョンの異なるライブラリを使っているためにビルドエラーが発生している可能性が高いです。
たとえば、下記のバージョンを例として挙げます。
- Google Mobile Ads Unity Plugin v3.15.1
- ncmb_unity v4.0.0
この場合、それぞれのプラグインが下記ライブラリを利用し、バージョン差異が確認できます。 の場合、それぞれにて、下記のバージョンのライブラリを使用しています。
Google-Mobile-Ads-Unity-Plugin_v3.15.1 | ncmb_unity_v4.0.0 | |
---|---|---|
support-compat | com.android.support.support-compat-26.1.0.aar | support-compat-26.0.2.aar |
support-core-utils | com.android.support.support-core-utils-26.1.0.aar | support-core-utils-26.0.2.aar |
support-v4 | com.android.support.support-v4-26.1.0.aar | support-v4-26.0.2.aar |
このように異なるバージョンのライブラリ利用によるビルドエラーについては、バージョンの低い方 のライブラリを削除するとうまくいくことがあります。上記例で言えば、バージョン26.0.2のaarファイルを削除します。低いバージョンのライブラリを削除した後、再度ビルドを実行してください。
この方法はライブラリのバージョン同士が近い(マイナーバージョンの違い程度)場合に使えます。
それでもまだ解決しない場合
上記手順を行ってもなおビルドに失敗する際は次のステップになります。
各プラグインのAndroidManifestファイル内のminSdkVersionconfigを修正する
Google-Mobile-Ads-Unity と ncmb_unity のAndroidManifest にある minSdkVersionのバージョンが下記のように異なる場合は、同一バージョンにします。基本的に高い方に合わせます。
#Google Admob <uses-sdk android:minSdkVersion="16"/> #ncmb_unity <uses-sdk android:minSdkVersion="14"/>
play-services-basement.properties
が2箇所に存在するとのビルドエラーが発生した場合
この場合は Assets/Plugins/Android/play-services-basement-15.0.1.aar を削除してください。
おわりに
プラグインの競合問題はどのようなプラットフォームでも発生しますが、UnityはAndroidやiOSなど幅広いプラットフォームにも対応するために複雑になりやすく、その結果として競合しやすいと言えます。ぜひ記事を参考に皆さんの問題が解決することを期待します。
もし今後もエラーが出る、または別な問題で分からないことがあれば、コミュニティを活用してみてください!