2020年08月12日

[Unity] Androidプラグインにおける依存関係の解決と重複クラスの解消方法

UnityのAndroid用ビルドするとき、いつもプラグインにおける依存関係で問題があったりクラス宣言が重複したりとかで困っていたので、対処方法をメモ。

AdMobのプラグイン(2020年8月11日現在 v5.3.0)
https://github.com/googleads/googleads-mobile-unity/releases/tag/v5.3.0

Google Play Serviceのプラグイン(2020年8月11日現在 v0.10.09)
https://github.com/playgameservices/play-games-plugin-for-unity/releases

まずはビルドのエラーメッセージ。

001.png

Google Play Serviceにおけるクラス宣言の重複があるというエラー(たくさん表示される中から一部を抜粋)
---------------------------------------------
Duplicate class com.google.android.gms.common.data.DataBufferObserver found in modules classes.jar (:com.google.android.gms.play-services-base-17.1.0:) and classes.jar (:play-services-base-9.4.0:)
---------------------------------------------

これからUnityの機能を使って依存関係を解決するんだけど、ビルド時に自動でjarファイルを追加されないように設定しておく。

Assets > External Dependency Manager > Android Resolver > Settings

002.png

上から3つ目の「Enable Resolution On Build」のチェックを外す。そうしないと、この後の操作で消したはずのjarファイルがビルド時に復活してビルドエラーになる。

003.png

準備ができたところで、Project内を確認してみると、Assets > Plugins の中にたくさんのjarファイルがあって、この中のいくつかでクラス宣言が重複していたりするらしい。

004.png

なので、依存関係を解決してみる。
Assets > External Dependency Manager > Android Resolver > Resolve

005.png

うまくいくとこんなメッセージが表示される。

006.png

この状態でビルドしてもエラーになる。
なので、依存関係を解決したjarファイル(ライブラリ)を削除する。
Assets > External Dependency Manager > Android Resolver > Delete resolved Libraries

007.png

すると、たくさんあったプロジェクト内のjarファイルのいくつかが削除された。

008.png

これで終わったと思いきや、まだビルドエラーが出る。
今度はAdMobにおけるクラス宣言の重複らしい。

---------------------------------------------
Duplicate class com.google.unity.ads.RewardBasedVideo$2 found in modules classes.jar (:googlemobileads-unity:) and unity-plugin-library.jar (unity-plugin-library.jar)
---------------------------------------------

プロジェクトで、エラーメッセージにあった「googlemobileads-unity」で検索をかけてみると、Inspector画面の「Select platforms for plugin」にてAndroidにチェックが入っていたので、このライブラリではAndroid用に使用しないようにチェックを外し、Applyを押して更新する。

これでビルドが通った。
Unityってこんなに便利になってたんだ、と驚きました。
posted by be-style at 16:09| Comment(0) | Android

[Unity] AndroidManifest.xml is missing. の対処法

UnityのAndroid用ビルドをしようとして、AdMobのエラーが出たときの対処法をメモで残しておく。

Unity用のAdMobSDKのパッケージ  ※Ver. 5.3.0 = 2020年8月12日現在
https://developers.google.com/admob/unity/start?hl=ja

エラーメッセージ:
-------------------------------------
BuildMethodException: [GoogleMobileAds] AndroidManifest.xml is missing. Try re-importing the plugin.
ManifestProcessor.StopBuildWithMessage (System.String message) (at Assets/GoogleMobileAds/Editor/ManifestProcessor.cs:175)
ManifestProcessor.OnPreprocessBuild (UnityEditor.Build.Reporting.BuildReport report) (at Assets/GoogleMobileAds/Editor/ManifestProcessor.cs:52)
UnityEditor.Build.BuildPipelineInterfaces+<>c__DisplayClass15_0.b__1 (UnityEditor.Build.IPreprocessBuildWithReport bpp) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:411)
UnityEditor.Build.BuildPipelineInterfaces.InvokeCallbackInterfacesPair[T1,T2] (System.Collections.Generic.List`1[T] oneInterfaces, System.Action`1[T] invocationOne, System.Collections.Generic.List`1[T] twoInterfaces, System.Action`1[T] invocationTwo, System.Boolean exitOnFailure) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:391)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at /Users/builduser/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:197)
-------------------------------------

「AndroidManifest.xml 」が見つからないということで、パスが誤っているらしい。

Assets > GoogleMobileAds > ManifestProcessor.cs
を開き、40行目あたりにある赤い部分を削除する。

-------------------------------------
string manifestPath = Path.Combine(Application.dataPath, "Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml");

string manifestPath = Path.Combine(Application.dataPath, "Plugins/Android/GoogleMobileAdsPlugin/AndroidManifest.xml");
-------------------------------------

これでビルドが通った。
公式のプラグインに誤りがあるなんて!

参考:
https://stackoverflow.com/questions/57920250/androidmanifest-xml-is-missing-try-reimporting-the-plugin
posted by be-style at 14:57| Comment(0) | Unity

2020年03月28日

[Unity] Unity2019.3.6でLWRPからURPに移行しようとして苦労した話

Unity2019.3からLWRP(軽量レンダーパイプライン)からURP(ユニバーサルレンダーパイプライン)に変更されるということで、プロジェクトを更新しようとした話の続き。

先の記事では、とりあえずPackage Manager関連のエラーを解消することができた。

先の記事:
http://blog.be-style.jpn.com/article/187319324.html

シーンを実行したところ、LWRPで作っていたShaderMaterialが紫一色に!
どこかでリンクが切れているときに起こる現象なので調べてみたところ、それっぽい記事を発見。

Unity2019.2までのLWRPプロジェクトをUnity2019.3以降のURPにアップグレードする方法:
https://raspberly.hateblo.jp/entry/UniversalRPUpgrade

LWRP -> Universal RP Upgrade Guide:
https://docs.google.com/document/d/1Xd5bZa8pYZRHri-EnNkyhwrWEzSa15vtnpcg--xUCIs/edit

読んでみたものの、正直、すべてを理解できませんでした(おぃ
Unityのメニューを色々見ていたら「Upgrade Project Materials to UniversalRP Materials」というそれっぽいメニューを発見。

スクリーンショット 2020-03-28 15.35.26.png

これはいけるのでは!

スクリーンショット 2020-03-28 15.35.46.png

「Proceed」を押して実行してみたところ、問題は解消されませんでした!

初心に戻って、問題のシェーダーのInspectorを見直してみることに。

スクリーンショット 2020-03-28 15.59.41.png

どうも初期化されてないっぽいということで、Shader Editorを開き、「Save Asset」を実行してみました。

スクリーンショット 2020-03-28 16.00.11.png

Inspectorの表示を見ると初期化されたっぽい!

スクリーンショット 2020-03-28 16.00.25.png

これでシーンをもう一度実行してみたところ、ちゃんとシェーダーが動きました。
よかったー。
posted by be-style at 16:37| Comment(0) | Unity