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
然后把处理好的图片覆盖以前的即可。

浙公网安备 33010602011771号