7

我的 Eclipse 工作区中有三个项目:

  1. 生成 .jar 文件的基于 maven 的库项目。这个项目包含我们的核心代码。
  2. 基于 Maven 的 Java 桌面应用程序。此应用程序依赖于库项目。
  3. 我们刚刚开始构建的 Android 应用程序。它还没有被 mavenized。

我希望 Android 应用程序使用库项目作为依赖项。

我已经阅读了一些关于向 Android 应用程序添加库文件依赖项的类似问题的回复,并尝试关注它们:

方法#1:

Project->Properties->Java Build Path->Projects-->Add 添加库项目。

现在,我可以使用库项目中的类。编译器不会产生任何警告。但是,当我在模拟器上运行应用程序时,我得到一个类未定义错误。

方法#2:

将生成的 .jar 文件复制到 Android 应用程序的“libs”目录中。

这行得通。没有类未定义的异常。但是,我无法附加源代码,因此无法单步执行库代码。另外,每次源代码更改时,我都必须手动复制 .jar 文件。

方法#3:

转到库项目的属性。您将在左侧窗格中看到“Android”。选择它并标记“IsLibrary”字段。

但是,就我而言,左窗格中没有“Android”属性。我猜这个属性只有在它是一个真正的 Android 库项目时才会显示。

我被困住了。如果有人能告诉我如何最好地处理这种情况,我将不胜感激。

以下是我希望实现的目标的摘要:

  1. 在桌面应用程序和 Android 应用程序中使用相同的库项目。
  2. 在 Android 应用程序上,源代码调试应该可以工作。
  3. 如果库应用程序中有任何源代码更改,Android 应用程序应该会自动获取新的更改(而不是我每次都尝试将新的 .jar 文件拖到 libs 文件夹中)。
4

1 回答 1

3

到目前为止,方法#1 似乎是一个选择,但您需要研究为什么会收到 ClassNotFoundException - 解压缩 APK(因为它是一个存档),解开它并查看为什么不包含库类。

根据经验,如果您使用 Eclipse,我相信您会遇到该异常,因为您在将库添加到 Android 项目时没有检查导出的库 - 在将其添加到构建路径后,执行如下:Project Props -> Build Path -> Order and Export,这里确保你的库项目被选中。有一个关于此 ClassNotFoundException 的已知问题/挫折,解决方法是选择导出选项卡。我相信这篇文章包含更多细节这个 SO 主题

在调试 jar 代码时,您需要在 libs 文件夹中包含一个与您的 jar 文件具有相同命名的属性文件(例如,如果库 jar 文件是mylib.jar,则需要有一个mylib.jar.properties文件)。该文件应该有一个src指向源代码所在路径的条目(作为 jar 文件或文件系统)。当您添加此文件时,Eclipse 有点愚蠢,因此您需要重新启动它。它可以包含一个doc条目,也可以指向 javadoc 所在的位置。这是我自己的一个例子:

src=../docs/spring-android-rest-template-1.0.1.RELEASE-sources.jar
doc=../docs/spring-android-rest-template-1.0.1.RELEASE-javadoc.jar
于 2013-09-02T05:58:54.273 回答