如何使用ant构建带有外部库的Android应用程序?

18

我有一个现有的项目,使用我的IDE可以正常构建。我想使用“android update”命令为该项目生成ant构建文件。

构建文件生成成功,但是由于它没有使用我在libs目录中拥有的一些jar文件,因此构建失败了。

我想找到告诉ant以正确方式使用我的libs目录中的一些外部jar文件来构建的适当方法。我该如何做?这是build.properties中的属性吗?我需要修改build.xml吗?还是完全有不同的解决方案?

4个回答

32

但是构建失败了,因为它没有使用我在libs目录中有的一些jar文件进行构建。

你的错误信息是什么?我怀疑你可能误解了错误信息。

我想找出告诉ant使用我的libs目录中的一些外部jar文件进行构建的正确方法。我该如何做?

只需将它们放在libs/中,因为Ant会将其中的所有内容添加到您的构建路径中。请参见this projectthis projectthis project以获取示例。


1
啊,问题在于我的一个依赖项是项目依赖项而不是jar依赖项。我会解决这个问题的。 - emmby
感谢commonsware。如果您想尝试后续操作,我在这里有另一个问题:https://dev59.com/0EzSa4cB1Zd3GeqPoKLz - emmby
是的,我看过了。我不是Android测试框架的粉丝,所以我不知道答案。抱歉! - CommonsWare
@emmby 你是怎么解决那个问题的?(“问题在于我的某个依赖项是项目依赖项而不是jar依赖项”) - Rakki s

14

我花了一些时间试图让Facebook API与ant一起使用。对我来说,关键是将这个东西添加到我的default.properties文件中。

android.library.reference.1=../Facebook

如果../Facebook包含AndroidManifest.xml等文件,则相对路径很重要。不要使用绝对路径,因为Ant似乎将您的项目目录视为根目录。

这对于从源代码包含的其他库项目也应该适用。


请查看sdk示例中的TicTacToeLib&TicTacToeMain,并阅读README.txt文件。 - douyw
1
这正是我所需要的答案,简洁明了。 - gregko
为什么在那个定义中有 .1? - IgorGanapolsky

8
我曾经遇到过类似的问题。我正在使用Android SDK生成的标准Ant build.xml在Jenkins上构建Android项目。我还引用了另一个Java项目,其中包含一些共享领域类。在Eclipse中没有问题。该领域项目是一个项目引用。然而,在Jenkins上,这个domain.jar由Maven构建,但Android项目无法访问它。
最终,我通过在build.xml的末尾添加以下内容解决了这个问题:
<target name="-pre-build">
  <copy todir="${jar.libs.dir}">
    <fileset 
      dir="../path-to-another-project/target" 
      includes="*.jar" />
  </copy>
</target>

这将从另一个项目的目标目录中复制所有jar文件到我的Android项目的“libs”目录中。在Android编译开始之前,会自动调用-pre-build Ant目标。

6
不要改变build.xml,你应该在与build.xml相同的目录中添加一个custom_rules.xml文件。在其中放置“-pre-build”目标,build.xml将自动导入它。custom_rules.xml可以包含所有的构建前和构建后操作。 - wallacer

1

我同意Mark的观点,但是如果你计划进一步修改构建脚本,那么你需要自定义它。将android/platforms/android-PLATFORMVERSION/templates/android_rules.xml中的任务引入到你的build.xml中,并修改你想要修改的任何内容,包括外部库的位置。


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