无法实例化服务:ClassNotFoundException

时间:2012-05-13 03:03:44

标签: java android eclipse

我已经阅读了相同类别的一百个问题,但没有一个有帮助。我有一个工作的应用程序,然后重构了包名称,并编译并运行。一周后,我回来研究它并在启动时获得ClassNotFoundException。更糟糕的是,如果我从repo中检出先前的提交(在重构之前,其中一切都有效),该项目在启动时会引发相同的错误(除了使用不同的包名称)。

我已经尝试了我能想到的一切,但我不知道如何追踪问题。我做了很明显的事情:清理项目,完全删除它并重新添加它,在新设备上运行......

我不确定哪些代码对调试有帮助,但这是我的清单和logcat输出中的声明。如果其他东西可能有用,请告诉我。我真的迷失在这里。

崩溃:

E/AndroidRuntime(  515): FATAL EXCEPTION: main
E/AndroidRuntime(  515): java.lang.RuntimeException: Unable to instantiate service
co.mosic.mosic.CommunicationService: java.lang.ClassNotFoundException: co.mosic.mosic.CommunicationService
E/AndroidRuntime(  515):    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2237)
E/AndroidRuntime(  515):    at android.app.ActivityThread.access$1600(ActivityThread.java:123)
E/AndroidRuntime(  515):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
E/AndroidRuntime(  515):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  515):    at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(  515):    at android.app.ActivityThread.main(ActivityThread.java:4424)
E/AndroidRuntime(  515):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  515):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(  515):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime(  515):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime(  515):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  515): Caused by: java.lang.ClassNotFoundException: co.mosic.mosic.CommunicationService
E/AndroidRuntime(  515):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
E/AndroidRuntime(  515):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
E/AndroidRuntime(  515):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
E/AndroidRuntime(  515):    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2234)
E/AndroidRuntime(  515):    ... 10 more

清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="co.mosic.mosic"
    android:versionCode="1"
    android:versionName="1.0" >

...

<service 
    android:name=".CommunicationService" >
    <intent-filter>
        <action android:name="co.mosic.mosic.MStcServiceInet" /> 
    </intent-filter>
</service>

2 个答案:

答案 0 :(得分:4)

由于最近更新了ADT插件,库文件夹必须更改为“libs”而不是lib。我最近几次遇到它。

答案 1 :(得分:0)

在我的头脑中,导致此类错误的最常见原因是缺少proguard.flags文件。

Proguard将运行您的代码并对所有名称进行模糊处理。如果您没有为服务类指定-keep标志,则其名称也将更改,因此操作系统将无法找到它。

所以我的猜测是你忘记提交正确的proguard配置文件,这可以解释为什么它曾经工作但现在没有。