バックグラウンド
少し前に、Google は Google Play Console を変更しました。これにより、クラッシュが発生するとすぐに自動的に報告され、「Android Vital」と呼ばれるものの一部になっています。
この日から、多くのクラッシュ レポートを受け取り、自分のアプリを修正することにしました。
問題
私が修正したいくつかのバグ (およびここではまだ修正していないバグ) の中には、別の非常に一般的なクラッシュがあり、このクラッシュ ログまたは類似のものがあります。
java.lang.RuntimeException:
at android.app.LoadedApk.makeApplication(LoadedApk.java:572)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4768)
at android.app.ActivityThread.access$1500(ActivityThread.java:176)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1498)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5576)
at java.lang.reflect.Method.invoke(Native Method:0)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)
Caused by: java.lang.ClassNotFoundException:
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.app.Instrumentation.newApplication(Instrumentation.java:984)
at android.app.LoadedApk.makeApplication(LoadedApk.java:567)
このクラッシュは、さまざまな Android バージョンとデバイスに影響を与えているようですが、修正方法についての手がかりはあまりありません。
私が試したこと
このようなクラッシュを解決するために私が見つけた唯一のことは、ここに書かれているようにマルチデックスを使用することです。
私のアプリは非常に小さく、サードパーティのライブラリをほとんど使用していませんが (したがって、64,000 メソッドの数に近づくことさえありません)、Android 5.x 以降では multi-dex は必要ありませんが、それでも興味がありました。これが役立つ場合は、実際に試してからわずか1日で、クラッシュがより頻繁に発生するようになりました。
それですぐに使うのをやめて、また使わなくなりました。
質問
- なぜ発生するのですか?
- これを回避する方法はありますか?Application クラスの拡張を避けることは役に立ちますか?
- 他のアプリではどのくらい一般的ですか?
- マルチデクシングが実際により多くの問題を引き起こすのはなぜですか?
- ユーザーの観点から、この問題を抱えているユーザーは常にいますか? 特定のデバイスまたは Android バージョンにこの問題がありますか? アプリの再起動または再インストールは役に立ちますか? ユーザーがこれから得られる体験とは正確には何ですか?