我想构建几个使用ant引用相同jar文件的android项目。我不想将jar文件复制到项目中的每个libs目录(由于源控件树的设置方式)。 answers我find在这里说“将它们放在libs目录中”,但这并没有解决这个问题。
所以问题是,我如何配置我的android ant构建脚本来引用项目外部的单独目录中的公共jar(不在“libs”中)?
答案 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脚本重新配置。但我不熟悉蚂蚁: - )