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


238

我有一个相当大的Android App项目,它引用了几个库项目。一切正常,直到我将eclipse ADT插件升级到最新版本(v22)。我当然也升级了SDK。我没有在Eclipse中看到任何编译错误,但是当我在电话上运行该项目时,我收到了NoClassDefFoundError。

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

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

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

  • 重新安装android SDK
  • 下载新的ADT捆绑包
  • 删除我所有的代码,再从git中获取
  • 将有问题的库复制到应用程序项目
  • 注释掉使用该库的代码-下一个库我只会遇到相同的错误

一切都没有任何成功,所以我在这里变得非常绝望。

如果有人可以给我提示如何解决该问题,我将非常高兴。

Answers:


337

他的adt-dev帖子中引用波士顿的街道:

升级时,不会始终检查新的“ Android私有库”的“订购和导出”。android-support-v4.jar现在位于此“ Android私有库”部分。

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

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

试一试,幸运的话,它将解决您的问题。

在此处输入图片说明


32
CommonsWare始终像是最早的开拓者之一,非常感谢!:)
Paul Wein

1
Avery新的ADT版本带来了新的惊喜;)希望新的构建系统会更好。谢谢CommonsWare
lujop

3
是我一个人,还是让每个使用Eclipse和Libraries的开发人员进入其所有库项目并将“ Android Private Libraries”标记为Exported听起来不对?这使我认为我们所有人都误以为Google打算首先添加此新“功能”的意图。也许我们不应该将库标记为已导出。也许我们应该将所有丢失的jar文件直接添加到我们的“ libs”文件夹中。例如:这将允许我的图书馆项目使用最新的android-support-v4.jar [v13],而ABS内部使用android-support-v4-12.jar。
swooby

2
@swooby:“仅仅是我一个人,还是让每个使用Eclipse和Libraries的开发人员进入其所有库项目并将“ Android Private Libraries”标记为“已导出”听起来不对吗?” -就漏洞而言,这是“错误的”,编写工具的人也承认这一错误。“也许我们应该将所有丢失的jar文件直接添加到我们的“ libs”文件夹中” –哦,就像过去一年的变化一样,您也需要这样做。但是,您仍然必须选中此复选框。
CommonsWare

9
@Phillip:AFAIK,所有的项目。我想更准确地说,是所有项目中都有东西libs/,但是如果libs/几个月后再添加东西而忘记了,您也可以全部检查一下。
CommonsWare

10

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


我无法确认这是必需的,但在安装它之前我没有克服SimonSays遇到的错误。它可能仅需要如上所述正确设置导出复选框,但是我应该提到我在安装构建工具的过程中确实做了此事。
奇怪的

这对我有用。仅更改Eclipse首选项是不够的。您可能需要检出android SDK Manager中已安装的构建工具。
史蒂文斯

4

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

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

在此处输入图片说明


1
我认为它的发生,因为鬼地方设置android.library.reference.n不是 java build path,而是project- > properties- > Android- > Library- > Add...。一个陷阱
2014年

4

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


3

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


1
太麻烦了,CommonsWare的解决方案对我有用,我相信它也对您有用。
Bilthon

2

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

在此处输入图片说明

在检查完库之后,我的构建又开始工作。


2
我会谨慎使用此解决方案。Android Dependencies被替换,Android Private Libraries并且可能仅出于遗留原因而留在那里。我猜它可以随时删除。
SimonSays 2013年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.