//HelloWorld.java public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World"); } }
<?xml version="1.0" encoding="UTF-8"?> <project name="HelloWorld" default="run" basedir="."> <!-- property一般是后面要用到的变量 --> <property name="src.dir" value="src"/> <property name="bin.dir" value="bin"/> <property name="jar.dir" value="exe"/> <property name="main-class" value="HelloWorld"/> <!-- "clean"用于清除之前生成的字节码和jar文件,这样生成新的时不会重复 --> <target name="clean"> <delete dir ="${bin.dir}"/> <delete dir ="${jar.dir}"/> <echo message = "clean the bin and exe"/> </target> <!-- "compile"用来编译源.java文件 --> <target name="compile" depends="clean"> <mkdir dir ="${bin.dir}"/> <javac srcdir="${src.dir}" destdir="${bin.dir}"/> <echo message="compile done!"/> </target> <!-- "jar"用来打包生成jar--> <target name="jar" depends="compile"> <mkdir dir="${jar.dir}"/> <jar destfile ="${jar.dir}/HelloWorld.jar" basedir="${bin.dir}"> <!-- 使用manifest节点来配置jar包 --> <manifest> <attribute name="Main-Class" Value="${main-class}"/> </manifest> </jar> <echo message ="created jar file"/> </target> <!-- "run"要完成的有:编译,打包生成jar,运行jar--> <target name="run" depends="jar"> <java classname ="com.tghz.test.HelloWorld" classpath="${jar.dir}/HelloWorld.jar"/> </target> </project>在对src中的源文件进行编译时,会根据代码中的包名自动生成com/tghz/test/HelloWorld.class在bin目录中。javac srcdir="${src.dir}" (源文件目录) destdir="${bin.dir}"(目的文件目录)
进入sdk/tools目录下,执行android update project --name AntTest(项目名) --path F:\workspace2\AntTest1(项目路径),这样在该android项目会生成build.xml和local.properties。其中local.properties中写明了我们的android SDK的目录。
build.xml是ant构建的最重要的脚本。打开会发现其实里面有用的没几行,那是因为生成的build.xml脚本中引用了android sdk内部自带的构建脚本,<import file="${sdk.dir}/tools/ant/build.xml" />,具体的目录在{sdk目录}/tools/ant/build.xml。如果在项目中只是引用了第三方的jar包,那么只要将jar放到libs文件夹下即可了,ant编译打包的过程中会自动将第三方的jar添加进来。但是如果我们的android项目参考了其他的library项目,这时候我们最初在执行android update命令的时候应该多一个参数 :subprojects
我们首先要做的是使我们参考的library项目也支持ant编译打包,执行android update lib-project --path (项目路径),注意此时的参数是lib-project。<path id="project.javac.classpath"> <path refid="project.all.jars.path"></path> <path refid="tested.project.classpath"></path> </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> <src path="${gen.absolute.dir}"></src> <compilerarg line="${java.compilerargs}"></compilerarg> </javac>
<?xml version="1.0" encoding="UTF-8"?> <project name="custom_rules" default="release"> <target name="-pre-compile"> <echo message="JARPATH=${toString:project.all.jars.path}"></echo> <echo message="JARPATH=${jar.libs.dir}"></echo> <property name="ormlite.dir" value="${jar.libs.dir}/ormlite"> </property> <path id="ormlite.lib"> <path path="${toString:project.all.jars.path}"></path> <pathelement location="${ormlite.dir}/ormlite-android-4.41.jar"></pathelement> <pathelement location="${ormlite.dir}/ormlite-core-4.41.jar"></pathelement> </path> <path id="project.all.jars.path"> <path refid="ormlite.lib"></path> </path> <echo message="JARPATH=${toString:project.all.jars.path}"></echo> </target> </project>
#keystore的路径,必须使用正斜杠 key.store= "E:/wp_android_sample/me.key" #keystore的密码 #key.store.password=***** #alias名 key.alias=me #alias密码 #key.alias.password=******
在项目根目录下运行 ant release 命令就会帮你生成一个经过签名和aligned的apk,生成的apk(your_project_name-release.apk)在bin目录下.
#渠道市场列表 market_channels=91,360,wandoujia,baidu #版本号 version=1.2.1
<!-- 渠道包打包脚本 ant deploy--> <taskdef resource="net/sf/antcontrib/antcontrib.properties"> <classpath> <pathelement location="lib/ant-contrib-1.0b3.jar"/> </classpath> </taskdef> <target name="deploy"> <foreach target="modify_manifest" list="${market_channels}" param="channel" delimiter=","> </foreach> </target> <target name="modify_manifest"> <replaceregexp flags="g" byline="false"> <!-- 匹配的内容是 android:value="*****" android:name="UMENG_CHANNEL" --> <regexp pattern='android:value="(.*)" android:name="UMENG_CHANNEL"' /> <!-- 匹配之后将其替换为 android:value="渠道名" android:name="UMENG_CHANNEL" --> <substitution expression='android:value="${channel}" android:name="UMENG_CHANNEL"' /> <!-- 正则表达式需要匹配的文件为AndroidManifest.xml --> <fileset dir="" includes="AndroidManifest.xml" /> </replaceregexp> <property name="out.release.file" location="${out.absolute.dir}/${ant.project.name}_${channel}.apk" /> <!--包 --> <antcall target="release" /> <!--输出渠道包到bin/out目录下 --> <copy tofile="${out.absolute.dir}/out/${ant.project.name}v${version}-${channel}.apk" file="bin/${ant.project.name}-release.apk"/> </target>在项目根目录下运行 ant deploy 命令就会帮你各个渠道的签名包了(为了全程可以自动执行,ant.properties文件中的keystore的密码可以指定,这样在执行过程中就不需要手动输入密码了),在bin目录的out目录下。
原文地址:http://blog.csdn.net/u010852801/article/details/46582137