Android SDK r17破坏了工作项目

Android SDK r17破坏了工作项目,android,Android,我已经将我的android sdk包从r16更新到r17。我也更新了Eclipse ADT插件。 我的项目在r16(android sdk r16和Eclipse ADT插件v16)上运行得非常好,但现在应用程序无法启动: 类加载器找不到MainActivity。MainActivity是启动的第一个活动(它在AndroidManifest中正确声明) 03-22 15:07:28.984:E/AndroidRuntime(22106):由以下原因引起:java.lang.ClassNotFou

我已经将我的android sdk包从r16更新到r17。我也更新了Eclipse ADT插件。
我的项目在r16(android sdk r16和Eclipse ADT插件v16)上运行得非常好,但现在应用程序无法启动: 类加载器找不到MainActivity。MainActivity是启动的第一个活动(它在AndroidManifest中正确声明)

03-22 15:07:28.984:E/AndroidRuntime(22106):由以下原因引起:java.lang.ClassNotFoundException:my…..main活动 03-22 15:07:28.984:E/AndroidRuntime(22106):在dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 03-22 15:07:28.984:E/AndroidRuntime(22106):在java.lang.ClassLoader.loadClass(ClassLoader.java:501) 03-22 15:07:28.984:E/AndroidRuntime(22106):在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平台工具(并重新安装)
-删除整个android文件夹(/opt/android sdk)并重新安装软件包,下载目标平台
-删除~/.android
-删除~/.eclipse
-重新安装Eclipse ADT插件
-重新创建虚拟设备
-创建新项目(新项目有效)
-解压缩.apk文件并使用dextump查看编译的类:apk文件包含MainActivity
-我阅读了Android SDK发行说明中的相关内容,但没有找到任何内容
-当然,重建项目(clean+build,我甚至手动删除了bin文件夹)

唯一真正有效的方法是打开我的笔记本(仍然是android sdk r16)。
所以我做错了什么?可能是一些简单的事情


谢谢

正如报告和其他地方所述,您需要确保您正在使用的任何第三方JAR在您的项目和任何相关库项目中都在
libs/
中。尝试一下,看看是否有帮助。

有时候,除了关闭/重新打开project之外,eclipse重新启动对于使一切按计划和预期工作是必要的。特别是如果您更新了任何组件。当然,正如Commonware所提到的,库文件夹调整是强制性的。

这个话题也正在讨论中。对我来说,神奇的秘诀是:除了重新引导包含的库,我还必须将项目属性中的目标SDK从4.0.3更改为4.0.3,然后再更改。这就解决了问题。

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


将其更改为“project.libraries.jars”对我的目标很有效,但您可能应该检查以前的sdk/tools/ant/build.xml与新的sdk/tools/ant/build.xml之间的差异。在升级SDK工具之前,总是值得复制一份,因为Ant构建经常会在升级过程中被破坏。

如果您不使用Maven,这里是带有图片的详细指南,如Commonware中提到的

但是,如果您使用的是Maven依赖项,而该依赖项不包含在库项目m2e中,那么android connector仍然不知道如何处理此问题,因此,如果您有Maven的android项目,请不要更新到ADT 17


新的0.4.1版本的M2E Android连接器(M2E Android)已经发布,Maven项目的一个bug已经修复

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

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

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

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

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

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

对“清理+构建”步骤的小补充:关闭和重新打开项目有时会有所帮助 03-22 15:07:28.984: E/AndroidRuntime(22106): Caused by: 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): at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 03-22 15:07:28.984: E/AndroidRuntime(22106): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)