我的一个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
从在线搜索,此错误通常表示清单文件和正在使用的软件包名称有问题。但是,我无法在自己的设备或模拟器上重现此错误。我只通过市场工具知道这个错误。我可以得出的结论是,这是一个罕见的错误,因为我知道很多人都在使用该应用程序,而且没有任何评论表明它崩溃了。
有谁知道问题是什么或我如何诊断它?
答案 0 :(得分:15)
您在问题中提供的堆栈跟踪包含问题是由于将应用程序移动到SD卡所致:
java.lang.RuntimeException:无法执行 实例化活动 ComponentInfo {org.rebm.asp / org.rebm.asp.MainActivity}: 抛出java.lang.ClassNotFoundException: 加载器中的org.rebm.asp.MainActivity dalvik.system.PathClassLoader [/mnt/asec/org.rebm.asp-1/pkg.apk]
如您所见,应用程序的路径包含 / mnt / asec ,这是Android安全应用程序挂载点。
为了验证由于Apps2SD是否发生此问题,您应该检查您的所有堆栈跟踪是否包含应用程序路径中的 / mnt / asec 目录。如果它们都是如此,您可以确定它是Apps2SD错误。
正如其他人所说,由于SD卡在加载应用程序时不可用或SD卡上的 asec 分区损坏,有时会出现这类问题。
您的应用程序是否以任何方式注册自己以在启动时启动,或者它是某种小部件,即使尚未安装SD卡,系统也会尝试加载它?如果是这样,也许您应该关闭将应用程序移动到SD卡的选项。
答案 1 :(得分:2)
在所有已发布的游戏中都有相同的“罕见”问题。
安装到SD卡或将应用程序移动到SD卡,然后移除SD卡可能会出现问题。
其他猜测是应用程序以某种方式多次下载或安装。
我无法重现这一点,所以也无法将其解决。
答案 2 :(得分:2)
有很多建议可以帮助您调试应用程序。希望他们能解决你的问题。同时发布您的Android Manifest XML文件和MainActivity的onCreate Method片段,以便我们也可以帮助您调试它并缩小可能性......
<强>建议:强>
1)在您的Android XML中,检查您的最小Sdk版本( android:minSdkVersion =“3”)是否为3?如果它改为7+。在处理罕见问题时,我发现这个技巧很有帮助。
2)在您的Android XML中,检查您是否在那里注册了您的活动。如果没有请注册,每个新活动必须在使用前注册。如果您的活动已注册,请重新检查您提供给它的路径也是正确的。
3)清理项目并重新构建,以便更新R.java并且不使用任何缓存的文件。
4)迁移您的项目,制作一个新项目并将所有文件复制到那里。它也解决了罕见的问题。
5)据一位用户说:
我在Opera Mini中遇到了同样的错误(无法实例化活动...)。 Opera Mini在SD卡上(在应用程序设置中移动到SD卡)。这个错误似乎与我昨天交换SD卡的事实有关。设备关闭,我将旧卡上的所有数据复制到新卡(使用cp -a),然后插入新卡并再次启动设备。一切似乎按预期工作,但我现在看到SD卡上的所有应用程序都崩溃了同样的错误。
Device: HTC Desire HD (Android 2.2)
Old SDHC card: SanDisk 8GB class 4
New SDHC card: Kingston 16GB class 4
所以我会说这是一个Android错误,而不是应用程序开发人员可以解决的问题。
另见:http://android-developers.blogspot.com/2010/07/apps-on-sd-card-details.html
It has always been the case that when you swap SD cards on an Android device, if you physically copy the contents of the old card to the new one, the system will use the data on the new card as if nothing had changed. This is also true of apps which have been installed on the SD card."
这似乎不正确。
希望其中一个解决您的问题。
答案 3 :(得分:1)
我有这个问题,但没有活动。修复了一个解决方法:
ClassLoader myClassLoader = TroubleClass.class.getClassLoader();
Thread.currentThread().setContextClassLoader(myClassLoader);
答案 4 :(得分:1)
答案 5 :(得分:0)
当您从eclipse 安装时,应用可能会在您的eclipse和移动上正常工作但在市场上可能会崩溃(发生在我身上),如果你遇到同样的情况,你需要做 2件事,你就会摆脱这种情况。