Android Ant包含Java库项目

时间:2012-10-09 19:42:27

标签: android ant

我正在尝试使用Ant编译Android项目,以便它可以与构建计算机一起使用,而且我遇到了问题。我总共有五个项目:三个只是java库项目,另外两个是实际的Android项目。实际上只编译和安装了一个项目,但它从其他项目中提取以进行编译。

我尝试使用android update project --name <name> --target <target> --path <path>生成build.xml文件。它生成build.xml就好了,但是当我去运行它时,它无法正确地将我的其他项目作为依赖项包含在内。

然后我尝试使用Eclipse导出build.xml文件,这将正确地包含依赖项,但它不会生成我的R.java文件。

我更喜欢第二种方法,因为Eclipse已经处理了我的依赖项设置,但是我可以添加到build.xml文件中以正确生成我的R.java文件吗?

1 个答案:

答案 0 :(得分:5)

我最终搞清楚了。我最终做的是使用Eclipse导出工具为三个Java库项目导出ant构建脚本。然后我创建了一个名为build-custom.xml的文件,其中包含用于复制jar的其他目标。

接下来,我在Android库项目中使用了android update lib-project命令来生成该项目的build.xml(在http://developer.android.com/tools/projects/projects-cmdline.html中指定)。为了在构建中包含Java库项目,您必须将它们复制到Android项目中的libs文件夹。所以我在Android库项目中创建了一个名为custom_rules.xml的构建文件,将jar文件复制到lib文件夹中。重要提示:还要编写一个删除jar的规则,否则当你尝试在Eclipse中运行时,你会得到Davlik Error。

您可能有也可能没有Android库项目,但主要项目的步骤与库项目几乎相同。只需使用android update project命令,然后创建一个custom_rules.xml来复制相应的jar。

编辑:

在我使用Eclipse为基本Java库项目生成构建脚本之后,我创建了一个common.xml ant构建文件。这个文件基本上是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project name="common">     
    <target name="clean">
        <delete dir="build/libs" />
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary1" target="clean" />
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary1" target="cleanup-jars" />
            <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary2" target="clean" />
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary2" target="cleanup-jars" />
            <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary3" target="clean" />
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary3" target="cleanup-jars" />
            <ant antfile="build.xml" dir="./AndroidSubProject" target="clean" />
    </target>

    <target name="samplesublibrary1">
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary1" target="all" />
    </target>

    <target name="samplesublibrary2">
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary2"     target="all" />
    </target>

    <target name="samplesublibrary3" depends="samplesublibrary2">
        <ant antfile="build.xml" dir="./SubJavaLibrary/SampleSubLibrary3" target="all" />
    </target>

    <target name="android-sub-project-copy-jars" depends="samplesublibrary1, samplesublibrary2, samplesublibrary3">
        <ant antfile="build.xml" dir="./AndroidSubProject" target="android-project-copy-jars" />
    </target>

    <target name="android-sub-project-debug" depends="android-project-copy-jars">
        <ant antfile="build.xml" dir="./AndroidSubProject" target="debug" />
    </target>

    <target name="android-sub-project-release" depends="android-project-copy-jars">
        <ant antfile="build.xml" dir="./AndroidSubProject" target="release" />
    </target>

    <target name="android-sub-project-remove-jars">
        <ant antfile="build.xml" dir="./AndroidSubProject" target="android-project-remove-jars" />
    </target>
</project>

然后在Android-Sub-Project中,我添加了一个包含以下内容的custom_rules.xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse.ant.import?>
<project default="android-project-copy-jars" name="Copy required jars to lib folder">
  <target name="android-project-copy-jars">
    <copy file="../../build/libs/SampleSubLibrary1.jar" todir="libs"/>
    <copy file="../../build/libs/SampleSubLibrary2.jar" todir="libs"/>
    <copy file="../../build/libs/SampleSubLibrary3.jar" todir="libs"/>
  </target>
  <target name="android-project-remove-jars">
    <delete file="./libs/SampleSubLibrary1.jar" />
    <delete file="./libs/SampleSubLibrary2.jar" />
    <delete file="./libs/SampleSubLibrary3.jar" />
  </target>
</project>

然后我在项目根目录中创建了一个main build.xml,它包含并运行所有其他子build.xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="all">
    <target name="debug" depends="clean, main-debug, android-project-remove-jars" />
    <target name="release" depends="clean, main-release, android-project-remove-jars" />

    <import file="common.xml" />

    <target name="clean" depends="common.clean">
        <ant antfile="build.xml" dir="./Main" target="clean" />
    </target>

    <target name="main-debug" depends="android-sub-project-debug">
        <ant antfile="build.xml" dir="./Main" target="debug" />
        <copy file="./Main/bin/main-debug.apk" todir="./build/bin" />
    </target>

    <target name="main-release" depends="android-sub-project-release">
        <ant antfile="build.xml" dir="./Main" target="release" />
        <copy file="./Main/bin/main-release-unsigned.apk" todir="./build/bin" />
    </target>
</project>

希望这有帮助!