android ant build.xml实例

利用ant编译apk。

使用的时候仅仅须要改动SKD路径javahome路径和project路径就能够了。

<?xml version="1.0" encoding="UTF-8"?>
<project name="Scolview" default="zipalign" basedir=".">
	<property name="exe" value=".exe" />
	<property name="bat" value=".bat" />

	<!--用到的各个工具的本地路径,务必改动!-->
	<!--Android_Home 本机上androidsdk的安装文件夹-->
	<property name="android_home" value="F:/adt-bundle-windows-x86_64-20140624/sdk" />
		<!--相应工程的根文件夹-->
	<property name="root" value="F:/andoridADT/workspace/Scolview" />
	<!-- javahome 文件夹 -->
	 <property name="javahome" value="C:/Program Files/Java/jdk1.6.0_45"></property>
	 
	<!-- android sdk的版本。18表示Android 4.3-->
	<property name="android_api_level" value="18"/>
	<!-- android_sdk文件夹下的android.jar包的位置-->
    <property name="androidjar" value="${android_home}/platforms/android-${android_api_level}/android.jar" />
   
	<!--本机上javac的文件夹-->
	<property name="javac" value="${javahome}/bin/javac.exe" />
	<!--aapt用于生产R.java和打包resource资源-->
	<property name="aapt" value="${android_home}/build-tools/18.0.1/aapt${exe}" />
	<!--dx用于将.class文件(加上第三方库和.class文件)打包成.dex文件-->
	<property name="dx" value="${android_home}/build-tools/18.1.1/dx.bat" />
	
	<!--apkbuilder用于将.dex文件和打包过的资源文件(aapt打包后的)以及其它资源文件打包成apk文件-->
	<property name="apkbuilder" value="${android_home}/tools/apkbuilder${bat}" />
	
	<!--zipalign用于对apk进行优化,非必须步骤-->
	<property name="zipalign" value="${android_home}/tools/zipalign${exe}" />
	
	
	<!--打包过程中涉及到的各个文件夹-->
	<!--bin文件存放apk打包所需文件(.dex,resource.ap_,.class,AndroidManifest.xml等)和生成后的apk-->
	<property name="out" value="${root}/dest" />
	
	<!--gen主要用于存放R.java,eclipse下为自己主动生成。ant下为aapt工具生成-->
	<property name="gen" value="gen" />
	
	<!--存放javac生成的class文件的文件夹-->
	<property name="classes" value="${out}/classes" />
	
	
	<!--存放.java源文件的文件夹-->
	<property name="src" value="src"/>
	
	<!--存放引用到的库文件夹-->
	<property name="lib" value="${out}/libs"/>
	
	
	<!--打包时候的编码格式-->
	<property name="encoding" value="UTF-8" />
	
	<!--生成APK的名字-->
	<property name="file_name" value="scollview" />
	
	 <!-- 签名仓库。由keytool生成 -->
	<property name="keystore" value="${root}/edsheng.keystore" />
	<!-- 须要设置签名名称-->
	<property name="key_name" value="edsheng" />
	<!-- 须要设置-->
	<property name="key_pass" value="a199210311" />
	<!-- 须要设置-->
	<property name="store_pass" value="a199210311" />
	<!-- 签名所用jar包的位置-->
	<property name="jarsigner" value="${javahome}/bin/jarsigner.exe" />
	<!--
	实际编译APK的步骤!
	1.清除输出路径的文件(覆盖掉原来的打包结果)
	2.创建须要输出的文件夹
	3.调用aapt工具生成R.java文件
	4.调用javac将java文件编译成java字节码(.class文件)
	5.调用dx.bat将.class文件和其它调用到的第三方库文件编译成.dex文件
	(.dex文件是能够在dalvik虚拟机上直接执行文件格式,能够理解为对java字节码做的针对嵌入式设备的优化)
	6.调用apkbuilder工具将.dex文件和bin文件夹下的资源文件(aapt生成,如resource.ap_)打包成APK
	7.调用jarsigner进行前面
	8.调用zipalign进行性能提升-->
	
	<!--以下是实际的打包过程-->
	<!--1.清除输出路径的文件(覆盖掉原来的打包结果)-->
	<target name="mkdir">
	    <echo>生成输出文件夹。。。</echo>
	    <mkdir dir="${out}"></mkdir>
	    <echo>生成完毕</echo>
	</target>
	
	<target name="clean" depends="mkdir">
		<echo>清理输出文件夹...</echo>
        <delete dir="${out}" />
		<delete dir="${gen}" />
        <echo>清理完毕</echo>
	</target>
	
	
	<target name="init" depends="clean">
		<echo>创建输出文件夹...</echo>
		<mkdir dir="${out}" />
		<mkdir dir="${gen}" />
		<mkdir dir="${classes}" />
		<mkdir dir="${lib}" />
		<echo>创建文件夹完毕</echo>
	</target>
	<!--aapt详细參数含义见:http://blog.csdn.net/liuhe688/article/details/6679879-->
	<!-- 为该项目资源生成R.java文件 -->
	<target name="gen" depends="init">
		<echo>从资源文件生成R.java ...</echo>
		<exec executable="${aapt}" failonerror="true">
			<arg value="package" />
			<arg value="-m" />
			<arg value="-J" />
			<arg value="${gen}" />
			<arg value="-M" />
			<arg value="AndroidManifest.xml" />
			<arg value="-S" />
			<arg value="res" />
			<arg value="-I" />
			<arg value="${androidjar}" />
		</exec>
		<echo>R.java文件生成成功</echo>
	</target>
	
	<!--javac的详细參数含义见:http://cyf0110.iteye.com/blog/1508991-->
	<target name="compile" depends="gen">
		<echo>開始编译.class文件...</echo>
		<javac fork="true" executable="${javac}" encoding="${encoding}" debug="true" extdirs="" source="1.5" target="1.5" destdir="${classes}"  bootclasspath="${androidjar}">
            <src path="${src}" />
            <src path="${gen}" />
            <classpath>
                <fileset dir="${root}/libs" includes="*.jar" />
            </classpath>
        </javac>
		<echo>.class文件编译完毕</echo>
	</target>
	
	<!--执行android的自带工具dx.bat用于将.class文件和第三方库打包成dex文件-->
	<!--apply标签能够见:https://ant.apache.org/manual/Tasks/apply.html-->
	<target name="dex" depends="compile">
		<echo>编译.dex文件...</echo>
		<apply executable="${dx}" failonerror="true" parallel="true">
		    <arg value="-JXms1024m" />
		    <arg value="-JXmx1536m" />
		    <arg value="-JXss1024k" />
			<arg value="--dex" />
			<arg value="--num-threads=4" />
			<arg value="--output=${out}/classes.dex" />
			<arg path="${classes}" />
		<fileset dir="${root}/libs" >
                  <include name="*.jar" />
            </fileset>
		</apply>
		<echo>编译.dex文件完毕</echo>
	</target>
	
	<!-- 打包项目的资源文件 -->
	<target name="package_res_with_assets">
		<echo>打包资源和资产文件...</echo>
		<exec executable="${aapt}" failonerror="true">
			<arg value="package" />
			<arg value="-f" />
			<arg value="-M" />
			<arg value="AndroidManifest.xml" />
			<arg value="-S" />
			<arg value="res" />
			<arg value="-A" />
			<arg value="assets" />
			<arg value="-I" />
			<arg value="${androidjar}" />
			<arg value="-F" />
			<arg value="${out}/${file_name}.ap_" />
		</exec>
		<echo>打包资源和资产文件完毕</echo>
	</target>
	
	<target name="apk" depends="dex, package_res_with_assets">
		<echo>開始打包apk...</echo>
		<exec executable="${apkbuilder}" failonerror="true">
			<arg value="${out}/${file_name}_unsigned.apk" />
			<arg value="-u" />
			<arg value="-z" />
			<arg value="${out}/${file_name}.ap_" />
			<arg value="-f" />
			<arg value="${out}/classes.dex" />
			<arg value="-rf" />
			<arg value="${root}/src" />
			<arg value="-rj" />
			<arg value="${root}/libs" />
			<arg value="-nf" />
			<arg value="${root}/libs" />
		</exec>
		<echo>成功打包apk</echo>
	</target>
	
	<!--调用jarsigner进行签名-->
	<target name="sign" depends="apk">
		<echo>開始签名...</echo>
		<exec executable="${jarsigner}" failonerror="true">
			<arg value="-verbose" />
			<arg value="-sigalg" />
			<arg value="MD5withRSA" />
			<arg value="-digestalg" />
			<arg value="SHA1" />
			<arg value="-keystore" />
			<arg value="${keystore}" />
			<arg value="-storepass" />
			<arg value="${store_pass}" />
			<arg value="-keypass" />
			<arg value="${key_pass}" />
			<arg value="-signedjar" />
			<arg value="${out}/${file_name}_signed_unzipalign.apk" />
			<arg value="${out}/${file_name}_unsigned.apk" />
			<arg value="${key_name}" />
		</exec>
		<echo>签名成功</echo>
	</target>
	
	<!-- 调用zipalign工具对签名后的包做优化 -->
	<!-- 主要是对资源做了字节对齐的优化,降低内存执行过程中的ram-->
	<!-- http://developer.android.com/tools/help/zipalign.html-->
	<target name="zipalign" depends="sign">
		<echo>開始优化...</echo>
		<exec executable="${zipalign}" failonerror="true">
			<arg value="-v" />
			<arg value="4" />
			<arg value="${out}/${file_name}_signed_unzipalign.apk" />
			<arg value="${out}/${file_name}_signed_zipaligned.apk" />
		</exec>
		<echo>结束优化</echo>
		<echo>清除编译过程中产生的数据。。。</echo>
		<delete dir="${out}/classes"> </delete>
		<echo>清除数据完毕。

</echo> </target> </project>



   
posted @ 2017-05-27 17:25  jzdwajue  阅读(111)  评论(0编辑  收藏  举报