TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

Unity: 2022.3.11fにアップデートしたら「'AndroidSdkVersions.AndroidApiLevel21' is obsolete: 'Minimum supported Android API level is 22」というエラーが出た。

状況

Unity: 2022.3.11fにアップデートすると以下のようなエラーが出て実行できなくなりました。

Library/PackageCache/com.google.android.appbundle@1.4.0/Editor/Scripts/Internal/AssetPacks/AssetDeliveryWindow.cs(139,56): error CS0619: 'AndroidSdkVersions.AndroidApiLevel21' is obsolete: 'Minimum supported Android API level is 22 (Android 5.1 Lollipop). Please use AndroidApiLevel22 or higher'

Library/PackageCache/com.google.android.appbundle@1.4.0/Editor/Scripts/Internal/BuildTools/BundletoolHelper.cs(133,46): error CS0619: 'AndroidSdkVersions.AndroidApiLevel21' is obsolete: 'Minimum supported Android API level is 22 (Android 5.1 Lollipop). Please use AndroidApiLevel22 or higher'

Failed to find entry-points:
Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'Assembly-CSharp-Editor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' ---> System.Exception: Failed to resolve assembly 'Assembly-CSharp-Editor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' in directories:


Library/PackageCache関係のエラーと出ているのでPackageCacheを削除すれば解決するかと思いましたが、うまくいきませんでした。

環境

  • Unity 2020.3.0
  • Unity 2022.3.11
  • パッケージはPackage Managerからインストール

原因

com.google.play.review-1.4.0をUnity 2020.3で使っていたのですが、Unityを2022.3.11にあげると依存関係でエラーが出るようでした

Unity 2020.3にやっぱり一旦戻したい時

1. 動作前のUnityのversionに一旦戻す。
2. Library/PackageCacheとTempフォルダを削除してReimport Allを削除した。

解決策

com.google.play.reviewのパッケージにはcom.google.android.appbundleという依存パッケージたちがあるので、それらを最新にしてあげればOKです。
https://developers.google.com/unity/archive?hl=ja#play_in-app_review
このページに行ってアプリ内レビューの最新のパッケージをとってきて、依存関係のパッケージもとってきて、Package ManagerのPackages/manifest.jsonに記述すればOKです。記述順は大切なので、リンクの依存関係の順番に並べれば多分OK!

Unity: Admob: AndroidResolverDependencies.xmlのbundleIdが大文字に勝手に書き換わる

環境

  • Unity 2022.3.11
  • Admob v8.5.2

状況

  • 新しいUnityにバージョンアップして、Admobも新しくするとAndroid ResolveされるときにProjectSettings/AndroidResolverDependencies.xmlにあるbundleIdがなぜか勝手に書きかわっていました。

解決策

UnityのProjectSettings > PlayerのIdentificationのOverride Default Bundle identifierにチェックを入れるとpackage名を書き換えれるようになるので、正しい名前に書き換えれます。

ProjectSettings/ProjectSettings.assetのoverrideDefaultApplicationIdentifierが1になってapplicationIdentifierが正しいものになっていることが確認できたらOKです。

原因

ふわっとしか調べていないので、わからないのですが、Unityを新しくしたタイミングでは問題なかったのですが、しばらくするとProjectSettingをいじったわけでもないのに、どこかのタイミングでなんかpackage名が急に書きかわりました。gitのログで追えるのですが、追って見てもいまいちパッとしなかったので、調査終了しました。

Unity: Admobを新しいバージョンにするときの備忘録(個人用)

気をつけること

古いAdmobは一旦全部削除する。

ただし、以下は残しておく

  • GoogleMobileAds > ResourcesのGoogle Mobile Ads Settings
  • Plugins > Android の proguard-user.txt
Androidの最新のAPI Levelに対応する時は以下の記事を参考にする。

【Unity】Androidアプリで「APIレベルを上げてください」と怒られた時の対処法 | くものす
やることはプロジェクト内のandroid SDKフォルダに最新のAPI関連の何やかんやらをコピーして入れておく必要がある。

Androidの最新のAPI Levelに対応したのに、Google Play Consoleから警告のメッセージが消えない時

しばらく待つと消える。(1日弱くらいのラグあり)

ついでにgitignoreも更新しておく

Admobを更新するときはUnity自体も更新することになるので、gitignoreの差分を以下のサイトと見比べて追加しておく。
github.com

その後に、誤ってすでにファイルを追加してしまっていたら、以下のコマンでgit管理対象外にする

git rm -r --cached .

備忘録

ハマった内容は随時追記していくこと。(未来の自分)

Unity: Admobエラー「java.lang.ClassNotFoundException: com.google.android.gms.ads.initialization.OnInitializationCompleteListener」

状況

Admobを入れてAndroidビルドすると以下のようなエラーがlogcatに出てしまい、実機で広告が出なくなりました。

AndroidJavaException: java.lang.ClassNotFoundException: com.google.android.gms.ads.initialization.OnInitializationCompleteListener

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.initialization.OnInitializationCompleteListener" on path: DexPathList

AndroidJavaException: java.lang.ClassNotFoundException: com.google.android.gms.ads.AdRequest$Builder

環境

Unity: 2022.3.11f
Admob: v8.5.2

対処法

github.com
www.hirohomme.com

上に書いてある通り、
1.
Project Setting > Player > Publishing Settingsで
minifyのReleaseにチェックが入っている状況になっているので、この状態で、少し上の項目のBuildからCustom Proguard Fileにチェックを入れます。

2.
Assets/Plugins/Android/proguard-user.txtというファイルが生成されるのでそこに参考記事で紹介してあるproguard-user.txtを貼り付けます。

### AdMob
-keep class com.google.unity.** {
   *;
}

-keep public class com.google.android.gms.ads.** {
    public *;
}

-keep public class com.google.ads.** {
    public *;
}

感想

minifyするならproguard file必要だし、しないなら、必要ないということで理解しました。
原因としては以前proguardの設定はしていたのですが、Admobを新しくするときに、Admob関連のPluginフォルダのファイルを全部一旦削除したときに、誤って、proguard fileも削除してしまっていたようです。

Unityのコンパイル時間が長いのでアップデートしてみたらすごく速くなった!(定期)

現象

Unity 2022.1.19f1を使っていましたが、コンパイル時間がすごく長く、我慢の限界になりました。

環境

  • iMac 2019
  • Unity 2022.1.19f1

解決

Unity 2022.2.15f1 にアップデートしたら快適な速度でコンパイルしてくれるようになりました。
定期的にUnityのコンパイル時間がすごく遅くなる時がありますが、バージョンアップするといつも治りました! (理由は知りません・・・)

Unity: App Tracking Transparency の多言語対応

やりたいこと

UnityでApp Tracking Transparency の多言語対応

実装

forum.unity.com
にある通り、実装します。

localizationFolderNamesは一番簡単に定義するなら、以下みたいに、使う分だけ、定義すれば良いです。

var localizationFolderNames = new[] { "en", "ja" };

他にも
GetDirectories
GetFileNameWithoutExtension
などを使って、フォルダ名からlocalizationFolderNamesを生成するのも良いと思います。

フォルダ

フォルダは以下のようにEditorの配下に設置します。
Editor > Localizations > en.lproj > InfoPlist.strings

InfoPlist.stringsの中身は以下です。

NSUserTrackingUsageDescription = "Your data will be used to deliver personalized ads to you.";

他の実装方法

github.com
上の実装方法もあったけど
ClearVariantGroupEntries
AddLocalization
などのメソッドがPBXProjectになくて、うまく動きませんでした。

またUnity公式のLocalizationでもできそうな気がしますが(未検証)、Addessablesが前提となっている?(未確認)ようなので、今回は見送りました。

Unity: Admob: Fatal error in Unity CIL Linkerが出た

状況

Admobをアップデートしたので、Androidのビルドをしようとしたところ以下のエラーが出ました。

Fatal error in Unity CIL Linker
Mono.Linker.LinkerFatalErrorException: ILLink: error IL1005: GoogleMobileAds.Api.MobileAds.GetClientFactory(): Error processing method 'GoogleMobileAds.Api.MobileAds.GetClientFactory()' in assembly 'GoogleMobileAds.dll'
 ---> System.InvalidOperationException: No action for the assembly GoogleMobileAds.Unity, Version=7.2.0.0, Culture=neutral, PublicKeyToken=null defined

環境

  • Admob v7.2.0
  • Unity 2022.1.15f

検証1

Unity Issue Tracker - [Android] Could not build an IL2CPP project when using 'GoogleMobileAds.dll'
上の記事のある通り

<linker>
    <assembly fullname="GoogleMobileAds.Unity" ignoreIfMissing="1" preserve="nothing"></assembly>
</linker>

linker.xmlを作って、Assetsの直下に配置しました。

すると以下のエラーがまた出てきました

Building Library/Bee/artifacts/Android/d8kzr/libil2cpp.so failed with output:

以下何をしようがエラーの無限ループ

検証2

Managerd Stripping Codeが必要

  • unityの設定でoffにしてもダメだった

検証3

Unityのバージョンを下げてみた。
2021.3.9へ下げると見事ビルドが通りました!
Unity 2022.1.15f にするのは一旦諦めました。