Restart of Unity – No.05(AdMobの導入でハマった件)

対象バージョン:Unity 2019.4.1f1(LTS)、AdMobパッケージ v5.2.0、Windows 10

AdMobの導入手順

アプリIDの取得

AdMobのページ(https://apps.admob.com)へログインし、アプリメニューから[アプリを追加]を選んで、アプリIDを取得します。

OSID
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パーティ製のパッケージで日本語パス未対応の様なものの場合、気を付けないとダメな様です。

改めて言えば…

ユーザーアカウントは「半角英数字」で設定すべし!

ですね。(でないと、しなくていい苦労をします…)


前の記事次の記事
No.04(オブジェクトのサイズ)No.06(Android向けAPI levelについて)