无法实例化活动 ComponentInfo

Posted

技术标签:

【中文标题】无法实例化活动 ComponentInfo【英文标题】:Unable to instantiate activity ComponentInfo 【发布时间】:2011-11-19 13:54:52 【问题描述】:

我正在为 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 ComponentInfocom.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

是的,在 Manifest 中声明了“仪表板”活动:

<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? 只需检查您的 ddms 文件资源管理器是否在 data/app/ 与您在类构建中使用的相同。 由于我的设备已植根,我无法浏览。但是/data文件夹是空的,从我手机上安装的文件浏览器可以看到。 【参考方案1】:

我在 Eclipse 4.2 下开发时也遇到了这个问题。 AndroidManifest.xml 文件引用了我的主要活动,包括正确的包和名称,但仍然无法加载。经过一些调试和注释后,我发现我的主要活动正在实现的接口是问题的根源。这个接口是在一个单独的项目中定义的,但是我没有在Java Build Path中引用那个项目。所以,当我构建东西时,它们会正确构建,但是当我启动时我会立即遇到强制关闭,与这个问题相同的错误。

为了纠正这个问题,我右键单击 Android 项目,选择 Java Build Path,将我的“通用代码”项目添加到 Projects 选项卡,然后检查订购和导出标签上相同项目的框。之后,一切正常。

【讨论】:

【参考方案2】:

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

右键单击您的项目 Android 工具 修复项目属性

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

【讨论】:

【参考方案3】:

我的解决方案是在 Project --> Properties --> Java Build Path --> Order and Export 中,你应该勾选你使用的条目。但是我也遇到过,如果你勾选 Android.jar,它会说“转换为 Dalvik 格式失败,错误 1”

同时删除除 Android.xx 之外的所有库,然后通过 Project 清理您的项目 --> 清理然后将库添加回来(不要忘记按顺序打勾并导出)可能会解决“转换为 Dalvik 格式因错误 1" 而失败。

您还需要检查一个地方是 Properties --> Java Compiler --> JDK Compliance。

【讨论】:

删除项目中的所有库 --> 属性 --> Java 构建路径 --> 除 Android.X.X 之外的库对我有用。【参考方案4】:

对我来说,就像在 phonegap 升级期间一样(从 1.4 到 1.8.1 )。 我必须更新根项目上的 .project 文件。 我创建了一个新项目并将新文件与以前的文件进行比较。

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

我通过检查 Java 构建路径中 Order 和 Export 下的 Android Private Libraries 和 Android 依赖项解决了我的问题

【讨论】:

【参考方案7】:

为了记录,另一个可能导致此问题的简单原因,可能在启动项目时被忽略,是您希望启动的活动可能没有扩展 Activity 或为空类等。

【讨论】:

感谢您提及这一点。自己想通了,但是……花了一些时间。很好的补充讨论。【参考方案8】:

事实证明,项目文件缺少正确制作 apk 所需的一些构建器。这就是它无法找到 Dashboard 类的原因。

解决方案是创建一个空的 Android 项目,并将自动生成的 .project 和 .properties 文件与您损坏的项目中的文件进行比较。

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

最后我通过使两个 android-support-v4.jar 相同来解决它..只需复制与您的项目相关的任何项目中的任何 android-support-v4.jar 并替换它们..

使用将其添加到您的 android 清单

   <uses-library android:name="com.google.android.maps" />

【讨论】:

【参考方案11】:

我发现this post 有类似的问题和许多不同的可能解决方案。但是,就我而言,问题出在我的 Android 项目设置中。不知何故,我的项目的 Java 构建路径未链接到源文件夹。这就是为什么我的清单文件无法找到活动类的原因。我通过链接 src 文件夹解决了这个问题。为此,请右键单击项目“属性”->“Java 构建路径”。然后选择选项卡“来源”。检查您的 src 文件夹是否在此处列出。如果没有,请单击“添加文件夹...”,然后导航到项目的 src 文件夹。

【讨论】:

【参考方案12】:

今天我遇到了同样的问题,是主类命名的问题。它是 IdleActivity,当我通过设置 IdleDnaActivity 对其进行更改后,应用程序已成功启动。

【讨论】:

以上是关于无法实例化活动 ComponentInfo的主要内容,如果未能解决你的问题,请参考以下文章

无法实例化活动组件信息错误

“无法实例化活动”错误

无法实例化活动 ComponentInfo

java.lang.RuntimeException:无法实例化活动 ComponentInfo:java.lang.ClassNotFoundException

java - Android Studio - 无法实例化活动

无法实例化活动组件信息 - java.lang.ClassNotFoundException