升级到 ADT 22 后,库不再添加到 APK

Posted

技术标签:

【中文标题】升级到 ADT 22 后,库不再添加到 APK【英文标题】:Libraries do not get added to APK anymore after upgrade to ADT 22 【发布时间】:2013-05-11 21:49:10 【问题描述】:

我有一个相当大的 android 应用程序项目,它引用了几个库项目。一切都很好,直到我将 eclipse ADT 插件升级到最新版本(v22)。当然,我也升级了 SDK。我在 Eclipse 中没有看到任何编译错误,但是当我在手机上运行该项目时,我得到了 NoClassDefFoundError。

java.lang.NoClassDefFoundError: org.acra.ACRA
....

arca 库包含在一个引用的库项目中(在 libs 文件夹中),我可以在包资源管理器的“Android Private Libraries”中看到它,正如我所说,没有编译错误。该项目在其他所有未升级 ADT 的计算机上运行良好。

我已经尝试了很多东西,包括但不限于:

重新安装安卓SDK 下载新的 ADT 包 删除我所有的代码,然后从 git 中重新获取 将相关库复制到应用项目中 注释掉使用这个库的代码 - 我只是得到下一个库的相同错误

都没有成功,所以我在这里真的很绝望。

如果有人能给我一些关于如何解决这个问题的提示,我会非常高兴。

【问题讨论】:

【参考方案1】:

引用his adt-dev post 的波士顿街道:

升级时,新的“Android Private”的“Order and Export” 并不总是检查库。 android-support-v4.jar 现在在 这个“Android 私人图书馆”部分。

要解决此问题,请转到“订购和导出”并选中“Android 私有” 图书馆”。然后刷新/清理/重建。

为库项目完成此“修复”后,您可能需要关闭 并重新打开任何依赖的项目,因为他们可能看不到这个“修复” 立即地。

试一试,如果幸运的话,它会解决你的问题。

【讨论】:

CommonsWare 始终是第一批先驱之一,非常感谢! :) 每一个新的 ADT 版本都有一个新的惊喜 ;) 希望新的构建系统会更好。谢谢CommonsWare 只有我一个人,还是让每个 [使用 Eclipse 和库的] 开发人员进入他们所有的库项目并将“Android 私有库”标记为已导出,这听起来是错误的吗?这让我觉得我们都误会了谷歌最初添加这个新“功能”的意图。也许我们不应该将库标记为已导出。也许我们应该将任何丢失的 jar 文件直接添加到我们的“libs”文件夹中。例如:这将允许我的库项目使用最新的 android-support-v4.jar [v13],而 ABS 内部使用 android-support-v4-12.jar。 @swooby:“是我自己,还是让每个开发人员 [使用 Eclipse 和库] 进入他们所有的库项目并将“Android 私有库”标记为已导出?” ——它是“错误的”,因为它是一个错误,被编写工具的人承认。 “也许我们应该将任何丢失的 jar 文件直接添加到我们的“libs”文件夹中”——哦,你也需要这样做,就像你在过去的一年中所做的那样。但是,您仍然必须选中此复选框。 @Phillip:AFAIK,都是项目。更准确地说,我想是所有项目都在libs/ 中有东西,但你最好检查一下,以防几个月后你在libs/ 中添加东西而忘记了这一点。【参考方案2】:

仅仅检查 Android Private Libraries 是不够的,我还必须在 Android SDK Manager 中安装 Android SDK Build-tools

【讨论】:

我无法确认这是必需的,但我没有解决 SimonSays 在安装之前遇到的错误。它可能只需要如上所述正确设置导出复选框,但我觉得我应该提到我在安装构建工具的过程中。 这对我有用。仅更改 Eclipse 首选项是不够的。您可能需要在 android SDK 管理器中查看已安装的构建工具。【参考方案3】:

我也有同样的问题,我的adt22.0.1。上面的解决方案都没有奏效。此外,在将外部库项目添加到工作项目时。我总是检查工作项目的gen 文件夹,如果外部库项目的R 存在(连同包名),则只导出外部库项目。在我的gen 文件夹中没有显示外部库的packagename

所以我检查了project.properties 文件,没有任何外部库链接存在android.library.reference.1=。所以我在那里手动添加了外部库引用,即使我是从project->properties->Java Build Path->Projects->Add 添加的。所以手动编辑project.properties 为我完成了所有工作。

【讨论】:

我认为这是因为设置android.library.reference.n的gui位置不是 java build path,而是project->properties -> @ 987654337@ -> Library -> Add...。一个gotcha。【参考方案4】:

我遇到了类似的问题,花了大约 3 个小时,但这里提出的任何决定都没有帮助......最后我找到了问题的根源:我的项目文件和 project.properties 是只读的。当我在 GUI 中执行此操作时,Eclipse 只是默默地忽略了库依赖项中的任何更改!

【讨论】:

【参考方案5】:

我遇到了同样的问题。这是因为eclipse项目。 为了解决这个问题,我在 eclipse 中创建了一个新项目,将我现有的项目类和资源复制到其中,然后再次启动 eclipse 并添加了我的自定义包含。

【讨论】:

太麻烦了,CommonsWare 的解决方案对我有用,我相信它也对你有用。【参考方案6】:

我遇到了类似的问题,我的回答与 CommonsWare 的略有不同。这是我的截图:

在我的构建中检查库后重新开始工作。

【讨论】:

我会小心这个解决方案。 Android DependenciesAndroid Private Libraries 取代,并且可能只是因为遗留原因而仍然存在。我想它可以随时删除。【参考方案7】:

我也遇到了同样的问题,

i) 添加 gson 库作为引用库 ii)在java Build Path中检查它

【讨论】:

以上是关于升级到 ADT 22 后,库不再添加到 APK的主要内容,如果未能解决你的问题,请参考以下文章

Android 升级ADT到22第三方Jar包导致的ClassNotFoundException和NoClassDefFoundError异常解决

ADT R22 - Proguard - 找不到引用的类

您无法推出此版本,因为它不允许任何现有用户升级到 Flutter 应用中新添加的 APK

升级到 React Native 26 后使用箭头函数时不再绑定

将 Web 部件添加到页面后,“列出工具”选项卡不再可用

在 SDK/ADT 更新后 Android 库依赖关系被破坏