プロジェクトをUnity2018から2021にした時

雑メモ

2018.3.1f1 から 2021.3.20f1

Firebase, AdMob, GooglePlayGamesを更新したかった。
Unityバージョンあんまり関係ないですね。

[GoogleMobileAds] AndroidManifest.xml is missing. Try re-importing the plugin.

GoogleMobileAds-v7.4.1.unitypackageをインポートしている。

Assets > GoogleMobileAds > ManifestProcessor
に、以下の記載があるが
private const string MANIFEST_RELATIVE_PATH =
“Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml”;
実際のフォルダには.androidlibが無い。
フォルダ側を修正すべきのように思えたので、直し、ビルドOK、だが。

AdMobのAPI変更されていたのは、使用箇所更新してます。
初期化の変更と名前変更くらいだったような。ビルド優先で未確認。

下のクラスの重複問題を見るべし


Providing Android resources in Assets/Plugins/Android/res was removed, please move your resources to an AAR or an Android Library. See “AAR plug-ins and Android Libraries” section of the Manual for more details.

Pluginのresフォルダが使えなくなったようだ。

resに、android用xmlファイル、画像共有時の設定を入れていたので、一応そのまま使えるようにしたい。
他と同じように、androidlibにすると良いらしい。
FirebaseApp.androidlibに入っていたAndroidManifest.xmlとproject.propertiesを参考に、AndroidManifest.xmlのpackage名を変更した。

project.properties

target=android-9
android.library=true

AndroidManifest.xml packageはプロジェクト内でユニークであればよいのだと思う。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="jp.cocoamix.android.res.unity"
          android:versionCode="1"
          android:versionName="1.0">
</manifest>


クラスの重複問題
class com.google.unity.ads.AdNetworkExtras found in modules googlemobileads …..

GoogleMobileAdsを更新で入れてたことで、フォルダ名にandroidlibが付いていなかった!
そして、必要のないlibsフォルダがあったので、それを削除。

iOS側もおかしくなったので、元々のを全消してから入れよう。

→OK


minSdkVersionがどうとか。

全検索すると
GooglePlayGamesManifest.pluginのAndroidManifestにある。

<uses-sdk android:minSdkVersion="14" />

を消した。

→OK


ビルドと転送はしたが、落ちる。
Unable to get provider android.support.v4.content.FileProvider

スクリーンショットの画像共有用に利用している。

Android ファイル共有の設定
https://developer.android.com/training/secure-file-sharing/setup-sharing?hl=ja

共有の定義が古いため、最近の内容に変更。具体的には以下だけでした。
android.support.v4.content.FileProvider

androidx.core.content.FileProvider

しかし落ちる。
Unable to get provider androidx.core.content.FileProvider

androidプロジェクトの、androidXライブラリが有効になっていないということだ。

プロジェクトでの androidx ライブラリの使用
https://developer.android.com/jetpack/androidx?hl=ja

カスタムGradleプロパティで、gradleTemplateファイルに、無かったら追記。

android.useAndroidX=true
android.enableJetifier=true

→OK


java.lang.NoClassDefFoundError: com/android/tools/lint/client/api/Vendor

androidビルドのlintチェックに引っかかっている。

このへんかなぁと。

30にしたら通ったのであった。

→やっと実機で稼働。


Standardシェーダーの表示ががらっと変わってしまったため、Unlitと思っていた箇所がStandardに変わったと勘違いした。
光源周りの設定確認がいる。

→光源ソースがSkyboxだったのが、Colorになった?と思ったけど、違った。


AdMobの設定を変更すると実機ビルドできなくなった。

java.lang.UnsupportedOperationException: This feature requires ASM7

メニュー > Assets > Google Mobile Adsで、チェックをつけたあとから。

そして、チェック外してもビルドできない。

何かが変わった(?)のだろうけど、元々ビルドできてたのがおかしかったかな?

Target API Levelを29に変更してみるとビルドできてしまったが、30が必要だったような記憶でGoogleサイトを見てみると、今現在は31が必要だった。
Google Play の対象 API レベルの要件を満たす

android SDKはUnityの外に、別で入れておくべきでありますね。
→ UnityでAPI 31を選択してビルドすると、SDKダウンロードに進んでくれたのでとりあえず良し。

ビルドもできたが、31指定する場合の何かがいりそうな。


0.9.57→ GooglePlayGamesPlugin-0.11.01.unitypackage
GooglePlayGamesフォルダを消してからインポートし、

Assets > External … > Android ResolverからResolv。

ソース的には、Android側
PlayGamesClientConfiguration
PlayGamesPlatform.InitializeInstance
が無くなっていてエラー。

必要がなくなって、PlayGamesPlatform.ActivateだけでOKのようだ。

GooglePlayGamesの設定ファイルも消してしまっていたので、再設定。
変更それだけだった。→OK


androidビルド
java.lang.RuntimeException: java.lang.RuntimeException: Duplicate class android.support.v4.app.INotificationSideChannel
などのDuplicateエラー

Plugin > Android直下に、同名でバージョン違いのファイルがある。
androidx…
com.google…
org….
などのファイルを消すか(退避)して、
Assets > External … > Android ResolverからResolv。
すると、必要なものを入れてくれる。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする