如何在公共目录(不是libs)中引用外部jar文件来使用ant构建android项目?

时间:2011-03-15 13:33:19

标签: android ant build jar libs

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

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

4 个答案:

答案 0 :(得分: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构建代码决定从哪里获取jar的方式。您可以在build.properties中重载jar.libs.dir的值,因为在本节之前读取了该值并且会使值重载。指出您打算使用的公共目录将执行您的建议。您可能需要使用它来使其按照您想要的方式工作。

有一点需要注意的是,我不确定这是否会对其他构建生命周期活动产生负面影响。

答案 1 :(得分:7)

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

jar.libs.dir=../libs

答案 2 :(得分: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>

答案 3 :(得分:-2)

如果您使用Linux,只需创建外部jar文件的符号链接,然后将它们全部放在libs中。 Ant会正常工作。

<强>被修改

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