環境:Unity2020.3.0f1
広告:Admobのみ
はじめに
Android12以降の端末でアプリのアイコンをタッチすると、
「○○(アプリ名)」が繰り返し停止しています。
というメッセージが出てアプリが起動しない問題に直面しました。
3つの手順をして解決することができました。
- AndroidManifest.xmlにAdmobの広告IDを追記
- mainTemplate.gradleを作成&編集する
- gradleTemplate.propertiesを作成&編集する
1だけで解決できず、2、3と進みました。もしかしたら2と3だけでも解決するかもしれないけど、それは試してません。
1.AndroidManifest.xmlにAdmobの広告IDを追記
Assets\Plugins\Android\GoogleMobileAdsPlugin.androidlib\AndroidManifest.xml
上記ファイルを開いて、
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.unity.ads" android:versionName="1.0" android:versionCode="1">
<application>
<uses-library android:required="false" android:name="org.apache.http.legacy" />
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-○○" />
</application>
</manifest>
5行目にある
<meta-data android:name=”com.google.android.gms.ads.APPLICATION_ID” android:value=”ca-app-pub-○○” />
を追加します。○○には自身の広告IDを入れます。
2.mainTemplate.gradleを作成&編集する
Android 12(APIレベル 31)からは、PendingIntent
を作成するときにフラグを設定しなければならなくなり、その解決方法がWorkManagerをバージョン2.7.0以上にすることのようです。
PendingIntent
Androidシステムにおいて、アプリが実行されていない時でも、ある時点でアプリケーションの特定の操作を実行できるようにするためのクラス
WorkManager
デバイスの再起動やアプリの終了後でも保証された実行を提供し、バックグラウンドタスクのスケジューリングを容易にするライブラリ
Edit>Project Settings>Player>Publishing Settings >Buildに移動し、Custom Main Gradle Templateにチェックを入れます。これによってAssets/Plugins/AndroidにmainTemplate.gradleファイルが生成されます。
生成されたファイルを開いて ↓のようにimplementation ‘androidx.work:work-runtime-ktx:2.7.0’ を追加します。
…
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.work:work-runtime-ktx:2.7.0'
// Android Resolver Dependencies Start
…
ちなみに生成したばかりの状態だと、// Android Resolver Dependencies Start などの記述がない簡潔なファイルで、一度Unityを再起動するといいかもしれません(ビルド中に自動的に変更されたり、されなかったり?)。
3.gradleTemplate.propertiesを作成&編集する
2と同様に、今度はCustom Gradle Properties Template にチェックを入れます。これによって、Assets/Plugins/AndroidにgradleTemplate.propertiesファイルが生成されます。
生成されたファイルを開いて、2文を追加します。
android.useAndroidX=true
android.enableJetifier=true
org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M
org.gradle.parallel=true
#android.enableR8=**MINIFY_WITH_R_EIGHT**
android.useAndroidX=true
android.enableJetifier=true
unityStreamingAssets=.unity3d**STREAMING_ASSETS**
**ADDITIONAL_PROPERTIES**
ただし、この状態でビルドしても、
The option setting 'android.enableR8=false' is deprecated.
というエラーが出てビルド失敗します。
そこで同じファイルにある
android.enableR8=**MINIFY_WITH_R_EIGHT**
に#を足してコメントアウトします。
これでビルドができ、実機テストで問題なくプレイすることができました。
ちなみに起動時クラッシュの問題は、2でmainTemplate.gradleを作成した段階でビルドすると解決しました。ただしそれだと、多分広告を読み込むタイミングでエラーが起こり、ゲームが先に進まなくなりました。私のゲームの場合は、タイトル画面は表示されるけど、その先へ進まない状態でした。正直、よく分かってません。
上記3つの手順で解決できたので、とりあえずよし!
実機テスト用に古い端末を1つだけ持ってたけど、新しいのも必要だと学習した夏の日でした。