Ant 命令行编译Android项目

首先把Android sdk下的tools目录加到系统path环境变量里, 要么就得直接指定android.bat的绝对路径

对于一个新项目, 可以用这个命令创建需要的ant编译环境(可以看到android项目默认的文件结构)

android create project -k com.foo -a Test1 -t android-8 -p d:\temp

如果是已经存在的项目, 对主项目和子项目都运行

项目目录> android update project -s -p . -t android-19

-s 是因为带子项目

-t 是指定目标版本, 版本不对会导致编译失败

其中

build.xml 是ant任务文件, 基本不用修改

custom_rules.xml 对于需要自行配置的编译任务, 写到这个文件里, 会被build.xml加载

ant.properties ant运行中涉及的变量写到这里

local.properties 里面设定了sdk.dir的路径, 不用修改

project.properties 设定了编译目标和项目类型, 如果有子项目的话, 还有子项目的路径, 不用修改

然后执行下面的命令就进行编译了

项目目录>D:\apache-ant-1.8.4\bin\ant.bat clean
项目目录>D:\apache-ant-1.8.4\bin\ant.bat release

根据中途报的错, 再做调整

如果子项目编译出错, 可以分别在子项目目录下运行ant clean 和 ant release, 直到排除错误

两个相似的custom_rules.xml 例子

<?xml version="1.0" encoding="UTF-8"?>
<project>
   
    <property value="gen" />
    <property location="${generated.dir}" />
    <property value="-s &apos;${generated.absolute.dir}&apos;" />   
   
    <target>
        <mkdir dir="${generated.absolute.dir}" />
    </target>
     

<target depends="-build-setup, -pre-build, -code-gen, -pre-compile">
        <do-only-if-manifest-hasCode elseText="hasCode = false. Skipping...">
            <!-- merge the project's own classpath and the tested project's classpath -->
            <path>
                <path refid="project.all.jars.path" />
                <path refid="tested.project.classpath" />
                <fileset dir="compile-libs" includes="*.jar"/>
            </path>
            <javac encoding="${java.encoding}"
                  source="${java.source}" target="${java.target}"
                  debug="true" extdirs="" includeantruntime="false"
                  destdir="${out.classes.absolute.dir}"
                  bootclasspathref="project.target.class.path"
                  verbose="${verbose}"
                  classpathref="project.javac.classpath"
                  fork="${need.javac.fork}">
                <src path="${source.absolute.dir}" />
                <src path="${gen.absolute.dir}" />
                <compilerarg line="${java.compilerargs}" />
            </javac>

<!-- if the project is instrumented, intrument the classes -->
            <if condition="${build.is.instrumented}">
                <then>
                    <echo level="info">Instrumenting classes from ${out.absolute.dir}/classes...</echo>

<!-- build the filter to remove R, Manifest, BuildConfig -->
                    <getemmafilter
                            appPackage="${project.app.package}"
                            libraryPackagesRefId="project.library.packages"
                            filterOut="emma.default.filter"/>

<!-- define where the .em file is going. This may have been
                        setup already if this is a library -->
                    <property location="${out.absolute.dir}/coverage.em" />

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/bb74b09df15dc515818eac5877f6fe76.html