<?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="${lib}" > <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>
原文地址:http://blog.csdn.net/codebob/article/details/39959651