ソースを参照

android自动化打包脚本第一次优化版

huangbo 9 年 前
コミット
20fb34b33a
共有5 個のファイルを変更した129 個の追加394 個の削除を含む
  1. 0 44
      display-client/build.properties
  2. 0 350
      display-client/build.xml
  3. 2 0
      display-client/build/.gitignore
  4. 31 0
      display-client/build/build.properties
  5. 96 0
      display-client/build/build.xml

+ 0 - 44
display-client/build.properties

@ -1,44 +0,0 @@
1
#log路径
2
logPath=D:\\123\\build.log
3
4
#工程路径
5
app.source.path=D:\\ipu-work\\android-share\\display-client
6
7
#JDK路径
8
jdk.home=C:\\Program Files (x86)\\Java\\jdk1.6.0_10
9
bin.dir=${jdk.home}\\bin
10
11
#Android SDK路径
12
sdk.home=D:\\Android\\sdk
13
sdk.folder=${sdk.home}\\platforms\\${target}
14
apk.tools=${sdk.home}\\tools
15
android.tools=${sdk.home}\\build-tools\\19.1.0
16
17
#Ant工具路径
18
ant.path=D:\\Program Files\\apache-ant-1.9.4\\lib
19
20
#输出目录
21
output.dir=out
22
23
#App名字
24
appname=display-client
25
#编译的target
26
target=android-19
27
#Android版本
28
android_version=4.4
29
30
#设置签名密钥的存储路径 
31
key.store=${app.source.path}\\display.keystore
32
key.alias=display
33
key.store.password=display
34
key.alias.password=display
35
36
##如果依赖library,设置library的路径##
37
#wade-mobile-common
38
library-1=D:\\ipu-work\\android-share\\wade-mobile-common
39
library-1-libs=${library-1}\\libs
40
#wade-mobile-lib
41
library-2=D:\\ipu-work\\android-share\\wade-mobile-lib
42
library-2-libs=${library-2}\\libs
43
44

+ 0 - 350
display-client/build.xml

@ -1,350 +0,0 @@
1
<?xml version="1.0" encoding="UTF-8"?>
2
<project name="apkTargets" default="zipalign"  basedir=".">
3
	<!--     指定配置文件      -->  
4
    <property file="build.properties" /> 
5
    
6
    <record name="${logPath}" loglevel="info" append="no" action="start" />
7
8
	<!-- 
9
		1. 在Target- aapt_gererateR 中添加library 
10
		2. 在Target- compile 中添加library 
11
		3. 在Target- dex 中添加library 
12
		4. 在Target- aapt-package-res 中添加library 
13
		5. 在Target- apkbuilder 中添加library 
14
	 -->
15
16
	<!-- 识别编译环境 -->
17
	<condition property="exe" value=".exe" else=""><os family="windows" /></condition>
18
	<condition property="bat" value=".bat" else=""><os family="windows" /></condition>
19
20
    <!-- Tools -->
21
	<property name="jarsigner" value="${jdk.home}/bin/jarsigner${exe}" />
22
	<property name="aapt" value="${android.tools}/aapt${exe}" />
23
	<property name="zipalign" value="${android.tools}/zipalign${exe}" />
24
	<property name="aidl" value="${android.tools}/aidl${exe}" />
25
	<property name="dx" value="${android.tools}/dx${bat}" />
26
	<property name="apk-builder" value="${apk.tools}/apkbuilder${bat}" />
27
28
    <property name="android-jar" value="${sdk.folder}/android.jar" />
29
    <property name="annotations-jar" value="${sdk.home}/tools/support/annotations.jar" />
30
31
    <property name="android-framework" value="${sdk.folder}/framework.aidl" />
32
    <property name="proguard-home" value="${sdk.home}/tools/proguard/lib" />
33
34
    <!-- some file directory exclude "bin" file, because "bin" file will be changed each loop -->
35
    <property name="gen-dir" value="gen" />
36
    <property name="src-dir" value="src" />
37
    <property name="libs-dir" value="libs" />
38
    <property name="resource-dir" value="res" />
39
    <property name="asset-dir" value="assets" />
40
    <property name="bin-dir" value="bin" />
41
    <property name="manifest-xml" value="AndroidManifest.xml" />
42
43
    <!-- 主工程各个目录 -->
44
    <property name="host-gen" value="${basedir}/${gen-dir}" />
45
	<property name="host-src" value="${basedir}/${src-dir}" />
46
	<property name="host-libs" value="${basedir}/${libs-dir}" />
47
48
	<property name="host-classes" value="${basedir}/${bin-dir}/classes" />
49
50
    <property name="dex-file" value="classes.dex" />
51
	<property name="intermediate-dex" value="${basedir}/${bin-dir}/${appname}/${dex-file}" />
52
53
    <!-- The final package file to generate -->
54
	<property name="resources-package" value="${basedir}/${bin-dir}/${appname}/${appname}.ap_" />
55
	
56
	<property name="out-unsigned-package" value="${basedir}/${bin-dir}/${appname}/${appname}-unsigned.apk" />
57
	
58
	<property name="out-signed-package" value="${basedir}/${bin-dir}/${appname}/${appname}-signed.apk" />
59
	
60
	<property name="zipalign-package" value="${basedir}/${output.dir}/${appname}_for_android_${android_version}_${output.dir}.apk" />
61
	
62
63
	<!--1 初始化-->
64
	<target name="init">
65
		<delete dir="${host-gen}" />
66
		<delete dir="${bin-dir}" />
67
		<delete file="${basedir}/proguardMapping.txt" />
68
		
69
		<mkdir dir="${host-gen}" />
70
		<mkdir dir="${host-classes}" />
71
		<mkdir dir="${bin-dir}/${appname}" />
72
		<mkdir dir="${basedir}/${output.dir}" />
73
	</target>
74
75
	<!--2 生成R文件和Manifest.java-->
76
  	<target name="aapt_gererateR" depends="init">
77
	    <exec executable="${aapt}" failonerror="true">
78
			<arg value="package" />
79
			<arg value="-m" />
80
			<arg value="-J" />
81
			<arg value="${host-gen}" />
82
			<arg value="-M" />
83
			<arg value="${manifest-xml}" />
84
			<arg value="-S" />
85
			<arg value="${resource-dir}" />
86
			<!-- 同时需要调用Library的res -->
87
			<arg value="-S" />
88
			<arg value="${library-1}/${resource-dir}" /><!-- 注意点:同时需要调用Library的res-->
89
90
			<arg value="-S" />
91
			<arg value="${library-2}/${resource-dir}" />
92
93
			<arg value="-I" />
94
			<arg value="${android-jar}" />
95
			<arg value="--auto-add-overlay" /> <!-- 这个重要,覆盖资源,不然报错-->
96
		</exec>
97
        <!-- 编译Libray1 的R文件 -->
98
		<exec executable="${aapt}" failonerror="true">
99
            <arg value="package" />
100
            <arg value="-m" />
101
            <arg value="--non-constant-id" /> <!-- 加了这个参数-->
102
            <arg value="--auto-add-overlay" />
103
            <arg value="-J" />
104
            <arg value="gen" />
105
            <arg value="-M" />
106
            <arg value="${library-1}/${manifest-xml}" /> <!-- 库应用的manifest-->
107
            <arg value="-S" />
108
            <arg value="res" />
109
            <arg value="-S" />
110
            <arg value="${library-1}/${resource-dir}" />
111
            <arg value="-I" />
112
            <arg value="${android-jar}" />
113
        </exec>
114
115
        <!-- 编译Libray2 的R文件 -->
116
        <exec executable="${aapt}" failonerror="true">
117
            <arg value="package" />
118
            <arg value="-m" />
119
            <arg value="--non-constant-id" /> <!-- 加了这个参数-->
120
            <arg value="--auto-add-overlay" />
121
            <arg value="-J" />
122
            <arg value="gen" />
123
            <arg value="-M" />
124
            <arg value="${library-2}/${manifest-xml}" /> <!-- 库应用的manifest-->
125
            <arg value="-S" />
126
            <arg value="res" />
127
            <arg value="-S" />
128
            <arg value="${library-2}/${resource-dir}" />
129
            <arg value="-I" />
130
            <arg value="${android-jar}" />
131
        </exec>
132
    </target>
133
    
134
	<!--3 生成aidl对应的java文件-->
135
  	<target name="aidl" depends="aapt_gererateR">
136
    	<apply executable="${aidl}" failonerror="true">
137
            <arg value="-p${android-framework}" />
138
            <arg value="-I${host-src}" />
139
            <arg value="-o${host-gen}" />
140
            <fileset dir="${host-src}">
141
                <include name="**/*.aidl" />
142
            </fileset>
143
        </apply>
144
    </target>
145
146
	<!--4 编译java文件为class文件-->
147
	<target name="compile" depends="aidl">
148
		<path id="project.libs">
149
	        <fileset dir="${libs-dir}">
150
	            <include name="*.so" />
151
	            <include name="**/*.so" />
152
	            <include name="*/*.so" />
153
	            <include name="**/*.jar" />
154
	            <include name="*.jar" />
155
	        </fileset>
156
		</path>
157
	      
158
	  	<path id="library-1.libs">
159
	         <fileset dir="${library-1-libs}">
160
	             <include name="*.so" />
161
	             <include name="**/*.so" />
162
	             <include name="*/*.so" />
163
	             <include name="**/*.jar" />
164
	             <include name="*.jar" />
165
	         </fileset>
166
	    </path>
167
	    
168
	  	<path id="library-2.libs">
169
	          <fileset dir="${library-2-libs}">
170
	              <include name="*.so" />
171
	              <include name="**/*.so" />
172
	              <include name="*/*.so" />
173
	              <include name="**/*.jar" />
174
	              <include name="*.jar" />
175
	          </fileset>
176
	    </path>
177
	    
178
		<javac debug="true" extdirs="" srcdir="." includeantruntime="on" 
179
	         destdir="${host-classes}" bootclasspath="${android-jar}" encoding="UTF-8">
180
	          <compilerarg line="-encoding UTF-8 " />
181
	          <src path="${library-1}/${src-dir}" /><!-- Library1的src文件 -->
182
	          <src path="${library-2}/${src-dir}" /><!-- Library2的src文件 -->
183
	          <src path="${host-src}" />
184
	          <src path="${host-gen}" />
185
			  <!-- jar文件 -->          
186
	          <classpath refid="library-1.libs" />
187
	          <classpath refid="library-2.libs" />
188
	          <classpath refid="project.libs" />
189
		</javac>
190
	</target>
191
	  
192
	<!--5 混淆-->
193
	<target name="obfuscate" depends="compile">
194
		<jar basedir="${host-classes}" destfile="temp.jar" />
195
	
196
		<java jar="${proguard-home}/proguard.jar" fork="true" failonerror="true">
197
	        <jvmarg value="-Dmaximum.inlined.code.length=32" />
198
	        <arg value="-injars temp.jar" />
199
	        <arg value="-outjars optimized.jar" />
200
	        <arg value="-libraryjars '${annotations-jar}'" />
201
	        <arg value="-libraryjars '${android-jar}'" />
202
	        <arg value="@proguard-project.txt" />
203
		</java>
204
	    <delete file="temp.jar" />
205
	    <delete dir="${host-classes}" />
206
	    <mkdir dir="${host-classes}" />
207
		<unzip src="optimized.jar" dest="${host-classes}" />
208
	    <delete file="optimized.jar" />
209
	</target>	
210
211
	<!--6 把class文件转换为dex文件-->
212
	<target name="dex" depends="obfuscate">
213
	    <echo>Packaging dex...</echo>
214
		<apply executable="${dx}" failonerror="true" parallel="true">
215
		    <arg value="--dex" />
216
		    <arg value="--output=${intermediate-dex}" />
217
		    <arg path="${host-classes}" />
218
		    <arg path="${host-libs}" />
219
		    
220
		    <fileset dir="${libs-dir}" />
221
		    <!-- Library1 -->
222
		    <fileset dir="${library-1-libs}" />
223
		    <!-- Library2 -->
224
		    <fileset dir="${library-2-libs}" />
225
		</apply>
226
	</target>
227
	
228
  	<!--7 aapt打包资源-->
229
	<target name="aapt-package-res" depends="dex">
230
		<echo>Packaging resources and assets...</echo>
231
		<exec executable="${aapt}" failonerror="true">
232
		    <arg value="package" />
233
		    <arg value="-f" />
234
		    <arg value="-M" />
235
		    <arg value="${manifest-xml}" />
236
		    <arg value="-S" />
237
		    <arg value="${resource-dir}" />
238
		    
239
		    <arg value="-S" />
240
	        <arg value="${library-1}/${resource-dir}" /><!-- 包含Library的资源 -->
241
	        
242
		    <arg value="-S" />
243
	        <arg value="${library-2}/${resource-dir}" /><!-- 包含Library2的资源 -->
244
		    
245
		    <arg value="-A" />
246
		    <arg value="${asset-dir}" /><!-- assets文件 -->
247
		    
248
		    <arg value="-I" />
249
		    <arg value="${android-jar}" />
250
		    <arg value="-F" />
251
		    <arg value="${resources-package}" /><!-- 输出资源压缩包 -->
252
		    <arg value="--auto-add-overlay" /> <!-- 这个重要,覆盖资源,不然报错-->
253
		</exec>
254
	</target>
255
256
	<!--8 apkbuilder打包成apk文件-->
257
	<target name="apkbuilder" depends="aapt-package-res">
258
		<echo>${out-unsigned-package}</echo>
259
        <exec executable="${apk-builder}" failonerror="true">
260
            <arg value="${out-unsigned-package}" /><!-- 输出 -->
261
            <arg value="-u" /><!-- 创建未签名的包 -->
262
            <arg value="-z" /><!-- 资源压缩包 -->
263
            <arg value="${resources-package}" />
264
            <arg value="-f" /><!-- dex文件 -->
265
            <arg value="${intermediate-dex}" />
266
            
267
            <arg value="-rf" /><!-- Adds the java resources found in that folder -->
268
            <arg value="${host-src}" />
269
            
270
            <arg value="-nf" /><!-- add native libraries -->
271
            <arg value="${host-libs}" />
272
            <arg value="-nf" />
273
            <arg value="${library-1-libs}" />
274
            <arg value="-nf" />
275
            <arg value="${library-2-libs}" />
276
            
277
            <arg value="-rj" /><!-- Adds the java resources found in the jar file(s) -->
278
            <arg value="${host-libs}" />
279
            <arg value="-rj" />
280
            <arg value="${library-1-libs}" />
281
            <arg value="-rj" />
282
            <arg value="${library-2-libs}" />
283
        </exec>
284
    </target>
285
    
286
	<target name="apkbuilder2" >
287
	    <java classpath="${apk.tools}/lib/sdklib.jar"
288
	        classname="com.android.sdklib.build.ApkBuilderMain" fork="true" failonerror="true">
289
            <sysproperty key="file.encoding" value="UTF-8" />
290
	        <arg value="${out-unsigned-package}" />
291
	        <arg value="-u" /><!-- 创建未签名的包 -->
292
            <arg value="-z" />
293
            <arg value="${resources-package}" />
294
            <arg value="-f" /><!-- dex文件 -->
295
            <arg value="${intermediate-dex}" />
296
            
297
            <arg value="-rf" /><!-- Adds the java resources found in that folder -->
298
            <arg value="${host-src}" />
299
            
300
            <arg value="-nf" /><!-- add native libraries -->
301
            <arg value="${host-libs}" />
302
            <arg value="-nf" />
303
            <arg value="${library-1-libs}" />
304
            <arg value="-nf" />
305
            <arg value="${library-2-libs}" />
306
            
307
            <arg value="-rj" /><!-- Adds the java resources found in the jar file(s) -->
308
            <arg value="${host-libs}" />
309
            <arg value="-rj" />
310
            <arg value="${library-1-libs}" />
311
            <arg value="-rj" />
312
            <arg value="${library-2-libs}" />
313
	    </java>
314
	</target>
315
	
316
	<!--9 签名apk文件-->
317
	<target name="jarsigner" depends="apkbuilder">
318
        <exec executable="${jarsigner}" failonerror="true">
319
            <arg value="-verbose" />
320
            <arg value="-keystore" />
321
            <arg value="${key.store}" />
322
            <arg value="-storepass" />
323
            <arg value="${key.store.password}" />
324
            <arg value="-keypass" />
325
            <arg value="${key.alias.password}" />
326
            <arg value="-signedjar" />
327
            <arg value="${out-signed-package}" />
328
            <arg value="${out-unsigned-package}" />
329
            <arg value="${key.alias}" />
330
331
            <arg value="-digestalg" />
332
            <arg value="SHA1" />
333
            <arg value="-sigalg" />
334
            <arg value="MD5withRSA" />
335
        </exec>
336
    </target>
337
    
338
    <!--10 对apk文件进行zipalign对齐-->
339
	<target name="zipalign" depends="jarsigner">
340
		<exec executable="${zipalign}" failonerror="true">
341
            <arg value="-v" />
342
            <arg value="-f" />
343
            <arg value="4" />
344
            <arg value="${out-signed-package}" />
345
            <arg value="${zipalign-package}" />
346
        </exec>
347
        <echo>打包完成:${zipalign-package}</echo>
348
	</target>
349
350
</project>

+ 2 - 0
display-client/build/.gitignore

@ -0,0 +1,2 @@
1
/display-client_for_android_4.4.apk
2
/build.log

+ 31 - 0
display-client/build/build.properties

@ -0,0 +1,31 @@
1
#######编译环境相关配置#######
2
#JDK路径
3
jdk_home=D:/Program Files/java/jdk1.6
4
#Android SDK路径
5
android_sdk_home=D:/android/android SDK
6
android_apk_tools=${android_sdk_home}/tools
7
android_tools=${android_sdk_home}/build-tools/19.1.0
8
9
#######应用信息相关配置#######
10
#工程路径
11
project_home=..
12
#App名字
13
app_name=display-client
14
#Android版本
15
android_version=4.4
16
17
#######签名文件相关配置#######
18
key_store=${project_home}/display.keystore
19
key_store_password=display
20
key_alias=display
21
key_alias_password=display
22
23
#######依赖工程相关配置#######
24
library_1=${project_home}/../wade-mobile-common
25
library_2=${project_home}/../wade-mobile-lib
26
27
#######其他配置#######
28
#log路径
29
log_file=build.log
30
#输出目录
31
output_path=.

+ 96 - 0
display-client/build/build.xml

@ -0,0 +1,96 @@
1
<?xml version="1.0" encoding="UTF-8"?>
2
<project name="apkTargets" default="apkpackaging"  basedir=".">
3
	<!--     指定配置文件      -->  
4
    <property file="build.properties" /> 
5
    <record name="${log_file}" loglevel="info" append="no" action="start" />
6
	<!-- 识别编译环境 -->
7
	<condition property="exe" value=".exe" else=""><os family="windows" /></condition>
8
	<condition property="bat" value=".bat" else=""><os family="windows" /></condition>
9
    <!-- Android SDK Tools -->
10
	<property name="zipalign" value="${android_tools}/zipalign${exe}" />
11
	<property name="jarsigner" value="${jdk_home}/bin/jarsigner${exe}" />
12
    <!-- some file directory exclude "bin" file, because "bin" file will be changed each loop -->
13
    <property name="bin-dir" value="bin" />
14
    <!-- 主工程各个目录 -->
15
	<property name="host-src" value="${project_home}/src" />
16
	<property name="host-libs" value="${project_home}/libs" />
17
	<property name="intermediate-dex" value="${project_home}/${bin-dir}/${app_name}/classes.dex" />
18
    <!-- The final package file to generate -->
19
	<property name="resources-package" value="${project_home}/${bin-dir}/${app_name}/${app_name}.ap_" />
20
	<property name="out-unsigned-package" value="${project_home}/${bin-dir}/${app_name}/${app_name}-unsigned.apk" />
21
	<property name="out-signed-package" value="${project_home}/${bin-dir}/${app_name}/${app_name}-signed.apk" />
22
	<property name="zipalign-package" value="${output_path}/${app_name}_for_android_${android_version}.apk" />
23
	
24
	<target name="apkpackaging" depends="zipalign,jarsigner,apkbuilder"/>
25
26
	<!-- 1.使用zipalign做优化,对apk文件进行对齐 -->
27
	<target name="zipalign" depends="jarsigner">
28
		<exec executable="${zipalign}" failonerror="true">
29
		    <!-- 打印详细日志 -->
30
            <!-- <arg value="-v" /> -->
31
            <arg value="-f" />
32
            <arg value="4" />
33
            <arg value="${out-signed-package}" />
34
            <!-- arg value="${out-unsigned-package}" /> -->
35
            <arg value="${zipalign-package}" />
36
        </exec>
37
        <echo>打包完成:${zipalign-package}</echo>
38
	</target>
39
	
40
	<!-- 2.APK签名 -->
41
	<target name="jarsigner" depends="apkbuilder">
42
        <exec executable="${jarsigner}" failonerror="true">
43
            <!-- 打印详细日志 -->
44
            <!-- <arg value="-verbose" /> -->
45
            <!-- 签名信息 -->
46
            <arg value="-keystore" />
47
            <arg value="${key_store}" />
48
            <arg value="-storepass" />
49
            <arg value="${key_store_password}" />
50
            <arg value="-keypass" />
51
            <arg value="${key_alias_password}" />
52
            <!-- 输出安装包 -->
53
            <arg value="-signedjar" />
54
            <arg value="${out-signed-package}" />
55
            <arg value="${out-unsigned-package}" />
56
            <arg value="${key_alias}" />
57
			<!--  -->
58
            <arg value="-digestalg" />
59
            <arg value="SHA1" />
60
            <arg value="-sigalg" />
61
            <arg value="MD5withRSA" />
62
        </exec>
63
    </target>
64
    
65
	<!-- 3.APK打包 -->
66
	<target name="apkbuilder" >
67
	    <java classpath="${android_apk_tools}/lib/sdklib.jar" classname="com.android.sdklib.build.ApkBuilderMain" fork="true" failonerror="true">
68
            <sysproperty key="file.encoding" value="UTF-8" />
69
            <!-- 创建未签名的包 -->
70
	        <arg value="${out-unsigned-package}" />
71
	        <arg value="-u" />
72
            <arg value="-z" />
73
            <arg value="${resources-package}" />
74
            <!-- dex中间文件 -->
75
            <arg value="-f" />
76
            <arg value="${intermediate-dex}" />
77
            <!-- Adds the java resources found in that folder -->
78
            <arg value="-rf" />
79
            <arg value="${host-src}" />
80
            <!-- add native libraries -->
81
            <arg value="-nf" />
82
            <arg value="${host-libs}" />
83
            <arg value="-nf" />
84
            <arg value="${library_1}/libs" />
85
            <arg value="-nf" />
86
            <arg value="${library_2}/libs" />
87
            <!-- Adds the java resources found in the jar file(s) -->
88
            <arg value="-rj" />
89
            <arg value="${host-libs}" />
90
            <arg value="-rj" />
91
            <arg value="${library_1}/libs" />
92
            <arg value="-rj" />
93
            <arg value="${library_2}/libs" />
94
	    </java>
95
	</target>
96
</project>