13

我想构建几个使用 ant 引用相同 jar 文件的 android 项目。我不想将 jar 文件复制到项目中的每个 libs 目录中(由于源代码控制树的设置方式)。我在这里找到答案说“把它们放在 libs 目录中”,这并不能解决这个问题。

所以问题是,如何配置我的 android ant 构建脚本以引用项目外部单独目录中的公共 jar(不在“libs”中)?

4

4 回答 4

9

在 sdk 下,有 ant 文件tools/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 的方式。您可以重载jar.libs.dirbuild.properties 中的值,因为这是在本节之前阅读的,并且会重载该值。指向您打算使用的公共目录将执行您的建议。您可能需要使用它来让它以您想要的方式工作。

一个警告是,我不确定这是否会对其他构建生命周期活动产生负面影响。

于 2011-03-15T13:42:19.440 回答
7

看起来较新的 sdk 工具使这更容易完成。我有一个我所有的 android 项目共享的主库文件夹,我只是将它添加到ant.properties文件中以使其查找这些库的一个级别。

jar.libs.dir=../libs
于 2011-12-20T17:42:14.747 回答
3

根据此处的问题和我从此处获取的答案,所提供的解决方案目前不起作用。直到提交的错误被修复。如参考答案中所述,该解决方案复制如下。


我将此添加到我的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>
于 2012-12-29T09:05:39.727 回答
-2

如果您使用 Linux,只需对外部 jar 文件进行符号链接,然后将它们全部放在libs. 蚂蚁会正常工作。

已编辑

确保将所有符号链接直接放在libs(而不是子目录)中。我确信这可以通过 ant 脚本重新配置。但我不熟悉蚂蚁:-)

于 2012-02-10T15:43:12.143 回答