脱力駆動開発記

ゲームアプリを作るエンジニアの技術メモ

MENU

【Unity】Android14がapp_resources_lib.jar is not allowed.でアプリがクラッシュする場合の対応

背景

2023/10/5にAndroid14が公開されていました。

japan.googleblog.com

自分は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がありました。

github.com

解決策としては

  • FirebaseのSDKをv11.5.0に上げる

  • UnityのAndroid用のビルド設定でTargetSDKを13にする

のどちらかになります。

とりあえず短期的な工数が少なく済むのはTargetSDKを13にする対応かと思います。

AndroidはAPIレベル要件というものがあり、1年周期でこのAPIレベル要件は上がっていきます。 今回TargetSDKを13にした場合は、2024/8/31以降のアップデートではTargetSDKを14に上げる必要があります。

support.google.com

なのでいずれ対応する必要はありますが、今回のケースではとりあえずTargetSDKを13にするでいいかなと思います。

BuiltSetting→Android→OtherSettingから以下を更新。

以上です