不久前,Google已经更改了Google Play控制台,因此崩溃会在发生时自动报告,并将其作为所谓的“Android Vital”的一部分。
从那天起,我收到了很多崩溃报告,我已经决定为my app修复。
在我修复过的一些错误中(还有一个我没有修复过的错误,here),还有另一个非常常见的崩溃,有这个崩溃日志或类似的错误:
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版本和设备,但关于如何修复它的线索并不多:
我发现解决此类崩溃的唯一方法是使用multi-dex,如here所示。
即使我的应用程序非常小并且几乎不使用第三方库(因此甚至没有接近64K方法计数),并且Android 5.x及更高版本甚至不需要多dex,我仍然很好奇,如果这会有所帮助,但在尝试它的一天,它实际上导致崩溃更频繁发生:
所以我很快停止使用它,然后又回来了,没有使用它。
答案 0 :(得分:0)
我设法通过将这些行添加到我的Proguard文件来减少它的出现次数:
-keep class android.app.Application
-keep class <<MyPackage>>.MyApplication
可缩短为:
-keep class * extends android.app.Application
根据android源代码,我想它修复了第一个问题。
我还将所有的lib更新到了应该修复第二个版本的最新版本(Google Play Services 11.0.2,支持lib 25.4.0)。
更新:它不能完全解决问题。我的出现次数要少得多,但仍然有一些。
答案 1 :(得分:0)
如果你的gradle里面有minify enabled
,你还有一个名为app\build\outputs\mapping\release\usage.txt
的文件。
在此文件中,您将看到apk中所有已剥离代码的列表。检查是否有任何您真正需要的代码已被proguard删除。
如果您在那里找到任何所需的代码,那么您必须在proguard配置文件中添加说明以保留它们。