“无法实例化活动”错误

2022-09-01 16:10:13

我的一个Android应用程序有大约100,000个用户,每周大约10次,我通过Google的市场工具向我报告了以下异常:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.rebm.asp/org.rebm.asp.MainActivity}:
  java.lang.ClassNotFoundException: org.rebm.asp.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/org.rebm.asp-1/pkg.apk]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2753)
at android.app.ActivityThread.access$2500(ActivityThread.java:129)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2107)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4701)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: org.rebm.asp.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/org.rebm.asp-1/pkg.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2651)
... 11 more

通过联机搜索,此错误通常表示清单文件和正在使用的包名称有问题。但是,我无法在自己的设备或模拟器上重现此错误。我只通过市场工具知道这个错误。我所能得出的结论是,这是一个罕见的错误,因为我知道很多人都在使用该应用程序,并且没有评论表明它崩溃了。

有谁知道问题可能是什么,或者我如何诊断它?


答案 1

您在问题中给出的堆栈跟踪包含问题是由将应用移动到 SD 卡引起的证据:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.rebm.asp/org.rebm.asp.MainActivity}: java.lang.ClassNotFoundException: org.rebm.asp.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/org.rebm.asp-1/pkg.apk]

如您所见,应用程序的路径包含 /mnt/asec,它是 Android 安全应用程序挂载点。

为了验证此问题是否由于 Apps2SD 而发生,您应该检查您拥有的所有堆栈跟踪是否在应用程序的路径中包含 /mnt/asec 目录。如果它们都是这样,则可以确定这是Apps2SD错误。

正如其他人所说,由于加载应用程序时SD卡不可用或SD卡上的损坏的asec分区,有时会出现此类问题。

您的应用程序是否以任何方式注册自己以在启动时启动,或者它是否是某种小部件,即使尚未安装SD卡,系统也会尝试加载?如果是这样,也许您应该关闭将应用程序移动到SD卡的选项。


答案 2

在所有已发布的游戏上都有相同的“罕见”问题。

可能是安装到 SD 卡,或将应用移动到 SD 卡,然后取出 SD 卡的问题。

另一种猜测是,该应用程序以某种方式被下载或安装了多次。

我无法重现这个,所以也无法确定它。


推荐