🛠️

Unity 2022アップデート時に発生したエラー対応メモ

2024/06/05に公開

とあるUnityアプリ開発のプロジェクトにて、開発環境をUnity 2021から2022へアップデートした際に発生したエラーの対応メモです。

Reference has errors 'Google.IOSResolver'.

Assembly 'Library/ScriptAssemblies/Assembly-CSharp-Editor.dll' will not be loaded due to errors:
Reference has errors 'Google.IOSResolver'.

原因

UnityにiOSモジュールがインストールされていない場合に発生するエラー。

対応

Unity HubのInstallsにて対象バージョンのUnityを選択。Add modulesから iOS Build Support を追加して解消。

参考

Check if you have iOS module installed for your unity editor. If not, install it from unity hub.

https://forum.unity.com/threads/google-iosresolver-will-not-be-loaded-in-2021-1-11f1-and-later.1128617/#post-9101890

System.InvalidOperationException: Insecure connection not allowed

Job failed with exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Insecure connection not allowed
  at (wrapper managed-to-native) UnityEngine.Networking.UnityWebRequest.BeginWebRequest(UnityEngine.Networking.UnityWebRequest)
  at UnityEngine.Networking.UnityWebRequest.SendWebRequest () [0x00001] in <ce006d9cdd7f42a88f73d37c00d20828>:0 
  at (wrapper managed-to-native) System.Reflection.RuntimeMethodInfo.InternalInvoke(System.Reflection.RuntimeMethodInfo,object,object[],System.Exception&)
  at System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x0006a] in <b11ba2a8fbf24f219f7cc98532a11304>:0 
   --- End of inner exception stack trace ---
  at System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00083] in <b11ba2a8fbf24f219f7cc98532a11304>:0 
  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <b11ba2a8fbf24f219f7cc98532a11304>:0 
  at Google.PortableWebRequest.StartRequest (Google.PortableWebRequest+HttpMethod method, System.String url, System.Collections.Generic.IDictionary`2[TKey,TValue] headers, UnityEngine.WWWForm form) [0x0019e] in <3d721d59d99942a585ced249e28ec6ca>:0 
  at Google.PortableWebRequest+<StartRequestOnMainThread>c__AnonStorey6.<>m__C () [0x00000] in <3d721d59d99942a585ced249e28ec6ca>:0 
  at Google.RunOnMainThread.ExecuteNext () [0x0003d] in <3d721d59d99942a585ced249e28ec6ca>:0 
UnityEngine.Debug:LogError (object)
Google.RunOnMainThread:ExecuteNext ()
Google.RunOnMainThread:<ExecuteAllUnnested>m__12 ()
Google.RunOnMainThread:RunAction (System.Action)
Google.RunOnMainThread:ExecuteAllUnnested (bool)
Google.RunOnMainThread:ExecuteAll ()
UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()

原因

Unity 2022以後では、HTTP経由でのコンテンツダウンロードを許可しない設定がデフォルトとなっている。

HTTP 経由でのコンテンツのダウンロードを許可するかどうか指定します。選択可能なオプションは Not allowed、Allowed in Development builds only、Always allowed です。デフォルトのオプションは Not allowed です。これは、より安全なプロトコルである HTTPS が推奨されるためです。

https://docs.unity3d.com/ja/2022.3/Manual/class-PlayerSettingsWebGL.html

FirebaseやAdMobなど、Google系のデータ解析・広告SDKを導入している場合、Editorの使用状況レポート送信でhttp通信が行われていることが原因。

EditorMeasurement used to use http:// instead of https:// to report editor usage. This is causing later version of Unity to log warnings and errors. Even though this is harmless, the logs still looks concerning.

https://github.com/googlesamples/unity-jar-resolver/pull/548

対応

unity-jar-resolverのドキュメントを参照し、該当するレポート送信を無効にする。
以下設定のEnable Analytics Reportingのチェックを外し、OKボタンクリックで保存して解消。

Assets > External Dependency Manager > Version Handler > Settings

なお、UnityエディタのProject Settingsにて Allow downloads over HTTPAlways allowed へ変更してもエラー解消可能だが、HTTP通信は非推奨であるため、前述の設定変更を行うか、外部通信時の接続対象をHTTPSに限定する形が望ましい。

参考

Enable Analytics Reportingの設定変更

Thank you for reporting this issue. Seems like Unity 2022 added some security feature which blocks the non-https web request. I wonder why it used http in the first place.

At the meantime, as a workaround, I would recommend you to disable Analytics reporting from our editor tools for now. Here are all the settings:

EDM4U: Assets > External Dependency Manager > Version Handler > Settings > Enable Analytics Reporting
Firebase: Windows > Firebase > Documentation > Enable Analytics Reporting (At the very bottom)

https://github.com/googlesamples/unity-jar-resolver/issues/484#issuecomment-993910648

Allow downloads over HTTPの設定変更

Solved this by (Workaround): Edit -> Project Settings -> Player -> Other Settings -> Configuration -> Allow downloads over HTTP
set "Always allowed"...

https://forum.unity.com/threads/job-failed-with-exception-system-reflection-targetinvocationexception-unity-error.1294134/#post-8590033

A problem occurred evaluating settings 'Gradle'. Could not find method dependencyResolutionManagement()

Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details

UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8

FAILURE: Build failed with an exception.

* Where:
Settings file 'C:\[PROJECTS_DIR]\Library\Bee\Android\Prj\IL2CPP\Gradle\settings.gradle' line: 14

* What went wrong:
A problem occurred evaluating settings 'Gradle'.
> Could not find method dependencyResolutionManagement() for arguments [settings_7nhrnu9w9v0k2m11cwns18lff$_run_closure1@205a5df4] on settings 'Gradle' of type org.gradle.initialization.DefaultSettings.

* 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

BUILD FAILED in 3s

UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)


CommandInvokationFailure: Gradle build failed. 
C:\Unity\Hub\Editor\2022.3.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\OpenJDK\bin\java.exe -classpath "C:\Unity\Hub\Editor\2022.3.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\gradle-6.7.1\lib\gradle-launcher-6.7.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx4096m" "assembleRelease"

Environment Variables:
PROCESSOR_ARCHITECTURE = AMD64

~ 中略 ~

stderr[
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8

FAILURE: Build failed with an exception.

* Where:
Settings file 'C:\[PROJECTS_DIR]\Library\Bee\Android\Prj\IL2CPP\Gradle\settings.gradle' line: 14

* What went wrong:
A problem occurred evaluating settings 'Gradle'.
> Could not find method dependencyResolutionManagement() for arguments [settings_7nhrnu9w9v0k2m11cwns18lff$_run_closure1@205a5df4] on settings 'Gradle' of type org.gradle.initialization.DefaultSettings.

* 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

BUILD FAILED in 3s
]
stdout[
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details
]
exit code: 1
UnityEditor.Android.Command.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <7564edb1c71b4762a209de01409ad6c0>:0)
UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <7564edb1c71b4762a209de01409ad6c0>:0)
UnityEditor.Android.Command.Run (System.String command, System.String args, System.String workingdir, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <7564edb1c71b4762a209de01409ad6c0>:0)
UnityEditor.Android.AndroidJavaTools.RunJava (System.String args, System.String workingdir, System.Action`1[T] progress, System.String error) (at <7564edb1c71b4762a209de01409ad6c0>:0)
UnityEditor.Android.GradleWrapper.Run (UnityEditor.Android.AndroidJavaTools javaTools, Unity.Android.Gradle.AndroidGradle androidGradle, System.String workingdir, System.String task, System.Action`1[T] progress) (at <7564edb1c71b4762a209de01409ad6c0>:0)
Rethrow as GradleInvokationException: Gradle build failed
UnityEditor.Android.GradleWrapper.Run (UnityEditor.Android.AndroidJavaTools javaTools, Unity.Android.Gradle.AndroidGradle androidGradle, System.String workingdir, System.String task, System.Action`1[T] progress) (at <7564edb1c71b4762a209de01409ad6c0>:0)
UnityEditor.Android.PostProcessor.Tasks.BuildGradleProject.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <7564edb1c71b4762a209de01409ad6c0>:0)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <7564edb1c71b4762a209de01409ad6c0>:0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&)

Build completed with a result of 'Failed' in 19 seconds (19043 ms)
3 errors
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)

原因

Gradle絡みのエラーは大量のログが出力され、パッと見で原因が分かりづらいが「What went wrong:」部分を読むと解決が早い。ここでは dependencyResolutionManagement() メソッドが見つからないというエラーが発生していた。


* What went wrong:
A problem occurred evaluating settings 'Gradle'.
> Could not find method dependencyResolutionManagement()

該当メソッドはGradle 6.8で追加されたもので、Unityバージョンアップ後に合わせて更新した広告SDKから呼ばれている。

https://docs.gradle.org/6.8/release-notes.html

Assets/Plugins/Android/baseProjectTemplate.gradle を確認すると、Unity 2021で使用されるバージョンの状態になっていた。参照しているGradle関連ファイルが古いため、該当メソッドの検証がコケている模様。

classpath 'com.android.tools.build:gradle:4.0.1'

Unityで使用されるGradleバージョンは以下のとおり。

Unity version Gradle version Android Gradle Plug-in version
6000.0 8.4 8.3.0
2022.3 7.2 7.1.2
2021.3
2020.3 starting from 2020.3.15f1
6.1.1 4.0.1
2020.3 up to and including 2020.3.14f1 5.6.4 4.0.1

https://docs.unity3d.com/Manual/android-gradle-overview.html

対応

Project Settingsの設定から、参照されているGradle関連ファイルを再生成する。

Assets > External Dependency Manager > Android Resolver > Force Resolve

Assets/Plugins/Android配下の baseProjectTemplate, gradleTemplate, launcherTemplate, mainTemplate, settingsTemplate 等を別フォルダへ退避(バックアップ)し、AndroidのBuild設定を開く。

Edit > Project Settings > Player > Android > Publishing Settings > Build

以下の項目のチェックを付け直すと、各項目に対応した関連ファイルが再生成される。

  • Custom Main Gradle Template
  • Custom Launcher Gradle Template
  • Custom Base Gradle Template
  • Custom Gradle Properties Template

改めて Force Resolveを実行すると baseProjectTemplate.gradle 等に記載のGradleバージョンが 7.1.2 になり、ビルドが通るようになった。

Gradle関連のエラーは多岐に渡るため、ググっても別事象の情報ばかりで沼にハマることがよくある。自身が遭遇したエラー原因と対策の詳細を書き残しておくと、該当する事象か否かを判断しやすくなるだろう。

参考

参照ライブラリのバージョン競合エラー

おなじみのエラーなのでログを残し忘れたが Multiple Dex Files など出ており、android-corefacebook-android-wrapper.aar ファイルが羅列されている場合はこのエラー。

原因

広告系SDKの更新時に古いライブラリが [対象SDK]/Plugins/Android/libs/ 配下に残っており、バージョンの異なるファイルが重複。ライブラリ参照時の競合エラーが発生している。

ex.)

  • /FacebookSDK/Plugins/Android/libs/facebook-android-wrapper-14.1.0.aar
  • /FacebookSDK/Plugins/Android/libs/facebook-android-wrapper-17.0.0.aar

対応

該当ライブラリの古いバージョンの aar ファイルを削除する。

参考

Discussion