无法实例化活动ComponentInfo

3

我正在开发一个最低版本为Froyo,目标版本为Gingerbread的应用程序。因此,清单显示:

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="10"/>

我有一个模拟器和一台安装了Gingerbread的Nexus One手机,应用程序能够成功部署和安装。

但是当它启动时,会崩溃,并在日志中抛出以下错误:

09-18 06:35:11.240: ERROR/AndroidRuntime(382): FATAL EXCEPTION: main
09-18 06:35:11.240: ERROR/AndroidRuntime(382): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.my.package/com.my.package.Dashboard}: java.lang.ClassNotFoundException: com.my.package.Dashboard in loader dalvik.system.PathClassLoader[/data/app/com.my.package-2.apk]
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at android.os.Looper.loop(Looper.java:130)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at android.app.ActivityThread.main(ActivityThread.java:3683)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at java.lang.reflect.Method.invokeNative(Native Method)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at java.lang.reflect.Method.invoke(Method.java:507)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at dalvik.system.NativeStart.main(Native Method)
09-18 06:35:11.240: ERROR/AndroidRuntime(382): Caused by: java.lang.ClassNotFoundException: com.my.package.Dashboard in loader dalvik.system.PathClassLoader[/data/app/com.my.package-2.apk]
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
09-18 06:35:11.240: ERROR/AndroidRuntime(382):     ... 11 more

是的,“Dashboard”活动在清单中声明:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.my.package"
      android:versionCode="1"
      android:versionName="1.0"
      android:installLocation="auto">

      <activity android:name=".Dashboard"
              android:label="@string/app_name"
              android:screenOrientation="portrait">

            <intent-filter>
                  <action android:name="android.intent.action.MAIN"/>
                  <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
      </activity>

      ...

这个问题可能与什么有关?这让我感到非常烦恼。


这两行代码能理解吗:com.my.package 和 /data/app/com.my.package-2.apk? - user370305
请检查您的DDMS文件浏览器中data/app/<包名>是否与您在类构建中使用的相同。 - user370305
由于我的设备已经取得了root权限,所以我无法浏览。但是,我可以从我在手机上安装的文件浏览器中看到/data文件夹是空的。 - frapontillo
12个回答

8
我也在Eclipse 4.2下开发时遇到了这个问题。我的主要活动被AndroidManifest.xml文件引用,包和名称正确,但仍无法加载。经过一番调试和注释掉一些东西,我发现我的主要活动实现的一个接口是问题的源头。这个接口在一个单独的项目中定义,但我没有在Java Build Path中引用那个项目。所以,当我构建东西时,它们会正确地构建,但我立即在启动时遇到强制关闭,并出现与此问题相同的错误。
为了纠正这个问题,我右键单击Android项目,选择Java Build Path,在Projects选项卡中添加了我的“公共代码”项目,然后在Order and Export选项卡上勾选了同一项目的复选框。之后,一切都正常工作了。

4

我通过恢复项目属性轻松解决了这个问题:

  • 右键单击您的项目
  • 选择"Android工具"
  • 点击"修复项目属性"

然后您的依赖项将被恢复为新的,一切都会好起来!


3
我的解决方案在项目-->属性-->Java构建路径-->排序和导出中,您应该勾选使用的条目。但是,如果您勾选了Android.jar,则会显示“转换为Dalvik格式失败,错误1”。
另外,除了Android.x.x之外删除所有库,然后通过项目-->清理清理您的项目,然后将库添加回去(不要忘记按顺序勾选和导出),可能会解决“转换为Dalvik格式失败,错误1”的问题。
还有一个需要检查的地方是属性-->Java编译器-->JDK符合性。

我尝试了在项目 --> 属性 --> Java Build Path --> Libraries 中移除除 Android.X.X 之外的所有库,这对我起到了作用。 - Gene

2
您可以通过在清单文件中更正活动的类名来修复此错误。

2

我通过在Java Build path的Order and Export中勾选Android Private Libraries和Android dependencies解决了我的问题。


2

值得一提的是,导致这种情况的另一个简单原因可能在启动项目时被忽视,即您希望启动的活动可能没有扩展Activity或是一个空类等。


谢谢提及这个。我自己已经想出来了,但是花了一些时间。这是对讨论的很好的补充。 - akauppi

2

对我来说,这是在将phonegap从1.4升级到1.8.1时发生的事情。 我不得不更新根项目上的.project文件。 我创建了一个新项目并将新文件与旧文件进行了比较。


0
最后我通过使两个android-support-v4.jar相同来解决它...只需将任何一个android-support-v4.jar复制到与您的项目相关的任何项目中并替换它们即可。
使用以下内容添加到您的Android清单。
   <uses-library android:name="com.google.android.maps" />

0

今天我遇到了同样的问题,问题出在主类的命名上。它叫做IdleActivity,当我把它改成IdleDnaActivity时,应用程序成功启动了。


0

我曾经遇到同样的问题,但我已经正确定义了所有内容。我从我的SVN中取出同一项目的另一个副本,然后在第二个项目中出现了这个错误。 重启Eclipse:这将刷新Eclipse的内存。这对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接