TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

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 にするのは一旦諦めました。

Unity: 使わなくなったプロジェクトのLibrary配下のキャッシュを削除してみる

やりたいこと

Macの容量がいっぱいになってきたので使用していないUnityプロジェクトのキャッシュを削除して、Macの空き容量を増やしたかった。

やること

  • UnityプロジェクトのLibrary/BuildCacheを削除してみる
  • 他の大きいcacheも削除してみる

原因・考察

Addressablesを使用しているUnityプロジェクトの容量が他のプロジェクトと比べて10倍程度大きくなっていたので、原因を見てみるとUnityプロジェクトのLibrary/BuildCacheが大半を占めていることがわかった

準備

  • gitignoreでcache関連は除外されていることをご確認ください。
  • 不安な方はバックアップをとっておいてください。

効果

約18GB程度削除することに成功しました!
Macの書類の容量が減ることを確認しました!