利用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}" failοnerrοr="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}" failοnerrοr="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}" failοnerrοr="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}" failοnerrοr="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}" failοnerrοr="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}" failοnerrοr="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>