Просмотр исходного кода

android自动化打包脚本优化二

huangbo лет назад: 9
Родитель
Сommit
76d1b8ef06
2 измененных файлов с 222 добавлено и 6 удалено
  1. 2 0
      display-client/build/build.properties
  2. 220 6
      display-client/build/build.xml

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

@ -11,6 +11,8 @@ android_tools=${android_sdk_home}/build-tools/19.1.0
11 11
project_home=..
12 12
#App名字
13 13
app_name=display-client
14
#编译的target
15
android-target=android-19
14 16
#Android版本
15 17
android_version=4.4
16 18

+ 220 - 6
display-client/build/build.xml

@ -7,13 +7,33 @@
7 7
	<condition property="exe" value=".exe" else=""><os family="windows" /></condition>
8 8
	<condition property="bat" value=".bat" else=""><os family="windows" /></condition>
9 9
    <!-- Android SDK Tools -->
10
    
10 11
	<property name="zipalign" value="${android_tools}/zipalign${exe}" />
11 12
	<property name="jarsigner" value="${jdk_home}/bin/jarsigner${exe}" />
13
	
14
	<property name="android-target-dir" value="${android_sdk_home}/platforms/${android-target}" />
15
	<property name="android-jar" value="${android-target-dir}/android.jar" />
16
	<property name="android-framework" value="${android-target-dir}/framework.aidl" />
17
	<property name="aapt" value="${android_tools}/aapt${exe}" />
18
	<property name="dx" value="${android_tools}/dx${bat}" />
19
	<property name="aidl" value="${android_tools}/aidl${exe}" />
20
	<property name="proguard-jar" value="${android_sdk_home}/tools/proguard/lib/proguard.jar" />
21
	<property name="annotations-jar" value="${android_sdk_home}/tools/support/annotations.jar" />
22
	
12 23
    <!-- some file directory exclude "bin" file, because "bin" file will be changed each loop -->
24
    <property name="gen-dir" value="gen" />
25
    <property name="src-dir" value="src" />
26
    <property name="libs-dir" value="libs" />
27
    <property name="res-dir" value="res" />
28
    <property name="asset-dir" value="assets" />
13 29
    <property name="bin-dir" value="bin" />
30
    <property name="manifest-xml" value="AndroidManifest.xml" />
14 31
    <!-- 主工程各个目录 -->
15
	<property name="host-src" value="${project_home}/src" />
16
	<property name="host-libs" value="${project_home}/libs" />
32
    <property name="host-gen" value="${project_home}/${gen-dir}" />
33
	<property name="host-src" value="${project_home}/${src-dir}" />
34
	<property name="host-libs" value="${project_home}/${libs-dir}" />
35
	<property name="host-bin" value="${project_home}/${bin-dir}" />
36
	<property name="host-classes" value="${host-bin}/classes" />
17 37
	<property name="intermediate-dex" value="${project_home}/${bin-dir}/${app_name}/classes.dex" />
18 38
    <!-- The final package file to generate -->
19 39
	<property name="resources-package" value="${project_home}/${bin-dir}/${app_name}/${app_name}.ap_" />
@ -21,10 +41,11 @@
21 41
	<property name="out-signed-package" value="${project_home}/${bin-dir}/${app_name}/${app_name}-signed.apk" />
22 42
	<property name="zipalign-package" value="${output_path}/${app_name}_for_android_${android_version}.apk" />
23 43
	
24
	<target name="apkpackaging" depends="zipalign,jarsigner,apkbuilder"/>
44
	<target name="apkpackaging" depends="zipalign"/>
25 45
26 46
	<!-- 1.使用zipalign做优化,对apk文件进行对齐 -->
27
	<target name="zipalign" depends="jarsigner">
47
	<target name="zipalign" depends="jar-signer">
48
	    <echo>Zipalign optimizing...</echo>
28 49
		<exec executable="${zipalign}" failonerror="true">
29 50
		    <!-- 打印详细日志 -->
30 51
            <!-- <arg value="-v" /> -->
@ -38,7 +59,8 @@
38 59
	</target>
39 60
	
40 61
	<!-- 2.APK签名 -->
41
	<target name="jarsigner" depends="apkbuilder">
62
	<target name="jar-signer" depends="apk-builder">
63
	    <echo>Jar signer...</echo>
42 64
        <exec executable="${jarsigner}" failonerror="true">
43 65
            <!-- 打印详细日志 -->
44 66
            <!-- <arg value="-verbose" /> -->
@ -63,7 +85,8 @@
63 85
    </target>
64 86
    
65 87
	<!-- 3.APK打包 -->
66
	<target name="apkbuilder" >
88
	<target name="apk-builder" depends="aapt-package-res">
89
	    <echo>Building apk...</echo>
67 90
	    <java classpath="${android_apk_tools}/lib/sdklib.jar" classname="com.android.sdklib.build.ApkBuilderMain" fork="true" failonerror="true">
68 91
            <sysproperty key="file.encoding" value="UTF-8" />
69 92
            <!-- 创建未签名的包 -->
@ -93,4 +116,195 @@
93 116
            <arg value="${library_2}/libs" />
94 117
	    </java>
95 118
	</target>
119
	
120
	<!-- 4.aapt打包资源 -->
121
	<target name="aapt-package-res" depends="dex-package">
122
		<echo>Packaging resources and assets...</echo>
123
		<exec executable="${aapt}" failonerror="true">
124
		    <arg value="package" />
125
		    <arg value="-f" />
126
		    <arg value="-M" />
127
		    <arg value="${project_home}/${manifest-xml}" />
128
		    <arg value="-S" />
129
		    <arg value="${project_home}/${res-dir}" />
130
		    
131
		    <arg value="-S" />
132
	        <arg value="${library_1}/${res-dir}" /><!-- 包含Library的资源 -->
133
	        
134
		    <!-- <arg value="-S" />
135
	        <arg value="${library_2}/${res-dir}" /> --><!-- 包含Library2的资源 -->
136
		    
137
		    <arg value="-A" />
138
		    <arg value="${project_home}/${asset-dir}" /><!-- assets文件 -->
139
		    
140
		    <arg value="-I" />
141
		    <arg value="${android-jar}" />
142
		    <arg value="-F" />
143
		    <arg value="${resources-package}" /><!-- 输出资源压缩包 -->
144
		    <arg value="--auto-add-overlay" /> <!-- 这个重要,覆盖资源,不然报错-->
145
		</exec>
146
	</target>
147
	
148
	<!-- 5.打包dex文件 -->
149
	<target name="dex-package" depends="obfuscate">
150
	    <echo>Packaging dex...</echo>
151
		<apply executable="${dx}" failonerror="true" parallel="true">
152
		    <arg value="--dex" />
153
		    <arg value="--output=${intermediate-dex}" />
154
		    <arg path="${host-classes}" />
155
		    <arg path="${host-libs}" />
156
		    
157
		    <fileset dir="${project_home}/${libs-dir}" />
158
		    <!-- Library1 -->
159
		    <fileset dir="${library_1}/libs" />
160
		    <!-- Library2 -->
161
		    <fileset dir="${library_2}/libs" />
162
		</apply>
163
	</target>
164
	
165
	<!-- 6.混淆 -->
166
	<target name="obfuscate" depends="compile">
167
		<jar basedir="${host-classes}" destfile="temp.jar" />
168
	
169
		<java jar="${proguard-jar}" fork="true" failonerror="true">
170
		    <sysproperty key="file.encoding" value="UTF-8" /> 
171
	        <jvmarg value="-Dmaximum.inlined.code.length=32" />
172
	        <arg value="-injars temp.jar" />
173
	        <arg value="-outjars optimized.jar" />
174
	        <arg value="-libraryjars '${annotations-jar}'" />
175
	        <arg value="-libraryjars '${android-jar}'" />
176
	        <arg value="@${project_home}/proguard-project.txt" />
177
		</java>
178
	    <delete file="temp.jar" />
179
	    <delete dir="${host-classes}" />
180
	    <mkdir dir="${host-classes}" />
181
		<unzip src="optimized.jar" dest="${host-classes}" />
182
	    <delete file="optimized.jar" />
183
	</target>
184
	
185
	<!-- 编译java文件为class文件 -->
186
	<target name="compile" depends="aidl">
187
		<path id="project.libs">
188
	        <fileset dir="${project_home}/${libs-dir}">
189
	            <include name="*.so" />
190
	            <include name="**/*.so" />
191
	            <include name="*/*.so" />
192
	            <include name="**/*.jar" />
193
	            <include name="*.jar" />
194
	        </fileset>
195
		</path>
196
	      
197
	  	<path id="library1.libs">
198
	         <fileset dir="${library_1}/libs">
199
	             <include name="*.so" />
200
	             <include name="**/*.so" />
201
	             <include name="*/*.so" />
202
	             <include name="**/*.jar" />
203
	             <include name="*.jar" />
204
	         </fileset>
205
	    </path>
206
	    
207
	  	<path id="library2.libs">
208
	          <fileset dir="${library_2}/libs">
209
	              <include name="*.so" />
210
	              <include name="**/*.so" />
211
	              <include name="*/*.so" />
212
	              <include name="**/*.jar" />
213
	              <include name="*.jar" />
214
	          </fileset>
215
	    </path>
216
	    
217
		<javac debug="true" extdirs="" srcdir="." includeantruntime="on" 
218
	         destdir="${host-classes}" bootclasspath="${android-jar}" encoding="UTF-8">
219
	          <compilerarg line="-encoding UTF-8 " />
220
	          <src path="${library_1}/${src-dir}" /><!-- Library1的src文件 -->
221
	          <src path="${library_2}/${src-dir}" /><!-- Library2的src文件 -->
222
	          <src path="${host-src}" />
223
	          <src path="${host-gen}" />
224
			  <!-- jar文件 -->          
225
	          <classpath refid="library1.libs" />
226
	          <classpath refid="library2.libs" />
227
	          <classpath refid="project.libs" />
228
		</javac>
229
	</target>
230
	
231
	<!-- 生成aidl对应的java文件 -->
232
  	<target name="aidl" depends="aapt_gererateR">
233
    	<apply executable="${aidl}" failonerror="true">
234
            <arg value="-p${android-framework}" />
235
            <arg value="-I${host-src}" />
236
            <arg value="-o${host-gen}" />
237
            <fileset dir="${host-src}">
238
                <include name="**/*.aidl" />
239
            </fileset>
240
        </apply>
241
    </target>
242
    
243
  	<!--2 生成R文件和Manifest.java-->
244
  	<target name="aapt_gererateR" depends="init">
245
	    <exec executable="${aapt}" failonerror="true">
246
			<arg value="package" />
247
			<arg value="-m" />
248
			<arg value="-J" />
249
			<arg value="${host-gen}" />
250
			<arg value="-M" />
251
			<arg value="${project_home}/${manifest-xml}" />
252
			<arg value="-S" />
253
			<arg value="${project_home}/${res-dir}" />
254
			<!-- 同时需要调用Library的res -->
255
			<arg value="-S" />
256
			<arg value="${library_1}/${res-dir}" /><!-- 注意点:同时需要调用Library的res-->
257
258
			<!-- <arg value="-S" />
259
			<arg value="${library_2}/${res-dir}" /> -->
260
261
			<arg value="-I" />
262
			<arg value="${android-jar}" />
263
			<arg value="--auto-add-overlay" /> <!-- 这个重要,覆盖资源,不然报错-->
264
		</exec>
265
        <!-- 编译Libray1 的R文件 -->
266
		<exec executable="${aapt}" failonerror="true">
267
            <arg value="package" />
268
            <arg value="-m" />
269
            <arg value="--non-constant-id" /> <!-- 加了这个参数-->
270
            <arg value="--auto-add-overlay" />
271
            <arg value="-J" />
272
            <arg value="gen" />
273
            <arg value="-M" />
274
            <arg value="${library_1}/${manifest-xml}" /> <!-- 库应用的manifest-->
275
            <!-- <arg value="-S" />
276
            <arg value="${library_1}/${res-dir}" /> -->
277
            <arg value="-I" />
278
            <arg value="${android-jar}" />
279
        </exec>
280
281
        <!-- 编译Libray2 的R文件 -->
282
        <exec executable="${aapt}" failonerror="true">
283
            <arg value="package" />
284
            <arg value="-m" />
285
            <arg value="--non-constant-id" /> <!-- 加了这个参数-->
286
            <arg value="--auto-add-overlay" />
287
            <arg value="-J" />
288
            <arg value="gen" />
289
            <arg value="-M" />
290
            <arg value="${library_2}/${manifest-xml}" /> <!-- 库应用的manifest-->
291
            <!-- <arg value="-S" />
292
            <arg value="${library_2}/${res-dir}" /> -->
293
            <arg value="-I" />
294
            <arg value="${android-jar}" />
295
        </exec>
296
    </target>
297
    
298
  	<!--1 初始化清空-->
299
	<target name="init">
300
		<delete dir="${host-gen}" />
301
		<delete dir="${host-bin}" />
302
		<delete file="${project_home}/proguardMapping.txt" />
303
		
304
		<mkdir dir="${host-gen}" />
305
		<mkdir dir="${host-bin}" />
306
		<mkdir dir="${host-classes}" />
307
		<mkdir dir="${host-bin}/${app_name}" />
308
		<!-- <mkdir dir="${output_path}" /> -->
309
	</target>
96 310
</project>