如何引用公共目录(不是库)中的外部 jar 文件来使用 ant 构建 android 项目?
Posted
技术标签:
【中文标题】如何引用公共目录(不是库)中的外部 jar 文件来使用 ant 构建 android 项目?【英文标题】:How do I reference external jar files in a common directory (not libs) to build android project using ant? 【发布时间】:2011-07-15 19:27:26 【问题描述】:我想使用 ant 构建几个引用相同 jar 文件的 android 项目。我不想将 jar 文件复制到项目中的每个 libs 目录中(由于源代码控制树的设置方式)。 answers我find这里说“把它们放在libs目录下”并不能解决这个问题。
所以问题是,如何配置我的 android ant 构建脚本以引用项目外部单独目录中的公共 jar(不在“libs”中)?
【问题讨论】:
【参考方案1】:在sdk中,tools/ant
下有ant文件。在main_rules.xml
,可以找到如下代码段:
<!-- Directory for the third party java libraries -->
<property name="jar.libs.dir" value="libs" />
<property name="jar.libs.absolute.dir" location="$jar.libs.dir" />
<!-- create a path with all the jar files, from the main project and the
libraries -->
<path id="jar.libs.ref">
<fileset dir="$jar.libs.absolute.dir" includes="*.jar" />
<path refid="project.libraries.jars" />
</path>
这就是 ant 构建代码确定从哪里获取 jar 的方式。您可以在 build.properties 中重载 jar.libs.dir
的值,因为这是在本节之前读取的,并且会重载该值。指向您打算使用的公共目录将执行您的建议。您可能需要对其进行一些操作才能使其以您想要的方式工作。
需要注意的是,我不确定这是否会对其他构建生命周期活动产生负面影响。
【讨论】:
【参考方案2】:看起来较新的 sdk 工具使这更容易完成。我有一个我所有 android 项目共享的主库文件夹,我只是将它添加到 ant.properties
文件中,以使其查找这些库的一个级别。
jar.libs.dir=../libs
【讨论】:
指向所有其他项目共享的 util 项目也确认工作正常,例如:jar.libs.dir=../MyUtilAnd3rdPartyLibraryProject/libs 奇怪.. 它对我不起作用.. 我尝试在编译目标之前回显jar.libs.dir
值,它显示../libs
但编译仍然失败。这是在 SDK 工具 21.0.1 上。
发现问题并发布答案【参考方案3】:
根据问题here 和我从here 获取的答案,目前提供的解决方案不起作用。直到提交的错误被修复。参考答案中提到的解决方案复制如下。
我将此添加到我的custom_rules.xml
模板中,它似乎工作正常。
我想它只比添加ant.properties
文件的路径多几行,直到我们得到更好的解决方案。
<target name="-pre-compile">
<path id="project.all.jars.path">
<path path="$toString:project.all.jars.path"/>
<fileset dir="$jar.libs.dir">
<include name="*.jar"/>
</fileset>
</path>
</target>
【讨论】:
【参考方案4】:如果您使用 Linux,只需将外部 jar 文件进行符号链接,然后将它们全部放在 libs
中。 Ant 可以正常工作。
已编辑
确保将所有符号链接直接放在libs
(不是子目录)中。我确信这可以通过 ant 脚本重新配置。但我对蚂蚁不熟悉:-)
【讨论】:
以上是关于如何引用公共目录(不是库)中的外部 jar 文件来使用 ant 构建 android 项目?的主要内容,如果未能解决你的问题,请参考以下文章
学习笔记eclipse打包Java项目(本项目引用外部jar包和dll动态链接文件)