【问题标题】:NoClassDefFoundError after refactoring name重构名称后的 NoClassDefFoundError
【发布时间】:2013-04-25 13:25:01
【问题描述】:

我正在使用 Eclipse IDE 创建一个符合 Android 2.2 及更高版本的 Android 应用程序。我重构了我的一项主要活动的名称。我的基本结构是我有一个伪主页活动,其中这个应用程序内的其他“应用程序”(实际上是活动)具有指向它们各自活动的图标。我有一个类,它最初是应用程序中这些分支之一的头活动,称为 Activity.java。 Activity.java 最终只是指向 Activity_Home.java 并且不再做任何事情,所以我决定摆脱它。我删除了Activity.java,重新构建,然后将Activity_Home.java重构为Activity.java,重新构建。遇到 NoClassDefFoundError:

05-01 10:13:12.609: E/AndroidRuntime(15635): FATAL EXCEPTION: main
05-01 10:13:12.609: E/AndroidRuntime(15635): java.lang.NoClassDefFoundError: Activity.java

然后我将它重命名为 Activity_Home.java 在摆弄了一下可能会有所帮助的想法之后。在每次尝试启动之前彻底清理和重建。即使我检查了 CLASSPATH 并且 .class 文件的名称正确,但仍然出现错误。最终我读到有人,虽然他们不知道为什么会这样,但通过删除和重新制作文件来解决类似的问题。我做到了。

这似乎奏效了,但我不知道为什么,现在每个比 Activity_Home.java 更深的文件(例如,有一个名为 Activity_Camera.java 的活动)都有同样的问题。

我显然不想删除和重新制作所有的 .java 文件,即使这样可以解决问题,我仍然想知道为什么会发生这种情况,而不仅仅是如何修复它。

编辑 1:忘了提及我已经检查了清单文件是否存在不一致。这个问题现在发生在一个我什至没有重命名的类上。可能是自动重构重命名的一部分吗? (纯属猜测)

编辑 2:SherlockListActivity 的问题。说在我进行任何重构之后都找不到 APK。当我删除 SherlockListActivity 时,它解决了我的问题。

【问题讨论】:

  • 如果您使用的是 eclipse,请尝试清理项目。项目-->清洁。有时这个问题可以解决。
  • 尝试查看Markers 视图(选项卡),在那里您可以检查所有错误和警告。 Android 操作系统非常擅长检测运行时的潜在问题。

标签: java android eclipse actionbarsherlock noclassdeffounderror


【解决方案1】:

有些事情你必须检查。这些是:

  1. 从 menifest.xml 和 build.gradle 这两个文件中检查您的应用程序包名称。
  2. 使用完整路径检查清单活动名称。如果活动路径不正确,请更正它。
  3. 如果问题未解决,则执行 File--> Invalidate Cache / Restart 。希望问题能解决。

  4. 如果问题未解决,则删除构建文件夹并重新构建项目。现在你的问题就解决了。 谢谢:)

【讨论】:

    【解决方案2】:
    1. 您最初有一个文件 Activity.java,它什么也没做,只是指向 Activity_home.java。 从指向开始,我假设它打开了 Activity_home.java。每当您创建 Activity 时,它的条目都会添加到 AndroidManifest.xml 文件中。但是,当您删除一个活动时,我认为它不会从清单文件中删除。因此,将您的主文件更改为 MainActivity.java 并像这样更改清单中的相应条目。

    只需检查其他活动的名称和包在清单中是否正确,您就可以开始了。

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

    【讨论】:

      【解决方案3】:

      重构名称将更改 java 类中的 class 名称,但不会更改 manifest 文件中的名称。

      也尝试更改AndroidManifest.xml 中的类名,这将解决问题

      【讨论】:

        猜你喜欢
        • 2011-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多