如何在使用ant构建Android项目时引用位于公共目录(而非libs)中的外部jar文件?

13
我想要使用ant构建多个android项目,这些项目都引用同一个jar文件。由于源代码控制树的设置,我不想将jar文件复制到每个项目中的libs目录中。这里的答案解决方案说“将它们放在libs目录中”,但这并不能解决我的问题。
所以问题是,如何配置我的android ant构建脚本以引用位于项目外部(而不是“libs”目录中)的常用jar文件?
4个回答

9
在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构建代码确定从何处获取jars的方式。您可以在build.properties中重载jar.libs.dir的值,因为在此部分之前读取该值且会重新加载值。将其指向您打算使用的公共目录将实现您想要的效果。您可能需要进行一些调整以让它按照您的意愿工作。
一个注意事项是我不确定这是否会对其他构建生命周期活动产生负面影响。

7

看起来新的 SDK 工具让这个过程更容易实现了。我有一个主库文件夹,所有的 Android 项目都共享它,并且我只需将其添加到 ant.properties 文件中,使其在上一级寻找那些库。

jar.libs.dir=../libs

指向所有其他项目共享的util项目也已确认工作,例如:jar.libs.dir=../MyUtilAnd3rdPartyLibraryProject/libs - user77115
奇怪..对我不起作用..我尝试在编译目标之前回显jar.libs.dir的值,它显示为../libs但是编译仍然失败。这是在SDK工具21.0.1上。 - Saad Farooq
找到了问题并且回复了答案。 - Saad Farooq

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>

-2
如果您使用Linux,只需创建外部jar文件的符号链接,然后将它们全部放在libs中。Ant将正常工作。 编辑 请确保将所有符号链接直接放在libs中(而不是子目录中)。我相信这可以通过ant脚本重新配置。但我不熟悉ant :-)

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