対象バージョン:Unity 2019.4.1f1(LTS)、AdMobパッケージ v5.2.0、Windows 10
AdMobの導入手順
アプリIDの取得
AdMobのページ(https://apps.admob.com)へログインし、アプリメニューから[アプリを追加]を選んで、アプリIDを取得します。
OS | ID |
---|---|
Android OS向け | ca-app-pub-xxxxxxxxxxxxxxxx-yyyyyyyyyy |
iOS向け | ca-app-pub-xxxxxxxxxxxxxxxx-zzzzzzzzzzz |
※実際には上記のx,y,zの部分は数字になります。
AdMobを組み込むプロジェクトの作成
今回は、AdMobパッケージ導入不具合の解消のためのテストプロジェクトという事で、「AdMobTest」というプロジェクトを使っていますが、本来は、AdMobでアプリIDを申請取得した際のアプリ名で作成します。
※ちなみに、作成したプロジェクトのパスには日本語は含まれていません。
今回は特にGame Objectの配置などは行いません。(それ以前の不具合なので…)
AdMobパッケージのダウンロード
以下のページから、GoogleMobileAds-v5.2.0.unitypackageをダウンロードする。
https://github.com/googleads/googleads-mobile-unity/releases/
※2020/07/29現在での最新版はv5.2.0でした。
AdMobパッケージのIMPORT
Projectビューで右クリックで表示されるメニューから、[Import Package]を選択して、ダウンロードした「GoogleMobileAds-v5.2.0.unitypackage」を指定します。
すべてにチェックして、[Import]ボタンを押して、IMPORTします。
※途中で、「Game Package Registry by Google」を含めるかどうかなど聞かれますが、自身のアプリに合わせて設定します。
Assets内にAdMob用のフォルダ・ファイルが作成されました。
アプリIDの設定
このままビルドをすると、必ずエラーになるので、先にアプリIDを設定します。
Assetsメニューから、[Google Mobile Ads]→[Settings]を選択します。
Inspectorビューで、取得したアプリIDを入力します。
Android向けビルド実行
メニューのFile→[Build Settings]を選択して、Build Settingsダイアログを表示し、Androidを選択し、[Switch Platform]ボタンを押します。
※切替処理中に再度Game Package Registry by Google」について聞かれますが、ここも自身のアプリに合わせて設定します。
[Build]ボタンが表示されたら、[Build]ボタンを押して、apkファイルの出力先を指定して、ビルドを実行します。
※Depenencyもビルド中に勝手にResolveしてくれます。楽ですね。
ビルドエラー発生
本来は、ここでビルドエラーは発生せず、ビルドが成功して、apkファイルが生成されます。(多くの人はそうだと思います)
しかし、自分の環境では、下記の様なエラーが発生してしまいました。
JSONの例外??詳細はConsoleを見ろ??
100個以上のエラー…とほほ…。
エラー原因の調査
ネットで情報収集
UnityでMalformedJsonExceptionでビルド出来ない不具合がないかをネットで調べてみるも、あまり合致するものがありません…。
という事は、自分の環境だけで発生している可能性が高い。
エラーメッセージの確認
数は多いですが、Consoleのエラーメッセージを確認するしかありません。
かと言っても、今回はAdMobパッケージをImportしただけで、エラーになっているので、ファイル内容の修正する類のものではなく、何かエラーとなるきっかけがないかを探していきます。
> com.google.gson.stream.MalformedJsonException: Invalid escape sequence at line 1 column 2134 path $[10].name
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
これは、ダイアログに表示されてた内容で、発生したメソッドが分かりますが、ここを修正は出来ないですね。
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
「Try」とは言われても、何をどうすれば…とよく見ると、「Get more help at https://help.gradle.org」とあるので、Gradleのビルドで失敗しているのが分かりました。
残りのエラーメッセージを見ていると、
C:\Users\�O�Ö�\.gradle\caches\transforms-2\files-2.1\c4cad1fa2ca568ff1acaeb5e7c03608b\jars\classes.jar: D8: Type `sun.misc.Unsafe` was not found, it is required for default or static interface methods desugaring of `void com.google.android.gms.internal.ads.zzdtu$zzi.<clinit>()`
ん?なんか文字化けしている?
エラー原因の推定
上記のパスのJARファイルは存在している。そして、文字化けしている部分は、ユーザーアカウント名です。
ユーザーアカウント名 | ユーザーフォルダ |
---|---|
萬太郎 | C:\Users\萬太郎 |
そう、PCの初期設定時に、ユーザーアカウント名に日本語を設定していました。
これまでも、いくつかのアプリで、日本語を含むパスで上手く動作しない事があったので、もしかしてユーザーアカウント名を日本語にしているからかも知れません。
エラー原因が正しいか確認
半角英数のみのユーザーアカウントでPCにログインしなおして、上述のAdMobの導入手順を進めてみると、、、、
Build Completed.
どうやら、ユーザーアカウント名が日本語のため、gradleの中間ファイルの格納パスに日本語が含まれる事で、文字化けしてしまい、ビルドがエラーになったようです。
「ユーザーアカウントに日本語を使うなよ!」って話ですけどね…
エラー対処方法
方法① ビルド用アカウントの作成
ビルド用に半角英数字のアカウント(例:「UnityBuild」)を作成し、ビルド時のみ、このアカウントにサインインし、ビルドをするというものです。
しかし、ただただ、面倒なだけなのでおすすめ出来ません。
方法②ユーザー名を日本語から半角英数字に変更
現在のユーザーアカウント「萬太郎」を「Yorozu」に変更できれば、問題は解決です。
ネットで調べると、出来なくは無さそうですが、レジストリを変更する必要がありそうです。かつ、変更箇所が膨大になります…。
結論から言えば、この方法はやるべきではありません!
実際に途中までやろうとしましたが、途中であきらめました…。作業前に、復元ポイントを設定してからやったので、何とか元に戻せましたが、失敗してたら、パソコン上のデータを失う所でした…。
方法③ Android Studioでビルド
Unityの設定項目の中には、Gradleのビルド設定は見当たりません。
そのため、UnityからAndroid Stdio用のプロジェクトをExportして、Android Studioでビルドを試みてみます。
エクスポートしたプロジェクトをAndroid Studioで開いてビルドしてみます。
ビルドに失敗し、エラーログはUnityと同じでした。
Gradleの中間ファイルの出力先を変更できないか設定を調べてみると、「Gradle User Home」という項目に問題になっているパス「C:\Users\萬太郎」が設定されています。
ここのパスを、日本語を含まないパス(例:「C:\Work\GradleHome」)を設定して、ビルドしなおしてみると、、、
「BUILD SUCCESSFUL」!!!うまく行きました!
しかし、毎回Android Studio経由でビルドするのも、面倒です。(iPhone向けでXCode起動するのと似ていますが…)
方法④ 環境変数「GRADLE_USER_HOME」を設定
Android Studioでは、「Gradle User Home」を設定画面で変更できましたが、同じ事をUnityで出来ないかなと、Android Studioの各ファイルを確認していると、「gradle\wrapper\gradle-wrapper.properties」に下記記述がありました。
#Thu Jul 30 20:06:19 JST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
「GRADLE_USER_HOME」これは、環境変数では?
という事で、システム詳細設定で、環境変数「GRADLE_USER_HOME」を設定し、値にAndroid Studioに設定したものと同じパスを設定します。
(Unity Hubも合わせて起動しなおし)Unityを起動しなおして、ビルドを実行してみます。
Build completed with a result of 'Succeeded' in 110 seconds (109958 ms)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
無事にビルドが成功しました。
環境変数「GRADLE_USER_HOME」を設定するのが正解らしいですね!
まとめ
今回はAdMobパッケージ導入時にハマった事と、対策について書きました。
まぁ、Unity自体は日本語パスがあっても大丈夫なのですが、3rdパーティ製のパッケージで日本語パス未対応の様なものの場合、気を付けないとダメな様です。
改めて言えば…
ユーザーアカウントは「半角英数字」で設定すべし!
ですね。(でないと、しなくていい苦労をします…)