如何在Eclipse中的Android库项目中引用外部jar文件

13

哦,Android。我爱你的措辞。

我有一个工作区,里面有几个项目。App1和App2是Android应用程序。Common是一个Android库项目。App1和App2依赖于Common(通过Android选项卡链接)。

Common有一些外部依赖项,即httpmime和apache-mime4j,它们以jar文件的形式存在。

由于某种原因,似乎我需要将我的mime jars添加到App1和App2的构建路径中才能成功编译。这看起来真的很愚蠢。在普通的Java中,我会将Common添加到App1和App2的构建路径中,然后事情就可以正常工作了。难道我必须将我的jar添加到每个Android应用程序中吗?

-Andy

注意:如果我不按上述方式配置构建路径,则会出现 "The type org.apache.james.mime4j.message.SingleBody cannot be resolved. It is indirectly referenced from required .class files | DataCallUtil.java | /App1/Common/util | line 364" 的错误。


1
+1 给出了不错的介绍,也提出了极好的问题。 - an00b
请查看此链接:http://stackoverflow.com/questions/22962935 - Sandeep P
3个回答

8
我认为omermuhammed和Amit没有理解Visser在谈论Android库项目的事实。 对于这些项目,我不认为创建jar文件是可能的(jar与所有Android资源无关)。
根据我使用Android库项目的经验,这种项目基本上只是将源代码和资源打包好,准备好被包含在另一个项目中。 但设置不是包的一部分,所以您必须为每个应用程序包含库。 根据我的经验,这个设置并不经常更改,因此情况并不那么糟糕。
Android库项目仍然远非完美,但仍然是比以前的东西有了巨大的改进。

2
+1 是为了澄清“设置不是包的一部分”。 - an00b
@alocaly +1 有更新吗?有没有办法在每个 Android 应用程序项目中不包含库项目的引用 jar 文件?顺便说一下,可以通过使用自定义 Ant 构建来创建 Android jar 文件,但仍然需要将引用的 jar 文件包含到应用程序项目中 :( 敬礼。 - eros

1
为了补充omermuhammed的回答,如果这个“共同”的项目不是经常被更改的,那么创建一个jar文件并在其他项目中使用它是一个好的解决方案。
要创建一个jar文件,请在Eclipse上右键单击该项目->导出->Java->JAR文件,然后选择您想要包含在JAR中的文件夹,在您的情况下,我猜这包括文件夹gen和libs(libs是具有httpmime和apache-mime4j JARS的文件夹),但可能不包括res或项目的根目录(例如AndroidManifest.xml等文件会导致依赖项目中的相同文件出现问题)。

0

尝试将Common项目编译成jar文件,并将其作为外部jar文件添加到您的App1或App2项目中。


我该怎么做?文档(http://developer.android.com/guide/developing/other-ide.html#libraryProject)中指出,“但是,库项目与标准Android应用程序项目不同之处在于,您无法直接将其编译为自己的.apk文件或在Android平台上运行它。同样,您也不能像真正的库那样将库项目导出为独立的JAR文件。相反,您必须通过从依赖应用程序的构建路径引用库来间接编译库,然后构建该应用程序。” - Andy V
将共同的项目编译成一个jar文件,将其复制到Android项目下的“lib”文件夹中,然后在Eclipse中右键单击Android项目-> Build Path -> Configure Build Path。现在,在左侧面板中选择“Java Build Path”。现在,在“Library”面板下,单击“Add External Jars”并添加您的jar文件。保存并编译。它应该可以工作。还要不要忘记在AndroidManifest.xml中添加所需的行与标签“<uses-library”。 - omermuhammed
我理解你所说的过程。但是你的前七个单词,“将共同项目编译成jar。”怎么做?编写一些自定义Ant来完成吗?我宁愿继续我正在做的事情,并在每个地方添加依赖项。这是我期望Eclipse能够很好地完成的事情。如果不能,那没关系。我只想知道这是Android / Eclipse的缺点。 - Andy V

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接