【问题标题】:How to build Android project with Ant that depends on Java project?如何使用依赖于 Java 项目的 Ant 构建 Android 项目?
【发布时间】:2013-01-29 13:14:09
【问题描述】:
我有一个 Android 库项目 AndroidLib,它依赖于我的工作区中的一个 Java 项目 JavaLib。
在 Eclipse 中,这是通过将 JavaLib 项目添加到 Java Build Path > Projects for AndroidLib 并将其设置为在 Order and Export 选项卡中导出的,然后构建良好。
但是,在构建 AndroidLib 时,Ant 似乎并没有获得对 JavaLib 项目的依赖(我已经运行了 android update lib-project)。 将此依赖项添加到我的 build.xml 的最佳方法是什么?
【问题讨论】:
标签:
java
android
eclipse
ant
library-project
【解决方案1】:
我遇到了同样的问题。我最终以一种非常骇人听闻的方式解决了它。
在 AndroidLib/build.xml(或在 AndroidLib/custom_rules.xml 中更好)中,我定义了一个 -pre-build 目标来构建 JavaLib 并将生成的 jar 复制到 libs/ 中。我还定义了一个-post-package 目标来删除复制的jar,否则Eclipse会混淆。
<property name="lib.javalib.project.dir" location="${basedir}/../JavaLib" />
<target name="-pre-build">
<subant buildpath="${lib.javalib.project.dir}" target="package" failonerror="true" />
<copy todir="${basedir}/libs" failonerror="true" verbose="true">
<fileset dir="${lib.javalib.project.dir}/target">
<filename name="javalib*.jar"/>
</fileset>
</copy>
</target>
<target name="-post-package">
<delete verbose="true">
<fileset dir="${basedir}/libs" includes="javalib*.jar" />
</delete>
</target>
这个解决方案远不能令人满意,但它可以完成工作。
你会在那里找到类似的问题和答案:Android Ant Include Java Library projects
【解决方案2】:
我会回答我自己的问题:正确执行此操作的唯一方法是不使用 Ant。
- 您需要一个适当的依赖管理系统。 Maven 是您唯一真正的选择。
- 您需要一个支持 Maven 的构建系统。我目前再次为此使用 Maven,因为当时它是唯一一个也支持 Maven 依赖项管理的成熟构建工具——现在(尽管适用于 Android 库项目,因为这些格式尚未最终确定)Gradle 应该是你的构建首选工具。
【讨论】:
-
根据您的 AndroidLib 和 Java 项目的内容,您应该考虑 lacton 的答案。如果您的 lib 通过 SPI 提供某些内容,您可能需要通过 xml 文件修改构建过程,以便将 META-INF 文件夹放入您的 apk。 See my post
【解决方案3】:
我更改了 build.xml 以运行 java 项目的 ant 文件,然后将 jar 复制到 libs 文件夹:
<target name="-pre-compile">
<ant antfile="build.xml" dir="dependencies/JavaUtils" target="clean"/>
<ant antfile="build.xml" dir="dependencies/JavaUtils"/>
<copy todir="${jar.libs.dir}" failonerror="true" file="dependencies/JavaUtils/dist/Java-utils.jar"/>
<sleep seconds="3"/> <!-- Delay for the file to be recognized after the copy -->
</target>
这对某人有什么帮助。
顺便说一句,我开始阅读有关 Gradle 的依赖/构建/任何系统的信息,并从中得到了毛骨悚然。啊,回到蚂蚁身上真是一种解脱……