ant自动打包android项目

     android项目在发布的时候,经常需要用到自动打包。

    使用ant打包是非常快捷方便的

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project name="Game" default="release"  basedir=".">
  3 
  4     <!-- ANT环境变量 -->
  5     <property environment="env" />
  6     <!-- 应用名称 -->
  7     <property name="appName" value="${ant.project.name}" />
  8     <!-- 应用版本 -->
  9     <property name="version" value="1.0" />
 10     <!-- ANDROID SDK 目录 -->
 11     <property name="sdk-folder" value="${env.ANDROID_SDK_HOME}" />
 12     <!-- SDK指定平台目录 ,指定相应的平台-->
 13     <property name="sdk-platform-folder" value="${sdk-folder}/platforms/android-4.2" />
 14     <!-- SDK中tools目录 -->
 15     <property name="sdk-tools" value="${sdk-folder}/tools" />
 16     <!-- SDK指定平台中platform tools目录 -->
 17     <property name="sdk-platform-tools" value="${sdk-folder}/platform-tools" />
 18     <!-- 使用到的命令 -->
 19     <property name="aapt" value="${sdk-platform-tools}/aapt" />
 20     <property name="zipalign" value="${sdk-tools}/zipalign" />
 21     <property name="aidl" value="${sdk-platform-tools}/aidl" />
 22     <property name="dx" value="${sdk-platform-tools}/dx" />
 23     <property name="apkbuilder" value="${sdk-tools}/apkbuilder" />
 24     <property name="jarsigner" value="/usr/bin/jarsigner" />
 25     <!-- 编译需要的jar  -->
 26     <property name="android-jar" value="${sdk-platform-folder}/android.jar" />
 27     <!-- 生成R文件的相对目录 -->
 28     <property name="outdir-gen" value="gen" />
 29     <!-- 编译后的文件放置目录 -->
 30     <property name="outdir-bin" value="bin" />
 31     <!-- 清单文件 -->
 32     <property name="manifest-xml" value="${basedir}/AndroidManifest.xml" />
 33     <!-- 源文件目录 -->
 34     <property name="resource-dir" value="res" />
 35     <property name="asset-dir" value="assets" />
 36     <!-- 资源文件目录 -->
 37     <property name="drawable-dir" value="${resource-dir}/drawable" />
 38     <property name="drawable-hdpi-dir" value="${resource-dir}/drawable-hdpi"/>
 39     <property name="drawable-ldpi-dir" value="${resource-dir}/drawable-ldpi"/>
 40     <property name="drawable-mdpi-dir" value="${resource-dir}/drawable-mdpi"/>
 41     <property name="drawable-zh-rCN-dir" value="${resource-dir}/drawable-zh-rCN"/>
 42     <!-- java源文件目录 -->
 43     <property name="srcdir" value="srctemp" />
 44     <property name="srcdir-ospath" value="${basedir}/${srcdir}" />
 45     <!-- 动态库so文件目录 -->
 46     <property name="library" value="${basedir}/libs" />
 47     <!-- 第三方library -->
 48     <property name="library-dir" value="" />
 49     <!-- 外部类库所在目录 -->
 50     <property name="external-lib" value="lib" />
 51     <property name="external-lib-ospath" value="${basedir}/${external-lib}" />
 52     <!-- 生成class目录 -->
 53     <property name="outdir-classes" value="${outdir-bin}/classes" />
 54     <property name="outdir-classes-ospath" value="${basedir}/${outdir-classes}" />
 55     <!-- classes.dex相关变量 -->
 56     <property name="dex-file" value="classes.dex" />
 57     <property name="dex-path" value="${outdir-bin}/${dex-file}" />
 58     <property name="dex-ospath" value="${basedir}/${dex-path}" />
 59     <!-- 经过aapt生成的资源包文件 -->
 60     <property name="resources-package" value="${outdir-bin}/resources.ap_" />
 61     <property name="resources-package-ospath" value="${basedir}/${resources-package}" />
 62     <!-- 未认证apk包 -->
 63     <property name="out-unsigned-package" value="${outdir-bin}/${appName}-unsigned.apk" />
 64     <property name="out-unsigned-package-ospath" value="${basedir}/${out-unsigned-package}" />
 65     <!-- 证书文件 -->
 66     <property name="keystore-file" value="${basedir}/fishkey.keystore" />
 67     <!-- 已认证apk包 -->
 68     <property name="out-signed-package" value="${outdir-bin}/${appName}-signed.apk" />
 69     <property name="out-signed-package-ospath" value="${basedir}/${out-signed-package}" />
 70     <!-- 已优化apk包 -->
 71     <property name="zipalign-signed-package" value="${outdir-bin}/${appName}${version}_release.apk" />
 72 
 73     <!-- 初始化工作 -->
 74     <target name="init">
 75         <echo>Initializing all output directories...</echo>
 76         <delete dir="${outdir-bin}" />
 77         <delete dir="${outdir-gen}" />
 78         <mkdir dir="${outdir-gen}" />
 79         <mkdir dir="${outdir-bin}" />
 80         <mkdir dir="${outdir-classes}" />
 81     </target>    
 82     <!-- 根据工程中的资源文件生成R.java文件 -->
 83     <target name="GenRJAVA" depends="init">
 84         <echo>Generating R.java / Manifest.java from the resources...</echo>
 85         <exec executable="${aapt}" failonerror="true">
 86             <arg value="package" /><!-- package表示打包-->
 87             <arg value="-m" /><!--m,J,gen表示创建包名的目录和R.java到gen目录下 -->
 88             <arg value="-J" />
 89             <arg value="${outdir-gen}" />
 90             <arg value="-M" /><!-- M指定AndroidManifest.xml文件-->
 91             <arg value="${manifest-xml}" />
 92             <arg value="-S" /><!-- S指定res目录,生成对应的ID,可多个-->
 93             <arg value="${resource-dir}" />
 94             <arg value="-I" /><!-- I指定android包的位置-->
 95             <arg value="${android-jar}" />
 96             <arg value="--auto-add-overlay" /> <!-- 这个重要,覆盖资源,不然报错-->
 97         </exec>
 98     </target>
 99     <!-- 将工程及库应用中的java源文件编译成class文件 -->
100     <target name="compile" depends="GenRJAVA">
101         <echo>Compiling java source code...</echo>
102         <javac encoding="UTF-8" target="1.6" destdir="${outdir-classes}" bootclasspath="${android-jar}">
103             <src path="${srcdir-ospath}" /><!-- 工程源码-->
104             <src path="${outdir-gen}" /><!-- 生成的class文件全部保存到bin/classes目录下 -->
105             <classpath>
106                 <fileset dir="${library}" includes="*.jar" /><!-- 第三方jar包需要引用,用于辅助编译 -->
107             </classpath>
108         </javac>
109     </target>
110    <!-- 将.class文件转化成.dex文件 -->
111    <target name="dex" depends="compile">
112         <echo>Converting compiled files and external libraries into ${outdir-dx}test.dex...</echo>
113         <exec executable="${dx}" failonerror="true">
114             <arg value="--dex" />
115             <arg value="--output=${dex-ospath}" /><!-- 输出 -->
116             <arg path="${outdir-classes}" /><!-- classes文件位置 -->
117             <arg value="${library}" /> <!-- 把libs下所有jar打包 -->
118         </exec>
119     </target>
120     <!-- 打包资源 -->
121     <target name="package-res-and-assets">
122         <echo>Packaging resources and assets...</echo>
123         <exec executable="${aapt}" failonerror="true">
124             <arg value="package" />
125             <arg value="--no-crunch" />
126             <arg value="--generate-dependencies" />
127             <arg value="-v" />
128             <arg value="-f" /><!-- 资源覆盖重写 -->
129             <arg value="-M" />
130             <arg value="${manifest-xml}" />
131             <arg value="-S" />
132             <arg value="${resource-dir}" />
133             <arg value="-A" /><!-- asset目录也打包 -->
134             <arg value="${asset-dir}" />
135             <arg value="-I" />
136             <arg value="${android-jar}" />
137             <arg value="-F" /><!-- 输出资源压缩包 -->
138             <arg value="${resources-package}" />
139             <arg value="--auto-add-overlay" /><!---->
140         </exec>
141     </target>
142     <!-- 打包成未签证的apk -->
143     <target name="package" depends="dex,package-res-and-assets">
144         <echo>Packaging unsigned apk for release...</echo>
145         <exec executable="${apkbuilder}" >
146             <arg value="${out-unsigned-package-ospath}" /><!-- 输出 -->
147             <arg value="-u" /><!-- u指创建未签名的包-->
148             <arg value="-z" /> <!-- 资源压缩包 -->
149             <arg value="${resources-package-ospath}" />
150             <arg value="-f" /><!-- dex文件 -->
151             <arg value="${dex-ospath}" />
152             <arg value="-nf"/><!-- 把libs下的so库打包 -->
153             <arg value="${library}" />
154         </exec>
155         <echo>It will need to be signed with jarsigner before being published.</echo>
156     </target>
157     <!-- 对apk进行签证 -->
158     <target name="jarsigner" depends="package">
159         <echo>Packaging signed apk for release...</echo>
160         <exec executable="${jarsigner}" failonerror="true">
161             <arg value="-verbose" />
162             <arg value="-keystore" />
163             <arg value="${keystore-file}" />
164             <arg value="-storepass" />
165             <arg value="*****" /><!-- 验证密钥完整性的口令,创建时建立的 -->
166             <arg value="-keypass" />
167             <arg value="******" /> <!-- 专用密钥的口令,就是key密码 -->
168             <arg value="-signedjar" /> 
169             <arg value="${out-signed-package-ospath}" />
170             <arg value="${out-unsigned-package-ospath}" /><!-- 未签名的apk -->
171             <arg value="androidreleasekey" />
172             <arg value="-digestalg" />
173             <arg value="SHA1" />
174             <arg value="-sigalg" />
175             <arg value="MD5withRSA" />
176         </exec>
177     </target>
178     <!-- 优化 -->
179     <target name="optimize-app" depends="jarsigner">
180       <echo> optimizing the application...</echo>
181       <delete dir="${zipalign-signed-package}" />
182       <exec executable="${zipalign}">
183         <arg value="-v" />
184         <arg value="4" />
185         <arg value="${out-signed-package-ospath}" />
186         <arg value="${zipalign-signed-package}" />
187      </exec>
188     </target>
189     <!-- 发布 -->
190     <target name="release" depends="optimize-app">
191         <!-- 删除未签证apk  optimize-app-->
192         <delete file="${out-unsigned-package-ospath}" />
193         <delete file="${out-signed-package-ospath}" />
194         <echo>APK is released. path:${zipalign-signed-package}</echo>
195     </target>
196 
197 </project>

编写好以上build.xml文件放在项目目录,配置好ant运行环境,运行ant release 。

如果碰到图片出问题,可以运行一下命令:

aapt crunch -v -S res -C restemp

然后把处理好的图片覆盖以前的即可。



posted @ 2015-10-20 16:47  Shinf.Yao  阅读(199)  评论(0)    收藏  举报