我有一个扩展应用程序类的类,有时在我的开发人员控制台中,我看到一个错误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的类,为什么我会收到此错误?
更新
即使在类名前面放.
之后,我仍然会在我的开发者页面中不时看到此错误。它似乎只发生在更新或新安装
答案 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_COMPLETED
或AppWidget
),如果用户已在外部安装了您的应用,则可以获取此代码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所依赖的类。