我想构建几个使用 ant 引用相同 jar 文件的 android 项目。我不想将 jar 文件复制到项目中的每个 libs 目录中(由于源代码控制树的设置方式)。我在这里找到的答案说“把它们放在 libs 目录中”,这并不能解决这个问题。
所以问题是,如何配置我的 android ant 构建脚本以引用项目外部单独目录中的公共 jar(不在“libs”中)?
在 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.dir
build.properties 中的值,因为这是在本节之前阅读的,并且会重载该值。指向您打算使用的公共目录将执行您的建议。您可能需要使用它来让它以您想要的方式工作。
一个警告是,我不确定这是否会对其他构建生命周期活动产生负面影响。
看起来较新的 sdk 工具使这更容易完成。我有一个我所有的 android 项目共享的主库文件夹,我只是将它添加到ant.properties
文件中以使其查找这些库的一个级别。
jar.libs.dir=../libs
根据此处的问题和我从此处获取的答案,所提供的解决方案目前不起作用。直到提交的错误被修复。如参考答案中所述,该解决方案复制如下。
我将此添加到我的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>
如果您使用 Linux,只需对外部 jar 文件进行符号链接,然后将它们全部放在libs
. 蚂蚁会正常工作。
已编辑
确保将所有符号链接直接放在libs
(而不是子目录)中。我确信这可以通过 ant 脚本重新配置。但我不熟悉蚂蚁:-)