はじめに
AdMobで play-services-ads
のバージョン18.0.0以降を使用する場合は AndroidX
への移行が必須となる
AndroidXとは
AndroidStudioを用いたAndroidXへの移行はこちらのサイトに説明があるが、AndroidStudioを用いずにUnity単体での対応方法がなかったためメモしておく
実装環境
- Unity 2019.1.7f1
- Google Mobile Ads Unity Plugin v3.17
対処方法
- build.gradleファイルを書き換えるスクリプトを記述する
- templateファイルにAndroidX用の記載を追加する
- AndroidSupportのライブラリをAndroidX用に変更する
templateファイルにAndroidX用の記載を追加する
- Unityメニューバーより、File→Build Settings→Player Settings→ Androidマークのタブをクリック→Publish Settingsと遷移させ、
Custom Gradle Properties Template
の部分にチェックを入れる
- 該当箇所にファイルが生成されている(上記の例では
Assets/Plugins/Android/gradleTemplate.properties
)ので、以下の項目を追記する
android.useAndroidX=true
android.enableJetifier=true
AndroidSupportのライブラリをAndroidX用に変更
バージョンや名前は2019年7月時点で最新のもの、最新状態はmvnrepository等のサイトで調べる
旧版
compile group: 'com.android.support', name: 'customtabs', version: '28.0.0'
compile group: 'com.android.support', name: 'support-annotations', version: '28.0.0'
compile group: 'com.android.support', name: 'support-compat', version: '28.0.0'
compile group: 'com.android.support', name: 'support-core-ui', version: '28.0.0'
compile group: 'com.android.support', name: 'support-core-utils', version: '28.0.0'
compile group: 'com.android.support', name: 'support-fragment', version: '28.0.0'
compile group: 'com.android.support', name: 'support-media-compat', version: '28.0.0'
compile group: 'com.android.support', name: 'support-v4', version: '28.0.0'
compile group: 'com.android.support', name: 'recyclerview-v7', version: '28.0.0'
compile group: 'com.android.support', name: 'appcompat-v7', version: '28.0.0'
compile group: 'com.android.support', name: 'cardview-v7', version: '28.0.0'
compile group: 'com.android.support.constraint', name: 'constraint-layout-solver', version: '1.1.3'
compile group: 'com.android.support.constraint', name: 'constraint-layout', version: '1.1.3'
AndroidX対応版
compile group: 'androidx.browser', name: 'browser', version: '1.0.0'
compile group: 'androidx.annotation', name: 'annotation', version: '1.1.0'
compile group: 'androidx.core', name: 'core', version: '1.1.0-rc02'
compile group: 'androidx.legacy', name: 'legacy-support-core-ui', version: '1.0.0'
compile group: 'androidx.legacy', name: 'legacy-support-core-utils', version: '1.0.0'
compile group: 'androidx.fragment', name: 'fragment', version: '1.1.0-rc03'
compile group: 'androidx.media', name: 'media', version: '1.1.0-rc01'
compile group: 'androidx.legacy', name: 'legacy-support-v4', version: '1.0.0'
compile group: 'androidx.recyclerview', name: 'recyclerview', version: '1.1.0-beta01'
compile group: 'androidx.appcompat', name: 'appcompat', version: '1.1.0-rc01'
compile group: 'androidx.cardview', name: 'cardview', version: '1.0.0'
compile group: 'androidx.constraintlayout', name: 'constraintlayout-solver', version: '2.0.0-beta2'
compile group: 'androidx.constraintlayout', name: 'constraintlayout', version: '2.0.0-beta2'
補足
build.gradleファイルを書き換える方法
gradleTemplate.properties
ファイルを使用せず、ビルド時に自動で build.gradle
ファイルを書き換える方法を参考までに載せておく
※但し、Unity2020では正しく動作しないためあくまで参考資料
Editor/Build/AndroidPostBuildProcessor
using System.IO;
using UnityEditor.Android;
namespace Editor.Build
{
public class AndroidPostBuildProcessor : IPostGenerateGradleAndroidProject
{
/// <summary>
/// 実行順を指定(0がデフォルト、低いほど先に実行される)
/// </summary>
public int callbackOrder => 999;
/// <summary>
/// build.gradleをビルド時に書き換える
/// </summary>
void IPostGenerateGradleAndroidProject.OnPostGenerateGradleAndroidProject(string path)
{
var gradlePropertiesFile = path + "/gradle.properties";
if (File.Exists(gradlePropertiesFile))
{
File.Delete(gradlePropertiesFile);
}
var writer = File.CreateText(gradlePropertiesFile);
writer.WriteLine("org.gradle.jvmargs=-Xmx4096M");
writer.WriteLine("android.useAndroidX=true");
writer.WriteLine("android.enableJetifier=true");
writer.Flush();
writer.Close();
}
}
}