【问题标题】:Android Ant Include Java Library projectsAndroid Ant 包含 Java 库项目
【发布时间】:2012-10-09 19:42:27
【问题描述】:

我正在尝试使用 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 文件吗?

【问题讨论】:

    标签: android ant


    【解决方案1】:

    我最终想通了。我最终做的是使用 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 错误 1。

    您可能有也可能没有 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>
    

    然后我在项目根目录中创建了一个主 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>
    

    希望这会有所帮助!

    【讨论】:

    • 您是否有机会分享这些自定义文件的内容(或者至少是您添加到 ant 的规则)?
    • @pjv 我添加了一些示例文件,希望能够为您指明正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    相关资源
    最近更新 更多