ant编译android工程用批处理打包

1.先配置文件目录:<!--配置文件local.properies-->

sdk.dir=D:\\android-sdk\\android-sdk

project.sdkenv=D:\\android-sdk\\android-sdk

project.antenv=C:\\ant_1.9.3\\lib\\ant-contrib-1.0b3.jar

#projectnameandversion<!--工程名和版本-->

project.name=工程名

project.version=V1.00.10

#keysorefile<!--工程签名-->

keystore.file=platform.keystore

key.alias=android

key.alias.password=android

key.store.password=android

#libraryproject<!--工程引用-->

library-dir=D:\\androidPro\\..

library-dir2=D:\\androidPro\\..

2.编写build.xml

<!--build.xml-->

<?xmlversion="1.0"encoding="UTF-8"?>

<projectname="包名"default="help"basedir=".">

<propertyfile="local.properties"/>

<!--环境变量-->

<propertyenvironment="env"/>

<!--应用名称-->

<propertyname="appName"value="${project.name}"/>

<!--应用版本号-->

<propertyname="appVersions"value="${project.version}"/>

<!--SDK目录-->

<propertyname="sdk-folder"value="${project.sdkenv}"/>

<!--SDK指定平台目录-->

<propertyname="sdk-platform-folder"value="${sdk-

folder}/platforms/android-19"/>

<!--SDK中tools目录-->

<propertyname="sdk-tools"value="${sdk-folder}/tools"/>

<!--SDK指定平台中tools目录-->

<propertyname="sdk-platform-tools"value="${sdk-

folder}/build-tools/19.0.1"/>

<!--SDK命令-->

<propertyname="aapt"value="${sdk-platform-tools}/aapt"/>

<propertyname="aidl"value="${sdk-platform-tools}/aidl"/>

<propertyname="dx"value="${sdk-platform-tools}/dx.bat"/>

<propertyname="apkbuilder"value="${sdk-

tools}/apkbuilder.bat"/>

<propertyname="jarsigner"

value="${env.JAVA_HOME}/bin/jarsigner"/>

<propertyname="zipalign"value="${sdk-tools}/zipalign.exe"/>

<propertyname="proguard-home"value="${sdk-

tools}/proguard/lib/proguard.jar"/>

<!--编译需要的jar-->

<propertyname="android-jar"value="${sdk-platform-

folder}/android.jar"/>

<!--项目使用到地图服务则需要maps.jar-->

<propertyname="android-maps-jar"value="${sdk-folder}/add-

ons/addon-google_apis-google-19/libs/maps.jar"/>

<!--编译aidl文件所需的预处理框架文件framework.aidl-->

<propertyname="framework-aidl"value="${sdk-platform-

folder}/framework.aidl"/>

<!--清单文件-->

<propertyname="manifest-xml"value="AndroidManifest.xml"/>

<!--源文件目录-->

<propertyname="resource-dir"value="res"/>

<propertyname="asset-dir"value="assets"/>

<!--java源文件目录-->

<propertyname="srcdir"value="src"/>

<propertyname="srcdir-ospath"value="${basedir}/${srcdir}"/>

<!--外部类库所在目录-->

<propertyname="external-lib"value="libs"/>

<propertyname="external-lib-ospath"value="${basedir}/

${external-lib}"/>

<propertyname="external-library-dir-lib-ospath"

value="${library-dir}/${external-lib}"/>

<propertyname="external-library-dir2-lib-ospath"

value="${library-dir2}/${external-lib}"/>

<!--使用第三方的ant包,使ant支持for循环-->

<taskdefresource="net/sf/antcontrib/antcontrib.properties">

<classpath>

<pathelementlocation="${project.antenv}"/>

</classpath>

</taskdef>

<!--初始化工作-->

<targetname="init">

<echo>目录初始化....</echo>

<varname="out"value="out"/>

<!--生成R文件的相对目录-->

<varname="outdir-gen"value="gen"/>

<!--编译后的文件放置目录-->

<varname="outdir-bin"value="bin-new"/>

<!--生成class目录-->

<varname="outdir-classes"value="${outdir-

bin}/classes"/>

<varname="outdir-classes-ospath"value="${basedir}/

${outdir-classes}"/>

<!--classes.dex相关变量-->

<varname="dex-file"value="classes.dex"/>

<varname="dex-path"value="${outdir-bin}/${dex-file}"

/>

<varname="dex-ospath"value="${basedir}/${dex-path}"

/>

<!--经过aapt生成的资源包文件-->

<varname="resources-package"value="${outdir-

bin}/resources.ap_"/>

<varname="resources-package-ospath"

value="${basedir}/${resources-package}"/>

<!--未认证apk包-->

<varname="out-unsigned-package"value="${outdir-

bin}/${appName}_${appVersions}_unsigned.apk"/>

<varname="out-unsigned-package-ospath"

value="${basedir}/${out-unsigned-package}"/>

<!--已认证apk包-->

<varname="out-signed-package"value="${outdir-bin}/

${appName}_${appVersions}_signed.apk"/>

<varname="out-signed-package-ospath"

value="${basedir}/${out-signed-package}"/>

<!--已优化apk包-->

<varname="zipalign-signed-package"value="${outdir-bin}/

${appName}_${appVersions}_zipalign.apk"/>

<deletedir="${outdir-bin}"/>

<mkdirdir="${outdir-bin}"/>

<mkdirdir="${outdir-classes}"/>

</target>

<!--根据工程中的资源文件生成R.java文件-->

<targetname="gen-R"depends="init">

<echo>生成R.java文件....</echo>

<execexecutable="${aapt}"failonerror="true">

<argvalue="package"/>

<argvalue="-f"/>

<argvalue="-m"/>

<argvalue="-J"/>

<argvalue="${outdir-gen}"/>

<argvalue="-M"/>

<argvalue="${manifest-xml}"/>

<argvalue="-S"/>

<argvalue="${resource-dir}"/>

<argvalue="-I"/>

<argvalue="${android-jar}"/>

</exec>

</target>

<!--编译aidl文件-->

<targetname="aidl"depends="gen-R">

<echo>编译aidl文件....</echo>

<applyexecutable="${aidl}"failonerror="true">

<!--指定预处理文件-->

<argvalue="-p${framework-aidl}"/>

<!--aidl声明的目录-->

<argvalue="-I${srcdir}"/>

<!--目标文件目录-->

<argvalue="-o${outdir-gen}"/>

<!--指定哪些文件需要编译-->

<filesetdir="${srcdir}">

<includename="**/*.aidl"/>

</fileset>

</apply>

</target>

<!--将工程中的java源文件编译成class文件-->

<targetname="compile"depends="aidl">

<echo>正在编译Java源文件...</echo>

<!--mavlink编译class-->

<javacencoding="UTF-8"destdir="${outdir-classes}"

bootclasspath="${android-jar}">

<srcpath="${library-dir2}/src"/>

<classpath>

<filesetdir="${external-library-dir2-lib-ospath}"

includes="*.jar"/>

</classpath>

</javac>

<!--core编译class-->

<javacencoding="UTF-8"destdir="${outdir-classes}"

bootclasspath="${android-jar}">

<srcpath="${library-dir}/src"/>

<classpath>

<filesetdir="${external-library-dir-lib-ospath}"

includes="*.jar"/>

</classpath>

</javac>

<!--主类编译class-->

<javacencoding="UTF-8"target="1.7"

srcdir="${basedir}"includeAntRuntime="false"destdir="${outdir-

classes}"bootclasspath="${android-jar}"verbose="false"debug="on">

<classpath>

<filesetdir="${external-lib}"

includes="*.jar"/>

<filesetdir="${external-library-dir-

lib-ospath}"includes="*.jar"/>

<filesetdir="${external-library-dir2

-lib-ospath}"includes="*.jar"/>

<filelist>

<filename="${android-maps-jar}"/>

</filelist>

</classpath>

</javac>

</target>

<!--进行class混淆后期添加-->

<!--<targetname="obfuscate"depends="compile">

<echo>正在进行class混淆。。。</echo>

<jarbasedir="${outdir-classes}"destfile="${outdir-

bin}/temp.jar"/>

<javajar="${android.proguard}"fork="true"

failonerror="true">

<jvmargvalue="-Dmaximum.inlined.code.length=16"/>

<argvalue="@${basedir}/proguard.cfg"/>

<argvalue="-injars${outdir-bin}/temp.jar"/>

<argvalue="-outjars./dist/obfuscated.jar"/>

<argvalue="-libraryjars${android-jar}"/>

<argvalue="-libraryjars

${library_annotation}/annotations.jar"/>第三方jar包需要引用,用于辅助

编译

</java>

<deletedir="${outdir-classes}"/>

<mkdirdir="${outdir-classes}"/>

<unzipsrc="./dist/obfuscated.jar"dest="${outdir-

classes}"/>

<deletedir="./dist"/>

<deletefile="${outdir-bin}/temp.jar"/>

</target>-->

<!--将.class文件转化成.dex文件-->

<targetname="dex"depends="compile">

<echo>正在将.class文件转化成.dex文件...</echo>

<execexecutable="${dx}"failonerror="true">

<argvalue="--dex"/>

<!--输出文件-->

<argvalue="--output=${dex-ospath}"/>

<!--要生成.dex文件的源classes和libraries-->

<argvalue="${outdir-classes-ospath}"/>

<argvalue="${external-lib-ospath}"/>

</exec>

</target>

<!--将资源文件放进输出目录-->

<targetname="package-res-and-assets">

<echo>正在打包资源文件...</echo>

<execexecutable="${aapt}"failonerror="true">

<argvalue="package"/>

<argvalue="-f"/>

<argvalue="-M"/>

<argvalue="${manifest-xml}"/>

<argvalue="-S"/>

<argvalue="${resource-dir}"/>

<argvalue="-A"/>

<argvalue="${asset-dir}"/>

<argvalue="-I"/>

<argvalue="${android-jar}"/>

<argvalue="-F"/>

<argvalue="${resources-package}"/>

</exec>

</target>

<!--打包成未签证的apk-->

<targetname="package"depends="dex,package-res-and-assets">

<echo>正在生成未签名apk...</echo>

<execexecutable="${apkbuilder}"failonerror="true">

<argvalue="${out-unsigned-package-ospath}"/>

<argvalue="-u"/>

<argvalue="-z"/>

<argvalue="${resources-package-ospath}"/>

<argvalue="-f"/>

<argvalue="${dex-ospath}"/>

<argvalue="-rf"/>

<argvalue="${srcdir-ospath}"/>

<!--将第三方的资源文件打包进去-->

<argvalue="-rj"/>

<argvalue="${external-lib-ospath}"/>

<!--将so文件打包进去-->

<argvalue="-nf"/>

<argvalue="${external-lib-ospath}"/>

</exec>

</target>

<!--对apk进行签名-->

<targetname="jarsigner"depends="package">

<echo>正在为apk文件签名...(默认为开发模式下签名文件)

</echo>

<execexecutable="${jarsigner}"failonerror="true">

<argvalue="-keystore"/>

<argvalue="${keystore.file}"/>

<argvalue="-storepass"/>

<argvalue="${key.store.password}"/>

<argvalue="-keypass"/>

<argvalue="${key.alias.password}"/>

<argvalue="-signedjar"/>

<argvalue="${out-signed-package-ospath}"/>

<argvalue="${out-unsigned-package-ospath}"/>

<!--证书的别名-->

<argvalue="${key.alias}"/>

</exec>

<echo>签名完成</echo>

<!--删除未签证apk-->

<deletefile="${out-unsigned-package-ospath}"/>

</target>

<!--打包的应用程序进行优化-->

<targetname="zipalign"depends="jarsigner">

<echo>正在优化apk...</echo>

<execexecutable="${zipalign}"failonerror="true">

<argvalue="-v"/>

<argvalue="4"/>

<argvalue="${out-signed-package-ospath}"/>

<argvalue="${zipalign-signed-package}"/>

</exec>

<echo>优化完成</echo>

<!--删除未优化apk-->

<deletefile="${out-signed-package-ospath}"/>

</target>

<!--发布-->

<targetname="release"depends="zipalign">

<echo>APK打包完成,apk对应的路径为:${zipalign-signed-

package}</echo>

</target>

</project>

3.编写批处理文件

cmd->antrealease就可以了

相关推荐