-
Notifications
You must be signed in to change notification settings - Fork 2
/
build.xml
252 lines (229 loc) · 9.82 KB
/
build.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
<project name="ECommerce master_hejian" default="deploy">
<!-- ANT环境变量 -->
<property environment="env" />
<!-- 使用第三方的ant包,使ant支持for循环-->
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="${env.ANT_HOME}/lib/ant-contrib-1.0b3.jar" />
</classpath>
</taskdef>
<!-- 提交号 -->
<property name="commit" value="7a4a2345cbd91495c36a10b6a47da92dc380f454"></property>
<!-- 应用名称 -->
<property name="appName" value="${ant.project.name}" />
<!-- SDK目录(获取操作系统环境变量ANDROID_SDK_HOME的值) -->
<property name="sdk-folder" value="${env.ANDROID_SDK_HOME}" />
<!-- SDK指定平台目录 -->
<property name="sdk-platform-folder" value="${sdk-folder}/platforms/android-11" />
<!-- SDK中tools目录 -->
<property name="sdk-tools" value="${sdk-folder}/tools" />
<!-- SDK指定平台中tools目录 -->
<property name="sdk-platform-tools" value="${sdk-folder}/platform-tools" />
<!-- 使用到的命令(当前系统为windows,如果系统为linux,可将.bat文件替换成相对应的命令) -->
<property name="aapt" value="${sdk-platform-tools}/aapt" />
<property name="aidl" value="${sdk-platform-tools}/aidl" />
<property name="apkbuilder" value="${sdk-tools}/apkbuilder.bat" />
<property name="jarsigner" value="${env.JAVA_HOME}/bin/jarsigner" />
<property name="zipalign" value="${sdk-tools}/zipalign.exe" />
<property name="dx" value="${sdk-platform-tools}/dx.bat" />
<!-- 编译需要的jar; 如果项目使用到地图服务则需要maps.jar -->
<property name="android-jar" value="${sdk-platform-folder}/android.jar" />
<property name="android-maps-jar" value="${sdk-folder}/add-ons/addon_google_apis_google_inc_8/libs/maps.jar" />
<!-- -->
<property name="channelname" value="" />
<property name="channelkey" value="" />
<!-- 渠道名:渠道号 1010001:google play,1010002:安卓市场,1010003:91,1010004:机锋,1010005:360,1010006:巨兴数码,1010007:豌豆荚,1010008:安智,1010009:腾讯应用中心,1010010:应用汇,1010011:木蚂蚁,1010012:百度应用中心 -->
<property name="key" value="1010009:腾讯应用中心,1010010:应用汇" />
<!-- 编译aidl文件所需的预处理框架文件framework.aidl -->
<property name="framework-aidl" value="${sdk-platform-folder}/framework.aidl" />
<!-- 清单文件 -->
<property name="manifest-xml" value="AndroidManifest.xml" />
<!-- 源文件目录 -->
<property name="resource-dir" value="res" />
<property name="asset-dir" value="assets" />
<!-- java源文件目录 -->
<property name="srcdir" value="src" />
<property name="srcdir-ospath" value="${basedir}/${srcdir}" />
<!-- 外部类库所在目录 -->
<property name="external-lib" value="libs" />
<property name="external-lib-ospath" value="${basedir}/${external-lib}" />
<!-- 版本 -->
<property name="version" value="1.0.0" />
<!--循环打包 -->
<target name="deploy">
<foreach target="modify_manifest" list="${key}" param="nameandchannel" delimiter=",">
</foreach>
</target>
<target name="modify_manifest">
<!-- 获取渠道名字 -->
<propertyregex override="true" property="channelname" input="${nameandchannel}" regexp="(.*):" select="\1" />
<!-- 获取渠道号码 -->
<propertyregex override="true" property="channelkey" input="${nameandchannel}" regexp=":(.*)" select="\1" />
<!-- 正则匹配替换渠道号 -->
<replaceregexp flags="g" byline="false" encoding="UTF-8">
<regexp pattern='meta-data android:value="(.*)" android:name="adsource"' />
<substitution expression='meta-data android:value="${channelname}" android:name="adsource"' />
<fileset dir="" includes="AndroidManifest.xml" />
</replaceregexp>
<!-- 正则匹配替换渠道号 -->
<replaceregexp flags="g" byline="false" encoding="UTF-8">
<regexp pattern='meta-data android:value="(.*)" android:name="UMENG_CHANNEL"' />
<substitution expression='meta-data android:value="${channelkey}" android:name="UMENG_CHANNEL"' />
<fileset dir="" includes="AndroidManifest.xml" />
</replaceregexp>
<antcall target="zipalign" />
</target>
<!-- 初始化工作 -->
<target name="init">
<echo>目录初始化....</echo>
<!-- 生成R文件的相对目录 -->
<var name="outdir-gen" value="gen" />
<!-- 编译后的文件放置目录 -->
<var name="outdir-bin" value="bin" />
<!-- 生成class目录 -->
<var name="outdir-classes" value="${outdir-bin}" />
<var name="outdir-classes-ospath" value="${basedir}/${outdir-classes}" />
<!-- classes.dex相关变量 -->
<var name="dex-file" value="classes.dex" />
<var name="dex-path" value="${outdir-bin}/${dex-file}" />
<var name="dex-ospath" value="${basedir}/${dex-path}" />
<!-- 经过aapt生成的资源包文件 -->
<var name="resources-package" value="${outdir-bin}/resources.ap_" />
<var name="resources-package-ospath" value="${basedir}/${resources-package}" />
<!-- 未认证apk包 -->
<var name="out-unsigned-package" value="${outdir-bin}/${appName}-unsigned.apk" />
<var name="out-unsigned-package-ospath" value="${basedir}/${out-unsigned-package}" />
<!-- 证书文件 -->
<var name="keystore-file" value="${basedir}/massvig_android_key_dujun" />
<!-- 已认证apk包 -->
<var name="out-signed-package" value="C:\Users\Administrator\Desktop\Ecommerce/${channelname} RC ${appName} ${commit}.apk" />
<var name="out-signed-package-ospath" value="${out-signed-package}" />
<delete dir="${outdir-bin}" />
<mkdir dir="${outdir-bin}" />
<mkdir dir="${outdir-classes}" />
</target>
<!-- 根据工程中的资源文件生成R.java文件 -->
<target name="gen-R" depends="init">
<echo>生成R.java文件....</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-m" />
<arg value="-J" />
<arg value="${outdir-gen}" />
<arg value="-S" />
<arg value="${resource-dir}" />
<arg value="-M" />
<arg value="${manifest-xml}" />
<arg value="-I" />
<arg value="${android-jar}" />
</exec>
</target>
<!-- 编译aidl文件 -->
<target name="aidl" depends="gen-R">
<echo>编译aidl文件....</echo>
<apply executable="${aidl}" failonerror="true">
<!-- 指定预处理文件 -->
<arg value="-p${framework-aidl}" />
<!-- aidl声明的目录 -->
<arg value="-I${srcdir}" />
<!-- 目标文件目录 -->
<arg value="-o${outdir-gen}" />
<!-- 指定哪些文件需要编译 -->
<fileset dir="${srcdir}">
<include name="**/*.aidl" />
</fileset>
</apply>
</target>
<!-- 将工程中的java源文件编译成class文件 -->
<target name="compile" depends="aidl">
<echo>java源文件编译成class文件....</echo>
<path id="lib">
<fileset dir="${sdk-folder}/tools/support">
<include name="*.jar"/>
</fileset>
</path>
<javac encoding="utf-8" target="1.5" srcdir="." destdir="${outdir-classes}" bootclasspath="${android-jar}" verbose="false" includeAntRuntime="false">
<compilerarg line="-encoding UTF-8 " />
<classpath>
<fileset dir="${external-lib}" includes="*.jar" />
</classpath>
</javac>
</target>
<!-- 将.class文件转化成.dex文件 -->
<target name="dex" depends="compile">
<echo>将.class文件转化成.dex文件....</echo>
<exec executable="${dx}" failonerror="true">
<arg value="--dex" />
<!-- 输出文件 -->
<arg value="--output=${dex-ospath}" />
<!-- 要生成.dex文件的源classes和libraries -->
<arg value="${outdir-classes-ospath}" />
<arg value="${external-lib-ospath}" />
</exec>
</target>
<!-- 将资源文件放进输出目录 -->
<target name="package-res-and-assets">
<echo>将资源文件放进输出目录....</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-M" />
<arg value="${manifest-xml}" />
<arg value="-S" />
<arg value="${resource-dir}" />
<arg value="-A" />
<arg value="${asset-dir}" />
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="-F" />
<arg value="${resources-package}" />
</exec>
</target>
<!-- 打包成未签证的apk -->
<target name="package" depends="dex, package-res-and-assets">
<echo>打包成未签证的apk....</echo>
<exec executable="${apkbuilder}" failonerror="true">
<arg value="${out-unsigned-package-ospath}" />
<arg value="-u" />
<arg value="-z" />
<arg value="${resources-package-ospath}" />
<arg value="-f" />
<arg value="${dex-ospath}" />
<arg value="-rf" />
<arg value="${srcdir-ospath}" />
</exec>
</target>
<!-- 对apk进行签证 -->
<target name="jarsigner" depends="package">
<echo>Packaging signed apk for release...</echo>
<exec executable="${jarsigner}" failonerror="true">
<arg value="-keystore" />
<arg value="${keystore-file}" />
<arg value="-storepass" />
<arg value="!MassVigAndroid!" />
<arg value="-keypass" />
<arg value="!MassVigAndroid!" />
<arg value="-signedjar" />
<arg value="${out-signed-package-ospath}" />
<arg value="${out-unsigned-package-ospath}" />
<!-- 不要忘了证书的别名 -->
<arg value="massvig" />
</exec>
</target>
<!-- 发布 -->
<target name="release" depends="jarsigner">
<!-- 删除未签证apk -->
<delete file="${out-unsigned-package-ospath}" />
<echo>APK is released. path:${out-signed-package-ospath}</echo>
</target>
<!-- 打包的应用程序进行优化 -->
<target name="zipalign" depends="release">
<exec executable="${zipalign}" failonerror="true">
<arg value="-v" />
<arg value="4" />
<arg value="${out-signed-package-ospath}" />
<arg value="${out-signed-package-ospath}-zipaligned.apk" />
</exec>
</target>
</project>