如何引用公共目录(不是库)中的外部 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 项目?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA关于引用外部jar包的问题

如何使用外部库运行 jar

如何将JAR包加入到项目的库中引用

学习笔记eclipse打包Java项目(本项目引用外部jar包和dll动态链接文件)

学习笔记eclipse打包Java项目(本项目引用外部jar包和dll动态链接文件)

如何让打的可执行jar包可以包含外部库的解压文件