类扩展Application抛出ClassNotFoundException

时间:2013-04-16 21:07:00

标签: android classcastexception

我有一个扩展应用程序类的类,有时在我的开发人员控制台中,我看到一个错误ClassNotFoundException

java.lang.RuntimeException: Unable to instantiate application ecm2.android.ActiveStore: java.lang.ClassNotFoundException: ecm2.android.ActiveStore
at android.app.LoadedApk.makeApplication(LoadedApk.java:501)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4221)
at android.app.ActivityThread.access$1400(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4918)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: ecm2.android.ActiveStore
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.Instrumentation.newApplication(Instrumentation.java:982)
at android.app.LoadedApk.makeApplication(LoadedApk.java:496)
... 11 more

这是我在清单

中声明的方式
<application
    android:name=".ActiveStore"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar" >

ActiveStore只是一个包含应用程序上下文来启动和取消alrams的类,为什么我会收到此错误?

更新

即使在类名前面放.之后,我仍然会在我的开发者页面中不时看到此错误。它似乎只发生在更新或新安装

7 个答案:

答案 0 :(得分:4)

可能是因为你错过了班级名称前面的点(这有助于告诉Dalvik你的班级属于你的应用程序包)

.ActiveStore

但如果有疑问,请发布整个Manifest文件和.java

答案 1 :(得分:1)

在你的清单中你应该有类似的东西:

package="path.to.project.root"
...
<application 
    android:name=".MyApplication"

或已经提到的

<application
    android:name="path.to.project.root.MyApplication"

还要确保MyApplication类的构造函数是公共的。

答案 2 :(得分:0)

我也经常看到这个问题并且没有解释。 我见过有人说它会在崩溃后发生。据推测,崩溃后,ClassLoader可能处于“坏”状态,无法加载类。 基本上这意味着先前的错误是这个问题的真正根源。 对不起,如果您找到更准确的解释,请更新。

答案 3 :(得分:0)

如果您有需要在启动时运行的代码(例如BroadcastReceiver上的BOOT_COMPLETEDAppWidget),如果用户已在外部安装了您的应用,则可以获取此代码SD卡。此时SD卡可能尚未安装,因此无法加载您的Application类。您可以通过将安装模式设置为internalOnly或在BroadcastReceiver等待广播ACTION_MEDIA_MOUNTED的情况下解决此问题。见android intent for sdcard ready

答案 4 :(得分:0)

您是否尝试过使用完全限定的软件包名称来引用清单中的类?

.ActiveStore

会变成

 com.myapp.package.ActiveStore

您是否有可能使用ProGuard或类似的东西来混淆代码?

答案 5 :(得分:0)

在我扩展或实现某个特定api级别中没有的类/接口之前,我已经经历过这种情况。 它没有以适当的方式说明这一点。

答案 6 :(得分:0)

当有问题的课程所依赖的其他班级存在验证错误时,我已经看到了这一点。向后滚动并查看完整logcat输出中是否存在任何验证错误。

如果ecm2.android.ActiveStore依赖于验证失败的类,那么你会得到一个找不到ecm2.android.ActiveStore的类,而不是ecm2.android.ActiveStore所依赖的类。