背景
2023/10/5にAndroid14が公開されていました。
自分はiPhoneユーザーなので把握していなかったですが、アプリのお問い合わせを見ると10月頃から「Android14でアップデートしたら起動時にアプリが落ちる」といったお問い合わせがいくつか来ていました。
調べたら自分が公開している全アプリでAndroid14でクラッシュしていました。 普段動作確認に使用している端末がAndroid13なので気づくのが遅れてしまいました、、
ご報告いただいたユーザーの皆様、ありがとうございました。修正しました。
起きているエラー
自分のアプリではAndroid14で起動すると以下のようなエラーが出ていました。
No pending exception expected: java.lang.SecurityException: Writable dex file '/data/user/0/{budnleid}/cache/app_resources_lib.jar' is not allowed. at java.lang.Object dalvik.system.DexFile.openDexFileNative(java.lang.String, java.lang.String, int, java.lang.ClassLoader, dalvik.system.DexPathList$Element[]) (DexFile.java:-2) at java.lang.Object dalvik.system.DexFile.openDexFile(java.lang.String, java.lang.String, int, java.lang.ClassLoader, dalvik.system.DexPathList$Element[]) (DexFile.java:406) at void dalvik.system.DexFile.<init>(java.lang.String, java.lang.ClassLoader, dalvik.system.DexPathList$Element[]) (DexFile.java:128) at void dalvik.system.DexFile.<init>(java.io.File, java.lang.ClassLoader, dalvik.system.DexPathList$Element[]) (DexFile.java:101) at dalvik.system.DexFile dalvik.system.DexPathList.loadDexFile(java.io.File, java.io.File, java.lang.ClassLoader, dalvik.system.DexPathList$Element[]) (DexPathList.java:438) at dalvik.system.DexPathList$Element[] dalvik.system.DexPathList.makeDexElements(java.util.List, java.io.File, java.util.List, java.lang.ClassLoader, boolean) (DexPathList.java:397) at void dalvik.system.DexPathList.<init>(java.lang.ClassLoader, java.lang.String, java.lang.String, java.io.File, boolean) (DexPathList.java:166) at void dalvik.system.BaseDexClassLoader.<init>(java.lang.String, java.lang.String, java.lang.ClassLoader, java.lang.ClassLoader[], java.lang.ClassLoader[], boolean) (BaseDexClassLoader.java:160) at void dalvik.system.BaseDexClassLoader.<init>(java.lang.String, java.io.File, java.lang.String, java.lang.ClassLoader) (BaseDexClassLoader.java:105) at void dalvik.system.DexClassLoader.<init>(java.lang.String, java.lang.String, java.lang.String, java.lang.ClassLoader) (DexClassLoader.java:55) at boolean com.unity3d.player.UnityPlayer.nativeRender() ((null):-2) at boolean com.unity3d.player.UnityPlayer.access$300(com.unity3d.player.UnityPlayer) ((null):-1) at boolean com.unity3d.player.UnityPlayer$e$1.handleMessage(android.os.Message) ((null):-1) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) at boolean android.os.Looper.loopOnce(android.os.Looper, long, int) (Looper.java:205) at void android.os.Looper.loop() (Looper.java:294) at void com.unity3d.player.UnityPlayer$e.run() ((null):-1)
対応
検索するとFirebaseのgithubでissueがありました。
解決策としては
FirebaseのSDKをv11.5.0に上げる
UnityのAndroid用のビルド設定でTargetSDKを13にする
のどちらかになります。
とりあえず短期的な工数が少なく済むのはTargetSDKを13にする対応かと思います。
AndroidはAPIレベル要件というものがあり、1年周期でこのAPIレベル要件は上がっていきます。 今回TargetSDKを13にした場合は、2024/8/31以降のアップデートではTargetSDKを14に上げる必要があります。
なのでいずれ対応する必要はありますが、今回のケースではとりあえずTargetSDKを13にするでいいかなと思います。
BuiltSetting→Android→OtherSettingから以下を更新。
以上です