| | 1 | 要设置几个环境变量[[BR]] |
| | 2 | ANDROID_SDK_HOME android sdk 目录[[BR]] |
| | 3 | JAVA_HOME java 目录[[BR]] |
| | 4 | ANT_HOME ant目录 [[BR]] |
| | 5 | 下载 ANT Contrib(多渠道循环时需要用到),把ant-contrib-1.0b3.jar 放到ant的lib目录下 [[BR]] |
| | 6 | http://nchc.dl.sourceforge.net/project/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3-bin.zip [[BR]] |
| | 7 | |
| | 8 | apkbuider 生成参考:http://blog.csdn.net/aiai373824745/article/details/38415621 [[BR]] |
| | 9 | 脚本参考:http://blog.csdn.net/tenggangren/article/details/8051937 [[BR]] |
| | 10 | |
| | 11 | 运行脚本:ant deploy [[BR]] |
| | 12 | |
| | 13 | {{{ |
| | 14 | <project name="TestTwo" default="release" > |
| | 15 | <!-- ANT环境变量 --> |
| | 16 | <property environment="env" /> |
| | 17 | <!-- 使用第三方的ant包,使ant支持for循环--> |
| | 18 | <taskdef resource="net/sf/antcontrib/antcontrib.properties"> |
| | 19 | <classpath> |
| | 20 | <pathelement location="${env.ANT_HOME}/lib/ant-contrib-1.0b3.jar" /> |
| | 21 | </classpath> |
| | 22 | </taskdef> |
| | 23 | <!-- 应用名称 --> |
| | 24 | <property name="appName" value="${ant.project.name}" /> |
| | 25 | <!-- SDK目录(获取操作系统环境变量ANDROID_SDK_HOME的值) --> |
| | 26 | <property name="sdk-folder" value="${env.ANDROID_SDK_HOME}" /> |
| | 27 | <!-- SDK指定平台目录 --> |
| | 28 | <property name="sdk-platform-folder" value="${sdk-folder}/platforms/android-19" /> |
| | 29 | <!-- SDK中tools目录 --> |
| | 30 | <property name="sdk-tools" value="${sdk-folder}/tools" /> |
| | 31 | <!-- SDK中build-tools目录 --> |
| | 32 | <property name="build-tools" value="${sdk-folder}/build-tools/19.1.0" /> |
| | 33 | <!-- SDK指定平台中tools目录 --> |
| | 34 | <property name="sdk-platform-tools" value="${sdk-folder}/platform-tools" /> |
| | 35 | |
| | 36 | <!-- 使用到的命令(根据系统替换成相对应的命令) --> |
| | 37 | <property name="aapt" value="${build-tools}/aapt" /> |
| | 38 | <property name="aidl" value="${build-tools}/aidl" /> |
| | 39 | <property name="dx" value="${build-tools}/dx" /> |
| | 40 | <property name="apkbuilder" value="${sdk-tools}/apkbuilder" /> |
| | 41 | <property name="jarsigner" value="${env.JAVA_HOME}/bin/jarsigner" /> |
| | 42 | <property name="zipalign" value="${build-tools}/zipalign" /> |
| | 43 | |
| | 44 | <!-- 编译需要的jar; 如果项目使用到地图服务则需要maps.jar --> |
| | 45 | <property name="android-jar" value="${sdk-platform-folder}/android.jar" /> |
| | 46 | <property name="android-maps-jar" value="${sdk-folder}/add-ons/addon_google_apis_google_inc_8/libs/maps.jar" /> |
| | 47 | |
| | 48 | |
| | 49 | |
| | 50 | |
| | 51 | <!-- 编译aidl文件所需的预处理框架文件framework.aidl --> |
| | 52 | <property name="framework-aidl" value="${sdk-platform-folder}/framework.aidl" /> |
| | 53 | <!-- 清单文件 --> |
| | 54 | <property name="manifest-xml" value="AndroidManifest.xml" /> |
| | 55 | <!-- 源文件目录 --> |
| | 56 | <property name="resource-dir" value="res" /> |
| | 57 | <property name="asset-dir" value="assets" /> |
| | 58 | <!-- java源文件目录 --> |
| | 59 | <property name="srcdir" value="src" /> |
| | 60 | <property name="srcdir-ospath" value="${basedir}/${srcdir}" /> |
| | 61 | <!-- 外部类库所在目录 --> |
| | 62 | <property name="external-lib" value="libs" /> |
| | 63 | <property name="external-lib-ospath" value="${basedir}/${external-lib}" /> |
| | 64 | |
| | 65 | <!-- 版本 --> |
| | 66 | <property name="version" value="3.0" /> |
| | 67 | |
| | 68 | <property name="key" value="goapk,QQ" /> |
| | 69 | <property name="channelname" value="" /> |
| | 70 | <property name="channelkey" value="" /> |
| | 71 | |
| | 72 | <!--循环打包 --> |
| | 73 | <target name="deploy"> |
| | 74 | <foreach target="modify_manifest" list="${key}" param="channelname" delimiter=","> |
| | 75 | </foreach> |
| | 76 | </target> |
| | 77 | <target name="modify_manifest"> |
| | 78 | <!-- 正则匹配替换渠道号(这里pattern里的内容要与mainfest文件的内容一致,包括顺序,空格) --> |
| | 79 | <replaceregexp flags="g" byline="false" encoding="UTF-8"> |
| | 80 | <regexp pattern='meta-data android:name="MOFANG_CHANNEL" android:value="(.*)"' /> |
| | 81 | <substitution expression='meta-data android:name="MOFANG_CHANNEL" android:value="${channelname}"' /> |
| | 82 | <fileset dir="" includes="AndroidManifest.xml" /> |
| | 83 | </replaceregexp> |
| | 84 | <antcall target="zipalign" /> |
| | 85 | </target> |
| | 86 | |
| | 87 | <!-- 初始化工作 --> |
| | 88 | <target name="init"> |
| | 89 | <echo>目录初始化....</echo> |
| | 90 | <!-- 生成R文件的相对目录 --> |
| | 91 | <var name="outdir-gen" value="gen" /> |
| | 92 | <!-- 编译后的文件放置目录 --> |
| | 93 | <var name="outdir-bin" value="bin-${channelname}" /> |
| | 94 | <!-- 生成class目录 --> |
| | 95 | <var name="outdir-classes" value="${outdir-bin}" /> |
| | 96 | <var name="outdir-classes-ospath" value="${basedir}/${outdir-classes}" /> |
| | 97 | |
| | 98 | <!-- classes.dex相关变量 --> |
| | 99 | <var name="dex-file" value="classes.dex" /> |
| | 100 | <var name="dex-path" value="${outdir-bin}/${dex-file}" /> |
| | 101 | <var name="dex-ospath" value="${basedir}/${dex-path}" /> |
| | 102 | |
| | 103 | <!-- 经过aapt生成的资源包文件 --> |
| | 104 | <var name="resources-package" value="${outdir-bin}/resources.ap_" /> |
| | 105 | <var name="resources-package-ospath" value="${basedir}/${resources-package}" /> |
| | 106 | |
| | 107 | <!-- 未认证apk包 --> |
| | 108 | <var name="out-unsigned-package" value="${outdir-bin}/${appName}-unsigned.apk" /> |
| | 109 | <var name="out-unsigned-package-ospath" value="${basedir}/${out-unsigned-package}" /> |
| | 110 | |
| | 111 | <!-- 证书文件 --> |
| | 112 | <var name="keystore-file" value="${basedir}/test.keystore" /> |
| | 113 | |
| | 114 | <!-- 已认证apk包 --> |
| | 115 | <var name="out-signed-package" value="${outdir-bin}/${appName}-${channelname}-${version}.apk" /> |
| | 116 | <var name="out-signed-package-ospath" value="${basedir}/${out-signed-package}" /> |
| | 117 | <delete dir="${outdir-bin}" /> |
| | 118 | <mkdir dir="${outdir-bin}" /> |
| | 119 | <mkdir dir="${outdir-classes}" /> |
| | 120 | </target> |
| | 121 | |
| | 122 | <!-- 根据工程中的资源文件生成R.java文件 --> |
| | 123 | <target name="gen-R" depends="init"> |
| | 124 | <echo>生成R.java文件....</echo> |
| | 125 | <exec executable="${aapt}" failonerror="ture"> |
| | 126 | <arg value="package" /> |
| | 127 | <arg value="-f" /> |
| | 128 | <arg value="-m" /> |
| | 129 | <arg value="-J" /> |
| | 130 | <arg value="${outdir-gen}" /> |
| | 131 | <arg value="-S" /> |
| | 132 | <arg value="${resource-dir}" /> |
| | 133 | <arg value="-M" /> |
| | 134 | <arg value="${manifest-xml}" /> |
| | 135 | <arg value="-I" /> |
| | 136 | <arg value="${android-jar}" /> |
| | 137 | </exec> |
| | 138 | </target> |
| | 139 | |
| | 140 | <!-- 编译aidl文件 --> |
| | 141 | <target name="aidl" depends="gen-R"> |
| | 142 | <echo>编译aidl文件....</echo> |
| | 143 | <apply executable="${aidl}" failonerror="true"> |
| | 144 | <!-- 指定预处理文件 --> |
| | 145 | <arg value="-p${framework-aidl}" /> |
| | 146 | <!-- aidl声明的目录 --> |
| | 147 | <arg value="-I${srcdir}" /> |
| | 148 | <!-- 目标文件目录 --> |
| | 149 | <arg value="-o${outdir-gen}" /> |
| | 150 | <!-- 指定哪些文件需要编译 --> |
| | 151 | <fileset dir="${srcdir}"> |
| | 152 | <include name="**/*.aidl" /> |
| | 153 | </fileset> |
| | 154 | </apply> |
| | 155 | </target> |
| | 156 | |
| | 157 | <!-- 将工程中的java源文件编译成class文件 --> |
| | 158 | <target name="compile" depends="aidl"> |
| | 159 | <echo>java源文件编译成class文件....</echo> |
| | 160 | <javac encoding="utf-8" target="1.5" srcdir="." destdir="${outdir-classes}" bootclasspath="${android-jar}" verbose="false"> |
| | 161 | <compilerarg line="-encoding GBK " /> |
| | 162 | <classpath> |
| | 163 | <fileset dir="${external-lib}" includes="*.jar" /> |
| | 164 | </classpath> |
| | 165 | </javac> |
| | 166 | </target> |
| | 167 | |
| | 168 | |
| | 169 | <!-- 将.class文件转化成.dex文件 --> |
| | 170 | <target name="dex" depends="compile"> |
| | 171 | <echo>将.class文件转化成.dex文件....</echo> |
| | 172 | <exec executable="${dx}" failonerror="true"> |
| | 173 | <arg value="--dex" /> |
| | 174 | <!-- 输出文件 --> |
| | 175 | <arg value="--output=${dex-ospath}" /> |
| | 176 | <!-- 要生成.dex文件的源classes和libraries --> |
| | 177 | <arg value="${outdir-classes-ospath}" /> |
| | 178 | <arg value="${external-lib-ospath}" /> |
| | 179 | </exec> |
| | 180 | </target> |
| | 181 | |
| | 182 | <!-- 将资源文件放进输出目录 --> |
| | 183 | <target name="package-res-and-assets"> |
| | 184 | <echo>将资源文件放进输出目录....</echo> |
| | 185 | <exec executable="${aapt}" failonerror="true"> |
| | 186 | <arg value="package" /> |
| | 187 | <arg value="-f" /> |
| | 188 | <arg value="-M" /> |
| | 189 | <arg value="${manifest-xml}" /> |
| | 190 | <arg value="-S" /> |
| | 191 | <arg value="${resource-dir}" /> |
| | 192 | <arg value="-A" /> |
| | 193 | <arg value="${asset-dir}" /> |
| | 194 | <arg value="-I" /> |
| | 195 | <arg value="${android-jar}" /> |
| | 196 | <arg value="-F" /> |
| | 197 | <arg value="${resources-package}" /> |
| | 198 | </exec> |
| | 199 | </target> |
| | 200 | |
| | 201 | <!-- 打包成未签证的apk --> |
| | 202 | <target name="package" depends="dex, package-res-and-assets"> |
| | 203 | <echo>打包成未签证的apk....</echo> |
| | 204 | <exec executable="${apkbuilder}" failonerror="true"> |
| | 205 | <arg value="${out-unsigned-package-ospath}" /> |
| | 206 | <arg value="-u" /> |
| | 207 | <arg value="-z" /> |
| | 208 | <arg value="${resources-package-ospath}" /> |
| | 209 | <arg value="-f" /> |
| | 210 | <arg value="${dex-ospath}" /> |
| | 211 | <arg value="-rf" /> |
| | 212 | <arg value="${srcdir-ospath}" /> |
| | 213 | </exec> |
| | 214 | </target> |
| | 215 | |
| | 216 | <!-- 对apk进行签证 --> |
| | 217 | <target name="jarsigner" depends="package"> |
| | 218 | <echo>Packaging signed apk for release...</echo> |
| | 219 | <exec executable="${jarsigner}" failonerror="true"> |
| | 220 | <arg value="-keystore" /> |
| | 221 | <arg value="${keystore-file}" /> |
| | 222 | <arg value="-storepass" /> |
| | 223 | <arg value="123456" /> |
| | 224 | <arg value="-keypass" /> |
| | 225 | <arg value="123456" /> |
| | 226 | <arg value="-signedjar" /> |
| | 227 | <arg value="${out-signed-package-ospath}" /> |
| | 228 | <arg value="${out-unsigned-package-ospath}" /> |
| | 229 | <!-- 不要忘了证书的别名 --> |
| | 230 | <arg value="kingson1.keystore" /> |
| | 231 | </exec> |
| | 232 | </target> |
| | 233 | |
| | 234 | <!-- 发布 --> |
| | 235 | <target name="release" depends="jarsigner"> |
| | 236 | <!-- 删除未签证apk --> |
| | 237 | <delete file="${out-unsigned-package-ospath}" /> |
| | 238 | <echo>APK is released. path:${out-signed-package-ospath}</echo> |
| | 239 | </target> |
| | 240 | <!-- 打包的应用程序进行优化 --> |
| | 241 | |
| | 242 | <target name="zipalign" depends="release"> |
| | 243 | <exec executable="${zipalign}" failonerror="true"> |
| | 244 | <arg value="-v" /> |
| | 245 | <arg value="4" /> |
| | 246 | <arg value="${out-signed-package-ospath}" /> |
| | 247 | <arg value="${out-signed-package-ospath}-zipaligned.apk" /> |
| | 248 | </exec> |
| | 249 | </target> |
| | 250 | </project> |
| | 251 | }}} |