雑メモ
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。
すると、必要なものを入れてくれる。