9

我有一个扩展应用程序类的类,有时在我的开发者控制台中我看到一条错误消息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只是一个包含应用程序上下文以启动和取消警报的类,那么为什么我会收到此错误?

更新:

.即使在类名前面放置了一个,我仍然不时在我的开发人员页面中看到这个错误。它似乎只发生在更新或新安装时

4

7 回答 7

4

Probably because you're missing the dot in front of the class name (which helps to tell Dalvik that your class belongs to the package of your app)

.ActiveStore

But if in doubt, post both the whole Manifest file and your .java

于 2013-04-16T21:10:58.503 回答
1

在您的清单中,您应该具有以下内容:

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

或如前所述

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

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

于 2013-07-09T20:07:41.540 回答
0

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

于 2013-07-06T00:43:48.040 回答
0

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

于 2013-07-08T14:17:09.567 回答
0

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

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

于 2013-07-10T03:37:13.340 回答
0

如果您有需要在启动时运行的代码(例如 a BroadcastReceiveronBOOT_COMPLETED或 an AppWidget),如果用户已将您的应用程序安装在外部 SD 卡上,您可以得到它。此时可能尚未安装 SD 卡,因此无法加载您的 Application 类。您可以通过将安装模式设置为internalOnly或在BroadcastReceiver等待广播的情况下解决此问题ACTION_MEDIA_MOUNTED。请参阅android intent 以了解 SD 卡已准备就绪

于 2013-07-06T01:59:16.440 回答
0

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

.ActiveStore

会成为

 com.myapp.package.ActiveStore

您是否有任何机会使用 ProGuard 或任何类似的东西来混淆您的代码?

于 2013-07-06T02:05:16.170 回答