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

8

大家好,这对我来说毫无意义,我不明白为什么我的应用程序会出现这个错误。我已经在Android清单XML文件中注册了活动类。

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mobile.batteryhelper/com.mobile.batteryhelper.Battery}:
java.lang.ClassNotFoundException: Caused by: java.lang.ClassNotFoundException: com.mobile.batteryhelper.Battery in loader dalvik.system.PathClassLoader[/mnt/asec/com.mobile.batteryhelper-1/pkg.apk]

这里是androidmanifest.xml文件。是的,.Battery类也继承了Activity。

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Battery"
              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>

<application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Battery" 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> - user766380
如果某个答案解决了您的问题,请将其标记为已接受。 - Edu
对我来说,解决方案是这个:https://dev59.com/nGIk5IYBdhLWcg3wKLWd#21290422 - Aleks
12个回答

12

您尝试过清理工作区吗?前往“项目”->“清理”,选择您的项目。由于某种原因,Eclipse不会自动构建我的清单文件。


2
谢谢,我猜只需进入“项目>清理”就可以解决问题了!Eclipse 有时不自动构建清单的原因是什么? - user766380
我不知道。我猜这只是其中一个小问题。将来我可能会提交一个错误报告。 - Stefan Bossbaly

6

您将第三方库放入库文件夹并引用它们。请前往属性/Java构建路径/库/添加外部JAR文件。

在属性/Java构建路径/顺序和导出中检查JAR文件


2

你是否尝试在OnCreate方法被调用之前初始化你的类中的任何内容?
如果你初始化了静态变量(例如),它可能会给出这个(非常晦涩)的错误。


2
实际上,我在这里找到了解决此问题的答案: java.lang.ClassNotFoundException on working app 您没有为Application标签提供名称,只有Activity。因此,如果您的问题与我的相同,您应该能够删除以下内容,然后一切都会正常工作:
android:name=".Battery"

2

我曾经遇到过同样的问题。直到我找到了解决方法,这个错误一直让人很困惑。请前往“属性”>“Java构建路径”>“顺序和导出”,将你的android-support-v4.jar文件移动到最上面。这对我来说非常有效。你也可以试试。


1
我遇到了这个问题,并通过将放置在“lib”文件夹中的所有.jar文件(外部库文件)移动到“libs”文件夹中来解决它。不知何故,Eclipse只知道放置在libs文件夹中的.jar文件。

1

在 Battery 类上右键单击 > BuildPath > Exclude 然后 在 Battery 类上右键单击 > BuildPath > 再次包含您的类


1

要么你的清单包不是com.mobile.batteryhelper,要么你的代码中没有com.mobile.batteryhelper.Battery类。可能你没有为类提供公共构造函数,或者类没有声明为public(虽然我认为在这种情况下你会得到稍微不同的错误信息)。

确保你没有使用ProGuard来剥离你的代码。确保该类是public的,在正确的包(与你的清单包相同),并且没有构造函数。另外,查看整个错误堆栈跟踪以查看其中是否有有用的内容也很有帮助。


0

仔细查看崩溃日志:

loader dalvik.system.PathClassLoader[/mnt/asec/com.mobile.batteryhelper-1/pkg.apk

这里的mnt表示外部SD卡。

通常情况下,当在AndroidManifest.xml中设置android:installLocation="auto"时,如果设备没有足够的手机内存,则应用程序将存储在SD卡上。一旦您从设备中移除SD卡,应用程序就无法找到APK位置,然后应用程序会崩溃。

导致崩溃的步骤:

可以在HTC Sensation 2.3.4版本中复制该问题。

  • 通过转到“设置”-->“管理应用程序”-->点击应用程序-->“移动到SD卡”将应用程序移动到SD卡
  • 从设备中取出SD卡并打开应用程序

如果您尝试使用三星设备,则不会崩溃,但是如果您移除SD卡,则不会显示应用程序。这种行为仅适用于某些设备。


0

对我有效的方法是删除“build”文件夹内部最里层的文件,即生成、中间文件、输出和临时文件夹内的文件。


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