【发布时间】:2013-01-18 20:57:48
【问题描述】:
当我学习 Android 开发(通过 Eclipse)时,一直让我感到沮丧的一件事是让引用 Android 库项目的 Android 应用程序项目可靠地工作。有时应用程序项目由于缺少库中定义的类引用而无法构建,有时它会构建但随后在运行时崩溃,并且引用了库中定义的类,并带有错误链接
java.lang.NoClassDefFoundError: com.dave.customviewtestlib.LibTestClass
由 logcat 显示。
我使用的是 Android 开发者工具版本:v21.0.1-543035
我创建了一个工作区,其中包含最简单的 Android 应用项目,并引用了最简单的 Android 库项目。我应该如何在 Eclipse 中将它们绑定在一起?他们都自己建造得很好。然后我编辑 Android 应用程序项目的“Java 构建路径”。令人困惑的是,似乎有很多方法可以引用库项目。有时一种方法有效,然后它停止工作,另一种方法在开始工作之前不起作用。我应该这样做吗
- 在应用项目的Java Build Path |项目,“添加”库 项目,或
- 在应用项目的Java Build Path |库,“添加 Jar”并指向包含库的类和其他资源的 .jar,或
- 在应用项目的Java Build Path |库,“添加类文件夹”并指向包含类的库项目的“bin”文件夹,或
- 在应用项目的Java Build Path |源,“添加文件夹”并指向库项目的源文件夹,或
- 还有别的吗?
还有神秘的Java Build Path |订单和导出选项卡。这是什么意思?
我还有一个相关的问题:这些所谓的 Android 库是像静态库(您在构建时引用它们并且代码被吸入,而在运行时它只是应用程序二进制文件的一部分),还是像动态库库(它们可以单独安装在设备上)?我知道这都是Java,所有类都是由类加载器在运行时加载的,但我认为仍然有一个重要的区别。大多数教程和参考资料都如此愚蠢,无法获得答案。
任何帮助都将真正有助于减少我的烦恼:)
【问题讨论】:
-
另见developer.android.com/tools/projects/…“这些所谓的Android库是否像静态库一样”——是的,尽管它们也在资源中编译(布局、drawables等)“大多数教程和参考都是如此愚蠢,得到答案是无望的”——这在文档、书籍和 StackOverflow 上的许多答案中都有介绍。哎呀,谷歌搜索
adding an android library project会在结果的第一页找到答案。 -
是的,部分问题是 Eclipse 似乎使项目处于不一致/错误的状态。我以错误的方式引用了 Android 库(通过“Java 构建路径”|“库”|“添加类文件夹”。我在运行时收到 ClassDefNotFoundError。所以我更改了引用以使用“Android”选项卡按照此处和您提供的链接上的说明。猜猜怎么着?我仍然遇到 ClassDefNotFoundError。我不得不删除应用程序项目的 /bin 文件夹来修复它。我应该神奇地知道这样做吗?
-
(是的,我尝试了清理和刷新,但我仍然收到错误,直到我从文件系统中删除 /bin 文件夹并重建。我已经使用 Visual Studio 和其他 IDE 15- 20 年,当你做出改变然后重建时,他们总是能接受改变并正常工作,没有你必须猜测的额外神秘步骤)