重构名称后的NoClassDefFoundError

时间:2013-05-01 14:26:22

标签: java android eclipse actionbarsherlock noclassdeffounderror

我正在使用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:忘记提及我已经检查了Manifest文件的不一致。问题现在发生在我甚至没有重命名的类上。可以成为自动重构重命名的一部分吗? (纯粹猜测)

编辑2:SherlockListActivity问题。说无论我做了什么重构,它都找不到APK。当我删除SherlockListActivity时,它解决了我的问题。

3 个答案:

答案 0 :(得分:0)

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

尝试更改AndroidManifest.xml中的班级名称,这样可以解决问题

答案 1 :(得分:0)

  1. 你最初有一个文件Activity.java,除了指向Activity_home.java之外什么也没做。 从指向,我假设它打开Activity_home.java。无论何时创建活动,其条目都会添加到AndroidManifest.xml文件中。但是,当您删除活动时,我认为它不会从清单文件中删除。因此,将主文件更改为MainActivity.java,并在清单中更改其相应的条目,如下所示。
  2. 只需检查其他活动,他们的名字和包裹在清单中是否正确,您就可以去了。

     <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> 
    

答案 2 :(得分:0)

你需要检查的一些事情。那些是:

  1. 从menifest.xml和build.gradle两个文件中检查应用的包名称。
  2. 使用完整路径检查清单活动名称。如果活动路径不正确,请更正。
  3. 如果问题没有解决,请执行文件 - &gt;无效缓存/重启。希望问题将解决。

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