Android使用Ant自动编译签名打包详解
1.生成R.java类文件:
- <!--GeneratetheR.javafileforthisproject'sresources.-->
- <targetname="resource-src"depends="copy">
- <echo>GeneratingR.java/Manifest.javafromtheresources...</echo>
- <execexecutable="${aapt}"failonerror="true">
- <argvalue="package"/>
- <argvalue="-m"/>
- <argvalue="-J"/>
- <argvalue="${outdir-gen}"/>
- <argvalue="-M"/>
- <argvalue="AndroidManifest.xml"/>
- <argvalue="-S"/>
- <argvalue="${resource-dir}"/>
- <argvalue="-I"/>
- <argvalue="${android-jar}"/>
- </exec>
- </target>
2.将.aidl文件生成.java类文件:
- <!--Generatejavaclassesfrom.aidlfiles.-->
- <targetname="aidl"depends="copy">
- <echo>CompilingaidlfilesintoJavaclasses...</echo>
- <applyexecutable="${aidl}"failonerror="true">
- <argvalue="-p${android-framework}"/>
- <argvalue="-I${srcdir}"/>
- <filesetdir="${srcdir}">
- <includename="**/*.aidl"/>
- </fileset>
- </apply>
- </target>
3.编译.java类文件生成class文件:
- <!--Compilethisproject's.javafilesinto.classfiles.-->
- <targetname="compile"depends="copy,resource-src,aidl">
- <javacencoding="GB18030"target="1.5"debug="true"extdirs=""srcdir="."destdir="${outdir-classes}"bootclasspath="${android-jar}">
- <classpath>
- <filesetdir="${external-libs}"includes="*.jar"/>
- </classpath>
- </javac>
- </target>
- <!--Convertthisproject's.classfilesinto.dexfiles.-->
- <targetname="dex"depends="compile">
- <echo>Convertingcompiledfilesandexternallibrariesinto${outdir}/${dex-file}...</echo>
- <applyexecutable="${dx}"failonerror="true"parallel="true">
- <argvalue="--dex"/>
- <argvalue="--output=${intermediate-dex-ospath}"/>
- <argpath="${outdir-obfuscate-classes-ospath}"/>
- <filesetdir="${external-libs}"includes="*.jar"/>
- </apply>
- </target>
5.打包资源文件(包括res、assets、androidmanifest.xml等):
- <!--Puttheproject'sresourcesintotheoutputpackagefile.-->
- <targetname="package-res-and-assets">
- <echo>Packagingresourcesandassets...</echo>
- <execexecutable="${aapt}"failonerror="true">
- <argvalue="package"/>
- <argvalue="-f"/>
- <argvalue="-M"/>
- <argvalue="AndroidManifest.xml"/>
- <argvalue="-S"/>
- <argvalue="${resource-dir}"/>
- <argvalue="-A"/>
- <argvalue="${asset-dir}"/>
- <argvalue="-I"/>
- <argvalue="${android-jar}"/>
- <argvalue="-F"/>
- <argvalue="${resources-package}"/>
- </exec>
- </target>
6.生成未签名的apk安装文件:
- <targetname="package"depends="dex,package-res">
- <echo>Packaging${out-unsigned-package}forrelease...</echo>
- <execexecutable="${apk-builder}"failonerror="true">
- <argvalue="${out-unsigned-package-ospath}"/>
- <argvalue="-u"/>
- <argvalue="-z"/>
- <argvalue="${resources-package-ospath}"/>
- <argvalue="-f"/>
- <argvalue="${intermediate-dex-ospath}"/>
- <argvalue="-rf"/>
- <argvalue="${srcdir-ospath}"/>
- <argvalue="-rj"/>
- <argvalue="${external-libs-ospath}"/>
- </exec>
- <echo>Itwillneedtobesignedwithjarsignerbeforebeingpublished.</echo>
- </target>
- <targetname="jarsigner"depends="package">
- <echo>Packaging${out-unsigned-package}forrelease...</echo>
- <execexecutable="${jarsigner}"failonerror="true">
- <argvalue="-verbose"/>
- <argvalue="-storepass"/>
- <argvalue="byread002"/>
- <argvalue="-keypass"/>
- <argvalue="byread002"/>
- <argvalue="-keystore"/>
- <argvalue="bbyread.keystore"/>
- <argvalue="-signedjar"/>
- <argvalue="${out-signed-package-ospath}"/>
- <argvalue="${out-unsigned-package-ospath}"/>
- <argvalue="byread"/>
- </exec>
- </target>
*完整Ant配置文件build.xml:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <projectname="Byread"default="debug">
- <propertyenvironment="env"/>
- <propertyname="sdk-folder"value="${env.ANDROID_SDK_HOME}"/>
- <!--SDKLocations-->
- <propertyname="sdk2.2-folder"value="${env.ANDROID_SDK_HOME}"/>
- <propertyname="sdk-folder"value="${sdk2.2-folder}/platforms/android-3"/>
- <propertyname="sdk-tools"value="${sdk-folder}/tools"/>
- <propertyname="android-tools"value="${sdk2.2-folder}/tools"/>
- <propertyname="proguardpath"location="${wtkhome}/lib/proguard"/>
- <!--step1.generateR.javabyaapt2.compilejavatoclassbyjavac。exe3.generateclasses.dexbydx.bat-->
- <!--4.packageresourcesbyaapt5.packageresourceandclasses.dexbyapkbuilder.bat6.signapkbyjarsinger-->
- <!--Tools-->
- <propertyname="aapt"value="${sdk-tools}/aapt.exe"/>
- <propertyname="dx"value="${sdk-tools}/dx.bat"/>
- <propertyname="apk-builder"value="${android-tools}/apkbuilder.bat"/>
- <propertyname="aidl"value="${android-tools}/aidl.exe"/>
- <propertyname="adb"value="${android-tools}/adb.exe"/>
- <propertyname="android-jar"value="${sdk-folder}/android.jar"/>
- <propertyname="jarsigner"value="${env.JAVA_HOME}/bin/jarsigner.exe"/>
- <!--ApplicationPackageName-->
- <propertyname="application-package"value="com.byread.reader"/>
- <propertyname="useragent"value="byAndroidWeb"/>
- <propertyname="version"value="1.02"/>
- <!--Theintermediatesdirectory-->
- <!--Eclipseuses"bin"foritsownoutput,sowedothesame.-->
- <propertyname="outdir-bin"value="bin"/>
- <propertyname="outdir-gen"value="gen"/>
- <!--sourcedirectories-->
- <propertyname="resource-dir"value="res"/>
- <propertyname="asset-dir"value="assets"/>
- <propertyname="srcdir"value="src"/>
- <propertyname="srcdir-ospath"value="${basedir}/${srcdir}"/>
- <propertyname="external-libs"value="libs"/>
- <propertyname="external-libs-ospath"value="${basedir}/${external-libs}"/>
- <!--destdirectories-->
- <propertyname="des-resource-dir"value="${outdir-bin}/res"/>
- <propertyname="des-asset-dir"value="${outdir-bin}/assets"/>
- <propertyname="des-srcdir"value="${outdir-bin}/src"/>
- <propertyname="des-srcdir-ospath"value="${basedir}/${outdir-bin}/${srcdir}"/>
- <propertyname="des-external-libs"value="${outdir-bin}/libs"/>
- <propertyname="des-external-libs-ospath"value="${basedir}/${outdir-bin}/${external-libs}"/>
- <!--Outputdirectories-->
- <propertyname="outdir-classes"value="${outdir-bin}/src"/>
- <propertyname="outdir-obfuscate-classes"value="${outdir-bin}/classes"/>
- <propertyname="outdir-obfuscate-classes-ospath"value="${basedir}/${outdir-obfuscate-classes}"/>
- <!--Intermediatefiles-->
- <propertyname="dex-file"value="classes.dex"/>
- <propertyname="intermediate-dex"value="${outdir-bin}/${dex-file}"/>
- <propertyname="intermediate-dex-ospath"value="${basedir}/${intermediate-dex}"/>
- <!--Thefinalpackagefiletogenerate-->
- <propertyname="resources-package"value="${outdir-bin}/${ant.project.name}"/>
- <propertyname="resources-package-ospath"value="${basedir}/${resources-package}"/>
- <propertyname="out-debug-package"value="${outdir-bin}/${ant.project.name}-debug.apk"/>
- <propertyname="out-debug-package-ospath"value="${basedir}/${out-debug-package}"/>
- <propertyname="out-unsigned-package"value="${outdir-bin}/${ant.project.name}-unsigned.apk"/>
- <propertyname="out-unsigned-package-ospath"value="${basedir}/${out-unsigned-package}"/>
- <propertyname="out-signed-package"value="${useragent}/${ant.project.name}.apk"/>
- <propertyname="out-signed-package-ospath"value="${basedir}/${out-signed-package}"/>
- <!--init-->
- <targetname="init">
- <echo>Creatingalloutputdirectories</echo>
- <deletedir="${outdir-bin}"/>
- <deletedir="${useragent}"/>
- <mkdirdir="${outdir-bin}"/>
- <mkdirdir="${outdir-classes}"/>
- <mkdirdir="${useragent}"/>
- </target>
- <!--copyoriginalstringsandmodifyuseragent-->
- <targetname="copy"depends="init">
- <echo>copyfilestooutputfolder</echo>
- <deletefile="${resource-dir}/values/strings.xml"/>
- <copyfile="strings.xml"todir="${resource-dir}/values"/>
- <replacefile="${resource-dir}/values/strings.xml"token="@USERAGENT@"value="${useragent}"encoding="utf-8"/>
- </target>
- <!--GeneratetheR.javafileforthisproject'sresources.-->
- <targetname="resource-src"depends="copy">
- <echo>GeneratingR.java/Manifest.javafromtheresources...</echo>
- <execexecutable="${aapt}"failonerror="true">
- <argvalue="package"/>
- <argvalue="-m"/>
- <argvalue="-J"/>
- <argvalue="${outdir-gen}"/>
- <argvalue="-M"/>
- <argvalue="AndroidManifest.xml"/>
- <argvalue="-S"/>
- <argvalue="${resource-dir}"/>
- <argvalue="-I"/>
- <argvalue="${android-jar}"/>
- </exec>
- </target>
- <!--Generatejavaclassesfrom.aidlfiles.-->
- <targetname="aidl"depends="copy">
- <echo>CompilingaidlfilesintoJavaclasses...</echo>
- <applyexecutable="${aidl}"failonerror="true">
- <argvalue="-p${android-framework}"/>
- <argvalue="-I${srcdir}"/>
- <filesetdir="${srcdir}">
- <includename="**/*.aidl"/>
- </fileset>
- </apply>
- </target>
- <!--Compilethisproject's.javafilesinto.classfiles.-->
- <targetname="compile"depends="copy,resource-src,aidl">
- <javacencoding="GB18030"target="1.5"debug="true"extdirs=""srcdir="."destdir="${outdir-classes}"bootclasspath="${android-jar}">
- <classpath>
- <filesetdir="${external-libs}"includes="*.jar"/>
- </classpath>
- </javac>
- </target>
- <!--Convertthisproject's.classfilesinto.dexfiles.-->
- <targetname="dex"depends="compile">
- <echo>Convertingcompiledfilesandexternallibrariesinto${outdir}/${dex-file}...</echo>
- <applyexecutable="${dx}"failonerror="true"parallel="true">
- <argvalue="--dex"/>
- <argvalue="--output=${intermediate-dex-ospath}"/>
- <argpath="${outdir-obfuscate-classes-ospath}"/>
- <filesetdir="${external-libs}"includes="*.jar"/>
- </apply>
- </target>
- <!--Puttheproject'sresourcesintotheoutputpackagefile.-->
- <targetname="package-res-and-assets">
- <echo>Packagingresourcesandassets...</echo>
- <execexecutable="${aapt}"failonerror="true">
- <argvalue="package"/>
- <argvalue="-f"/>
- <argvalue="-M"/>
- <argvalue="AndroidManifest.xml"/>
- <argvalue="-S"/>
- <argvalue="${resource-dir}"/>
- <argvalue="-A"/>
- <argvalue="${asset-dir}"/>
- <argvalue="-I"/>
- <argvalue="${android-jar}"/>
- <argvalue="-F"/>
- <argvalue="${resources-package}"/>
- </exec>
- </target>
- <!--Sameaspackage-res-and-assets,butwithout"-A${asset-dir}"-->
- <targetname="package-res-no-assets">
- <echo>Packagingresources...</echo>
- <execexecutable="${aapt}"failonerror="true">
- <argvalue="package"/>
- <argvalue="-f"/>
- <argvalue="-M"/>
- <argvalue="AndroidManifest.xml"/>
- <argvalue="-S"/>
- <argvalue="${resource-dir}"/>
- <!--Noassetsdirectory-->
- <argvalue="-I"/>
- <argvalue="${android-jar}"/>
- <argvalue="-F"/>
- <argvalue="${resources-package}"/>
- </exec>
- </target>
- <!--Invokethepropertargetdependingonwhetherornot
- anassetsdirectoryispresent.-->
- <!--TODO:findanicerwaytoincludethe"-A${asset-dir}"argument
- onlywhentheassetsdirexists.-->
- <targetname="package-res">
- <availablefile="${asset-dir}"type="dir"property="res-target"value="and-assets"/>
- <propertyname="res-target"value="no-assets"/>
- <antcalltarget="package-res-${res-target}"/>
- </target>
- <!--Packagetheapplicationandsignitwithadebugkey.
- Thisisthedefaulttargetwhenbuilding.Itisusedfordebug.-->
- <targetname="debug"depends="dex,package-res">
- <echo>Packaging${out-debug-package},andsigningitwithadebugkey...</echo>
- <execexecutable="${apk-builder}"failonerror="true">
- <argvalue="${out-debug-package-ospath}"/>
- <argvalue="-z"/>
- <argvalue="${resources-package-ospath}"/>
- <argvalue="-f"/>
- <argvalue="${intermediate-dex-ospath}"/>
- <argvalue="-rf"/>
- <argvalue="${srcdir-ospath}"/>
- <argvalue="-rj"/>
- <argvalue="${external-libs-ospath}"/>
- </exec>
- </target>
- <!--Packagetheapplicationwithoutsigningit.
- Thisallowsfortheapplicationtobesignedlaterwithanofficialpublishingkey.-->
- <targetname="package"depends="dex,package-res">
- <echo>Packaging${out-unsigned-package}forrelease...</echo>
- <execexecutable="${apk-builder}"failonerror="true">
- <argvalue="${out-unsigned-package-ospath}"/>
- <argvalue="-u"/>
- <argvalue="-z"/>
- <argvalue="${resources-package-ospath}"/>
- <argvalue="-f"/>
- <argvalue="${intermediate-dex-ospath}"/>
- <argvalue="-rf"/>
- <argvalue="${srcdir-ospath}"/>
- <argvalue="-rj"/>
- <argvalue="${external-libs-ospath}"/>
- </exec>
- <echo>Itwillneedtobesignedwithjarsignerbeforebeingpublished.</echo>
- </target>
- <targetname="jarsigner"depends="package">
- <echo>Packaging${out-unsigned-package}forrelease...</echo>
- <execexecutable="${jarsigner}"failonerror="true">
- <argvalue="-verbose"/>
- <argvalue="-storepass"/>
- <argvalue="byread002"/>
- <argvalue="-keypass"/>
- <argvalue="byread002"/>
- <argvalue="-keystore"/>
- <argvalue="bbyread.keystore"/>
- <argvalue="-signedjar"/>
- <argvalue="${out-signed-package-ospath}"/>
- <argvalue="${out-unsigned-package-ospath}"/>
- <argvalue="byread"/>
- </exec>
- </target>
- <targetname="release"depends="jarsigner">
- <echo>releaseforrelease...</echo>
- </target>
- <!--Installthepackageonthedefaultemulator-->
- <targetname="install"depends="debug">
- <echo>Installing${out-debug-package}ontodefaultemulator...</echo>
- <execexecutable="${adb}"failonerror="true">
- <argvalue="install"/>
- <argvalue="${out-debug-package}"/>
- </exec>
- </target>
- <targetname="reinstall"depends="debug">
- <echo>Installing${out-debug-package}ontodefaultemulator...</echo>
- <execexecutable="${adb}"failonerror="true">
- <argvalue="install"/>
- <argvalue="-r"/>
- <argvalue="${out-debug-package}"/>
- </exec>
- </target>
- <!--Uinstallthepackagefromthedefaultemulator-->
- <targetname="uninstall">
- <echo>Uninstalling${application-package}fromthedefaultemulator...</echo>
- <execexecutable="${adb}"failonerror="true">
- <argvalue="uninstall"/>
- <argvalue="${application-package}"/>
- </exec>
- </target>
- </project>
*在工程目录下建立一个build.bat批处理文件,内容为:
ant -buildfile build.xml
运行这个批处理文件即可。
注意:SDK的安装目录最后不要有中文和空格,否则会出现不必要的错误。如果你的安装路径包含Program Files(有空格),Ant方式打包会报错,没关系,不用重装,解决方法:配置SDk环境变量的时候把Program Files改为Progra~1即可。
转自:http://jojol-zhou.iteye.com/blog/729271
相关推荐
因为项目的需要必须写一个ANDROID_ANT自动编译打包签名的脚本,终于奋斗了几天写完了,和大家分享一下
本资源详细的描述了如何使用Ant批量多渠道导报Android应用。运营是需要上传应用到20几个市场上去,这个时候需要批量打不通tag的包,以便友盟能够统计得到各通道下载量
通过ant脚本,编译打包android工程。 编译打包android工程的ant脚本,Android官方提供的打包脚本。 有注释
使用Ant编译打包
android使用ant自动构建,打包,更多参考文章 http://www.67tgb.com/?p=629
mac下是用ant对android App的多渠道打包工具。
使用ant打包android,使用ant打包android
使用ant编译、签名、优化打包apk文件 附件为一个build.properties文件和一个build.xml文件。 执行的前提是需要配置好ANT_HOME、ANDROID_HOME、JAVA_HOME环境变量。
Ant编译打包android工程,签名,多渠道
Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件 详见:http://www.cnblogs.com/ycxyyzw/p/4535459.html
在Java 中应用是平台无关性的,当然不会用平台相关的make脚本来完成这些批处理任务了,ANT本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。本文介绍了android编译和ant打包原理
关于最新的Android Sdk 使用Ant多渠道批量打包的实现的文章可以看我的博客。
SVN+ant 服务器代码打包编译流程详解,内含详细安装以及操作说明build.xml+build.properties详解,可以直接修改路径后打包编译SVN代码。
ant脚本编译出jar
使用ant编译打包应用程序,比较简单,适合初学者。
NULL 博文链接:https://wenzongliang.iteye.com/blog/2179121
Android中使用Ant方式打包,一次打出N个渠道的包。
在网页后台,使用Ant编译项目多渠道自动打包app应用
ant标签说明、ant案例、ant与eclipse工具配置以及使用
ant 是一个编译打包工具 只需解压便可使用 下载后有两个文件: apache-ant-1.8.2-src.zip 是源文件发布 apache-ant-1.8.2-bin.zip 是二进制发布