【问题标题】:Android-SDK r17 ruins working projectsAndroid-SDK r17 破坏了工作项目
【发布时间】:2012-05-12 03:54:00
【问题描述】:

我已将我的 android-sdk-package 从 r16 更新到 r17。我也更新了 Eclipse ADT 插件。
我的项目在 r16(android-sdk r16 和 Eclipse ADT Plugin v16)上运行良好,但现在应用程序无法启动: Classloader 找不到 MainActivity。 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): 在 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-platform-tools(并重新安装)
- 删除整个android文件夹(/opt/android-sdk)并重新安装包,下载目标平台
- 删除 ~/.android
- 删除 ~/.eclipse
- 重新安装 Eclipse ADT 插件
- 重新创建虚拟设备
- 创建一个新项目(新项目有效)
- 解压 .apk 文件并使用 dexdump 查看已编译的类:apk 文件包含 MainActivity
- 我阅读了 Android-SDK-Release-Notes 以了解相关内容,但没有找到任何内容
- 当然,重建项目(clean + build,我什至手动删除了 bin 文件夹)

唯一真正起作用的是打开我的笔记本(仍然是 android-sdk r16)。
所以......我做错了什么?这可能很简单......

谢谢!

【问题讨论】:

  • 对“clean + build”步骤的小补充:关闭并重新打开项目有时有助于强制 Eclipse/ADT 插件重新生成所有内容。

标签: android


【解决方案1】:

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

【讨论】:

  • 非常感谢。我知道这很愚蠢……谷歌应该在他们的主页上指出这一点。我什至没有考虑过第三方 JAR。
  • 感谢您提供此信息。因此,即使对于一般的实验性 Eclipse,调试只为模拟器构建,每个需要特定 3rd 方 jar 的项目都需要自己的副本而不是引用中心位置?这对我来说似乎是一个倒退。
  • @NickT:如果您使用的操作系统支持符号链接,那么这些可能会起作用。
  • 我刚刚想过。我的 Linux 机器对于 Android 工作来说功能太弱了,所以我被 Windows 困住了。我想知道最近出现的 ${external.libs.absolute.dir} 是否可以解决他们忘记记录的问题。这对我来说违背了规律,这是一种不好的做法,纯粹而简单。
  • @NickT:“我的 Linux 机器无法运行 Android,所以我只能使用 Windows”——如果我知道你的地址,我会寄给你一张慰问卡。 :-) “我想知道最近出现的 ${external.libs.absolute.dir} 是否可以解决他们忘记记录的问题”——我非常了解 Eclipse 构建过程的工作原理,所以我没有头绪,抱歉。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    有时除了关闭/重新打开项目 eclipse 重启是必要的,以使一切按计划和预期工作。特别是如果您更新了任何组件。当然,正如 CommonsWare 提到的那样,库文件夹调整是强制性的。

    【讨论】:

      【解决方案4】:

      android-developers forum 也在讨论这个话题。对我有用的秘方是:除了重新归位包含的库之外,我还必须将 Project Properties 中的目标 SDK 从 4.0.3 更改回来,然后再更改回来。这样就解决了。

      【讨论】:

        【解决方案5】:

        如果您不使用 Maven,这里有带图片的详细指南,就像 CommonsWare 中提到的那样。

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

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

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

        【讨论】:

          【解决方案6】:

          我在使用 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 工具在内的几个因素发生了变化,诊断各种原因是一项挑战。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-04-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-20
            • 2021-03-05
            相关资源
            最近更新 更多