Android-SDK r17破坏了工作项目

我已将我的android-sdk-package从r16更新为r17。 我也更新了Eclipse ADT-Plugin。
我的项目与r16(android-sdk r16和Eclipse ADT Plugin v16)完美配合,但现在应用程序无法启动:Classloader无法findMainActivity。 MainActivity是第一个启动的活动(它在AndroidManifest中正确声明)。

 03-22 15:07:28.984:E / AndroidRuntime(22106):引起:java.lang.ClassNotFoundException:my ..... MainActivity
 03-22 15:07:28.984:E / AndroidRuntime(22106):at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
 03-22 15:07:28.984:E / AndroidRuntime(22106):at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
 03-22 15:07:28.984:E / AndroidRuntime(22106):at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
 03-22 15:07:28.984:E / AndroidRuntime(22106):在android.app.Instrumentation.newActivity(Instrumentation.java:1023)
 03-22 15:07:28.984:E / AndroidRuntime(22106):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871) 

包名称是100%正确的。 我甚至检查了我的项目的标记版本(我已经发布了项目,我总是标记我的版本)并尝试了它:相同的结果。
我已经尝试过(我使用Arch Linux):
– 删除android-sdk + android-sdk-platform-tools(并重新安装)
– 删除整个android-folder(/ opt / android-sdk)并重新安装包,下载目标平台
– 删除〜/ .android
– 删除〜/ .eclipse
– 重新安装Eclipse ADT-Plugin
– 重新创建虚拟设备
– 创建一个新项目(新项目有效)
– 解压缩.apk文件并使用dexdump查看已编译的类:apk文件包含MainActivity
– 我阅读了Android-SDK-Release-Notes的相关内容,但我没有find任何内容
– 当然,重建项目(清理+构建,我甚至手动删除了bin文件夹)

唯一真正有用的是打开笔记本电脑(仍然是android-sdk r16)。
那么……我做错了什么? 这可能很简单……

谢谢!

正如此处和其他地方所报告的那样,您需要确保您使用的任何第三方JAR都存在于libs/ ,无论是在项目中还是在任何依赖库项目中。 试试看,看看它是否有帮助。

对于那些使用带有自定义build.xml的直接Ant构建的开发人员,这些自定义build.xml具有覆盖引用“jar.libs.ref”的目标,您应该注意到它已被替换,因此您的构建将失败。

将其更改为“project.libraries.jars”适用于我的目标,但您应该检查以前的sdk / tools / ant / build.xml和新的目标之间的差异。 在升级SDK工具之前,总是值得复制一下这一点,因为Ant构建经常会被升级过程破坏。

有时候在关闭/重新打开项目时,必须重新启动eclipse才能使一切按计划和预期运行。 特别是如果您更新任何组件。 但当然,CommonsWare提到库文件夹调整是强制性的。

这个主题也在android-developers论坛上讨论 。 对我有用的神奇配方是这样的:除了重新归巢包含库之外,我还必须将项目属性中的目标SDK从4.0.3改回,然后再返回。 修好了。

如果您不使用Maven,请参阅CommonsWare中提供的图片详细指南。

http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17

但是如果你使用Maven依赖项不包含在库项目m2e-android连接器仍然不知道如何处理这个,所以如果你有Android项目与Maven不更新到ADT 17。

新的0.4.1版本的Android Connector for M2E(m2e-android)已经发布,修复了Maven项目的错误。 https://github.com/rgladwell/m2e-android/issues/72

我在使用ADT 18时遇到了同样的错误。有几个原因,包括必须将我的jar文件从lib移动到libs文件夹。 巧合的是我使用的是安装了JDK 7的新工作站。 我花了几个小时才发现dex构建步骤拒绝了我单独构建的一个jar文件中的已编译类文件,因为类签名是不可接受的。 dex构建步骤报告的错误是“处理故障:坏类文件魔法(cafebabe)或版本(0033.0000)”

我的jar文件由我使用ant构建的纯Java代码组成。 简而言之,我在安装Java 6的JDK后,终于设法让一切工作正常,将JDK 6 bin文件夹的路径添加为路径语句中的第一项,然后重建jar文件。 然后我能够在我的Android项目中使用jar文件。 dex构建步骤没有拒绝jar文件中的类,因此我的应用程序在设备上运行而不是使用ClassNotFoundException失败。

我发现了一些有用的提示: – 使用-v命令行选项运行ant并仔细检查输出。 这就是我所知道java6编译器在我所有更改结束时的使用方式。 同样,当我使用ant构建Android应用程序时,dex阶段有足够的细节来告诉我它处理了哪些jar文件等。

类似地,在Eclipse中,我为Android构建输出启用了详细的日志记录级别。 首选项> Android>构建>构建输出>详细

adb logcat输出实际上在加载应用程序时报告缺少的类文件。 如果您在Eclipse中使用LogCat视图,相关的行将以红色文本显示,并且一旦您知道它们存在就很容易被发现。

我希望这能帮助处于类似困境的其他人 – 我发现自己 – 在那里我创建了自己的纯Java jar文件。 有几个因素发生了变化,包括Java SDK版本和ADT工具,诊断各种原因是一个挑战。