加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Build.xml文件详解

发布时间:2020-12-15 23:32:52 所属栏目:百科 来源:网络整理
导读:点击打开链接:http://blog.sina.com.cn/s/blog_47021dd401010f2f.html Build.xml文件详解 ? xml version = "1.0" encoding = "UTF-8" ? !-- 参考文章: http://www.cnblogs.com/zuolongsnail/archive/2011/05/25/2058210.html http://haya.iteye.com/? show_

点击打开链接:http://blog.sina.com.cn/s/blog_47021dd401010f2f.html


Build.xml文件详解

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!--
  3. 参考文章:
  4. http://www.cnblogs.com/zuolongsnail/archive/2011/05/25/2058210.html
  5. http://haya.iteye.com/?show_full=true
  6. http://jojol-zhou.iteye.com/blog/729271
  7. http://jojol-zhou.iteye.com/blog/729254
  8. http://www.cnblogs.com/Pickuper/archive/2011/6/14.html
  9. http://www.51testing.com/?uid-213912-action-viewspace-itemid-235086
  10. http://jimmy-duan.iteye.com/blog/1057967
  11. 命名原则:
  12. (1)使用"."替代local.properties文件中的"-"作为文件分隔符
  13. (2)前缀:
  14. 使用"jar"表示包
  15. 使用"tools"表示工具
  16. 使用"in"表示输入
  17. 使用"out"表示输出
  18. 使用"release"表示产品
  19. (3)后缀:使用"dir"表示目录,"file"表示文件
  20. (3)使用"absolute"表示绝对路径,未使用"absolute"的表示相对路径,所有路径实际使用前转换为绝对路径再使用
  21. 文件及变量使用:
  22. (1)使用到了系统自带的proguard.cfg文件,用于配置混淆设置
  23. (2)使用到了系统自带的local.properties文件,用于定义用户设置的本地变量,典型的文件中包含:
  24. #SDK路径
  25. sdk-dir=D:Androidandroid-sdk-windows
  26. #混淆路径
  27. proguard=D:Androidproguardlibproguard.jar
  28. #jarsiger路径
  29. jarsigner=D:Javajdk1.6.0_25binjarsigner.exe
  30. #签名文件
  31. keystore=D:Androidxxxx.keystore
  32. keyalias=xxxxx
  33. password=xxxxxx
  34. #motoSecondaryTelephonyManagerjar包
  35. secondarysecondary-apis-moto-xt882-zip=secondary-apis-moto_xt882.zip
  36. secondarysecondary-apis-moto-xt800plus-zip=secondary-apis-moto_xt800plus.zip
  37. #QASSDK包
  38. appstat-jar=appstat_A1.0.0.7_20110726.jar
  39. #资源路径
  40. res-dir=res480x320
  41. #Manifest文件
  42. manifestmanifest-file=manifest/AndroidManifest.xml
  43. #UA
  44. UA=SamsungI569
  45. #assets路径
  46. assetsassets-dir=assets${UA}
  47. #输出路径
  48. out-release-dir=E:tmp
  49. #版本号
  50. TYSX_VER=2.1.11.2
  51. #android版本
  52. android_ver=AD23
  53. #文件名
  54. #TYSX-机型型号(UA)-版本号-厂商缩写-操作系统缩写
  55. release-apk-file=XXXX-${UA}-${TYSX_VER}-MH-${android_ver}.apk
  56. -->
  57. <!--
  58. <project>标签
  59. 每个构建文件对应一个项目。<project>标签时构建文件的根标签。它可以有多个内在属性,
  60. 就如代码中所示,其各个属性的含义分别如下。
  61. (1)default表示默认的运行目标,这个属性是必须的。
  62. (2)basedir表示项目的基准目录。
  63. (3)name表示项目名。
  64. (4)description表示项目的描述。
  65. 每个构建文件都对应于一个项目,但是大型项目经常包含大量的子项目,每一个子项目都可以有
  66. 自己的构建文件。
  67. -->
  68. <projectname="AntTest"default="release">
  69. <!--指定配置文件-->
  70. <propertyfile="default.properties"/>
  71. <propertyfile="local.properties"/>
  72. <!--定义工具目录-->
  73. <propertyname="sdk.dir"value="${sdk-dir}"/>
  74. <propertyname="android.tools.dir"value="${sdk.dir}/tools"/>
  75. <propertyname="android.platformtools.dir"value="${sdk.dir}/platform-tools"/>
  76. <propertyname="android.platforms.dir"value="${sdk.dir}/platforms/${target}"/>
  77. <propertyname="android.tools.absolute.dir"location="${android.tools.dir}"/>
  78. <propertyname="android.platformtools.absolute.dir"location="${android.platformtools.dir}"/>
  79. <propertyname="android.platforms.absolute.dir"location="${android.platforms.dir}"/>
  80. <!--定义工具
  81. <propertyname="verbose"value="false"/>-->
  82. <conditionproperty="exe"value=".exe"else="">
  83. <osfamily="windows"/>
  84. </condition>
  85. <propertyname="jar.proguard"value="${proguard-jar}"/>
  86. <propertyname="jar.android"value="${android.platforms.absolute.dir}/android.jar"/>
  87. <propertyname="tools.dx"value="${android.platformtools.absolute.dir}/dx.bat"/>
  88. <propertyname="tools.apkbuilder"value="${android.tools.absolute.dir}/apkbuilder.bat"/>
  89. <propertyname="tools.adb"value="${android.tools.absolute.dir}/adb${exe}"/>
  90. <propertyname="tools.zipalign"value="${android.tools.absolute.dir}/zipalign${exe}"/>
  91. <propertyname="tools.aapt"value="${android.platformtools.absolute.dir}/aapt${exe}"/>
  92. <propertyname="tools.aidl"value="${android.platformtools.absolute.dir}/aidl${exe}"/>
  93. <propertyname="tools.jarsigner"value="${JAVA_HOME}/bin/jarsigner${exe}"/>
  94. <!--定义引入工具库
  95. <pathid="android.antlibs">
  96. <pathelementpath="${sdk.dir}/tools/lib/anttasks.jar"/>
  97. <pathelementpath="${sdk.dir}/tools/lib/sdklib.jar"/>
  98. <pathelementpath="${sdk.dir}/tools/lib/androidprefs.jar"/>
  99. <pathelementpath="${sdk.dir}/tools/lib/apkbuilder.jar"/>
  100. <pathelementpath="${sdk.dir}/tools/lib/jarutils.jar"/>
  101. </path>
  102. 定义任务
  103. <taskdefname="aaptexec"classname="com.android.ant.AaptExecLoopTask"classpathref="android.antlibs"/>
  104. <taskdefname="apkbuilder"classname="com.android.ant.ApkBuilderTask"classpathref="android.antlibs"/>
  105. <taskdefname="xpath"classname="com.android.ant.XPathTask"classpathref="android.antlibs"/>
  106. -->
  107. <!--定义源代码及资源等输入目录-->
  108. <propertyname="in.source.dir"value="src"/>
  109. <propertyname="in.resource.dir"value="${res-dir}"/>
  110. <propertyname="in.asset.dir"value="${assets-dir}"/>
  111. <propertyname="in.source.absolute.dir"location="${in.source.dir}"/>
  112. <propertyname="in.resource.absolute.dir"location="${in.resource.dir}"/>
  113. <propertyname="in.asset.absolute.dir"location="${in.asset.dir}"/>
  114. <!--定义本地库/第三方工具库文件目录-->
  115. <propertyname="in.external.libs.dir"value="libs"/>
  116. <propertyname="in.native.libs.dir"value="libs"/>
  117. <propertyname="in.external.libs.absolute.dir"location="${in.external.libs.dir}"/>
  118. <propertyname="in.native.libs.absolute.dir"location="${in.native.libs.dir}"/>
  119. <!--定义输入文件-->
  120. <propertyname="in.manifest.file"value="${manifest-file}"/>
  121. <propertyname="in.android.aidl.file"value="${android.platforms.dir}/framework.aidl"/>
  122. <propertyname="in.manifest.absolute.file"location="${in.manifest.file}"/>
  123. <propertyname="in.android.aidl.absolute.file"location="${in.android.aidl.file}"/>
  124. <!--定义输出文件目录-->
  125. <propertyname="out.gen.dir"value="gen"/>
  126. <propertyname="out.dir"value="bin"/>
  127. <propertyname="out.classes.dir"value="${out.dir}/classes"/>
  128. <propertyname="out.gen.absolute.dir"location="${out.gen.dir}"/>
  129. <propertyname="out.absolute.dir"location="${out.dir}"/>
  130. <propertyname="out.classes.absolute.dir"location="${out.classes.dir}"/>
  131. <propertyname="release.absolute.dir"location="${release-dir}"/>
  132. <!--定义输出文件-->
  133. <propertyname="out.dex.file"value="${ant.project.name}-classes.dex"/>
  134. <propertyname="out.resource.package.file"value="${ant.project.name}-resource.apk"/>
  135. <propertyname="out.unsigned.package.file"value="${ant.project.name}-unsigned.apk"/>
  136. <propertyname="out.signed.package.file"value="${ant.project.name}-signed.apk"/>
  137. <propertyname="out.aligned.package.file"value="${ant.project.name}-aligned.apk"/>
  138. <propertyname="release.package.file"value="${release-apk-file}"/>
  139. <propertyname="out.dex.absolute.file"location="${out.dir}/${out.dex.file}"/>
  140. <propertyname="out.resource.package.absolute.file"location="${out.dir}/${out.resource.package.file}"/>
  141. <propertyname="out.unsigned.package.absolute.file"location="${out.dir}/${out.unsigned.package.file}"/>
  142. <propertyname="out.signed.package.absolute.file"location="${out.dir}/${out.signed.package.file}"/>
  143. <propertyname="out.aligned.package.absolute.file"location="${out.dir}/${out.aligned.package.file}"/>
  144. <propertyname="release.package.absolute.file"location="${release.absolute.dir}/${release.package.file}"/>
  145. <!--
  146. <target>标签
  147. 一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。例
  148. 如,有一个target用于编译程序,另一个target用于声称可执行文件。在生成可执行文件之前必
  149. 须先编译该文件,因策可执行文件的target依赖于编译程序的target。Target的所有属性如下。
  150. (1)name表示标明,这个属性是必须的。
  151. (2)depends表示依赖的目标。
  152. (3)if表示仅当属性设置时才执行。
  153. (4)unless表示当属性没有设置时才执行。
  154. (5)description表示项目的描述。
  155. Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行
  156. 每个target。在执行之前,首先需要执行它所依赖的target。程序中的名为run的target的
  157. depends属性compile,而名为compile的target的depends属性是prepare,所以这几个target执
  158. 行的顺序是prepare->compile->run。
  159. 一个target只能被执行一次,即使有多个target依赖于它。如果没有if或unless属性,target总
  160. 会被执行。
  161. -->
  162. <targetname="-clean">
  163. <echo>Creatingoutputdirectoriesifneeded...</echo>
  164. <deletedir="${out.absolute.dir}"/>
  165. <deletedir="${out.gen.absolute.dir}"/>
  166. </target>
  167. <targetname="-dirs"depends="-clean">
  168. <echo>Creatingoutputdirectoriesifneeded...</echo>
  169. <mkdirdir="${in.resource.absolute.dir}"/>
  170. <mkdirdir="${in.external.libs.absolute.dir}"/>
  171. <mkdirdir="${out.gen.absolute.dir}"/>
  172. <mkdirdir="${out.absolute.dir}"/>
  173. <mkdirdir="${out.classes.absolute.dir}"/>
  174. </target>
  175. <!--
  176. 第一步生成R.java类文件:
  177. Eclipse中会自动生成R.java,ant和命令行使用androidSDK提供的aapt.ext程序生成R.java。
  178. -->
  179. <targetname="-resource-src"depends="-dirs">
  180. <echo>GeneratingR.java/Manifest.javafromtheresources...</echo>
  181. <execexecutable="${tools.aapt}"failonerror="true">
  182. <argvalue="package"/>
  183. <argvalue="-m"/>
  184. <argvalue="-J"/>
  185. <argpath="${out.gen.absolute.dir}"/>
  186. <argvalue="-M"/>
  187. <argpath="${in.manifest.absolute.file}"/>
  188. <argvalue="-S"/>
  189. <argpath="${in.resource.absolute.dir}"/>
  190. <argvalue="-I"/>
  191. <argpath="${jar.android}"/>
  192. </exec>
  193. </target>
  194. <!--
  195. 第二步将.aidl文件生成.java类文件:
  196. Eclipse中自动生成,ant和命令行使用androidSDK提供的aidl.exe生成.java文件。
  197. -->
  198. <!--Generatesjavaclassesfrom.aidlfiles.-->
  199. <targetname="-aidl"depends="-dirs">
  200. <echo>CompilingaidlfilesintoJavaclasses...</echo>
  201. <applyexecutable="${tools.aidl}"failonerror="true">
  202. <argvalue="-p${in.android.aidl.file}"/>
  203. <argvalue="-I${in.source.absolute.dir}"/>
  204. <argvalue="-o${out.gen.absolute.dir}"/>
  205. <filesetdir="${in.source.absolute.dir}">
  206. <includename="**/*.aidl"/>
  207. </fileset>
  208. </apply>
  209. </target>
  210. <!--
  211. 第三步编译.java类文件生成class文件:
  212. Eclipse中自动生成,ant和命令行使用jdk的javac编译java类文件生成class文件。
  213. -->
  214. <!--Compilesthisproject's.javafilesinto.classfiles.-->
  215. <targetname="compile"depends="-resource-src,-aidl">
  216. <echo>Compilesproject's.javafilesinto.classfiles</echo>
  217. <javacencoding="utf-8"target="1.5"debug="true"extdirs=""srcdir="."
  218. destdir="${out.classes.absolute.dir}"bootclasspath="${jar.android}">
  219. <classpath>
  220. <filesetdir="${in.external.libs.absolute.dir}"includes="*.jar"/>
  221. <filesetdir="${in.external.libs.absolute.dir}"includes="*.zip"/>
  222. </classpath>
  223. </javac>
  224. </target>
  225. <!--Executeproguardclassflies-->
  226. <targetname="optimize"depends="compile">
  227. <echo>optimizeclassesareputto"${out.absolute.dir}".</echo>
  228. <jarbasedir="${out.classes.absolute.dir}"destfile="${out.absolute.dir}/temp.jar"/>
  229. <taskdefresource="proguard/ant/task.properties"classpath="${jar.proguard}"/>
  230. <proguard>
  231. -injars${out.absolute.dir}/temp.jar
  232. -outjars${out.absolute.dir}/optimized.jar
  233. -libraryjars${jar.android}
  234. -optimizationpasses5
  235. -dontusemixedcaseclassnames
  236. -dontskipnonpubliclibraryclasses
  237. -dontpreverify
  238. -verbose
  239. -optimizations!code/simplification/arithmetic,!field/*,!class/merging/*
  240. -includeproguard.cfg
  241. </proguard>
  242. <deletefile="${out.absolute.dir}/temp.jar"/>
  243. <deletedir="${out.classes.dir}"failonerror="false"/>
  244. <mkdirdir="${out.classes.dir}"/>
  245. <unzipsrc="${out.absolute.dir}/optimized.jar"dest="${out.classes.absolute.dir}"/>
  246. <deletefile="${out.absolute.dir}/optimized.jar"/>
  247. </target>
  248. <!--
  249. 第四步将class文件打包生成classes.dex文件:
  250. Eclipse中自动生成,ant和命令行使用androidSDK提供的dx.bat命令行脚本生成classes.dex文件。
  251. -->
  252. <targetname="dex"depends="optimize">
  253. <echo>Convertingcompiledfilesandexternallibrariesinto${out.absolute.dir}/${out.dex.file}...</echo>
  254. <applyexecutable="${tools.dx}"failonerror="true"parallel="true">
  255. <argvalue="--dex"/>
  256. <argvalue="--output=${out.dex.absolute.file}"/>
  257. <argpath="${out.classes.absolute.dir}"/>
  258. <filesetdir="${in.external.libs.absolute.dir}"includes="*.jar"/>
  259. </apply>
  260. <deletedir="${out.classes.absolute.dir}"/>
  261. </target>
  262. <!--
  263. 第五步打包资源文件(包括res、assets、androidmanifest.xml等):
  264. Eclipse中自动生成,ant和命令行使用AndroidSDK提供的aapt.exe生成资源包文件。
  265. -->
  266. <targetname="package-resource">
  267. <echo>Packagingresourcesandassets${out.resource.package.absolute.file}...</echo>
  268. <execexecutable="${tools.aapt}"failonerror="true">
  269. <argvalue="package"/>
  270. <argvalue="-f"/>
  271. <argvalue="-M"/>
  272. <argvalue="${in.manifest.file}"/>
  273. <argvalue="-S"/>
  274. <argvalue="${in.resource.absolute.dir}"/>
  275. <argvalue="-A"/>
  276. <argvalue="${in.asset.absolute.dir}"/>
  277. <argvalue="-I"/>
  278. <argvalue="${jar.android}"/>
  279. <argvalue="-F"/>
  280. <argvalue="${out.resource.package.absolute.file}"/>
  281. </exec>
  282. </target>
  283. <!--
  284. 第六步生成未签名的apk安装文件:
  285. Eclipse中自动生成debug签名文件存放在bin目录中,ant和命令行使用androidSDK提供的apkbuilder.bat命令脚本生成未签名的apk安装文件。
  286. -->
  287. <!--Packagetheapplicationwithoutsigningit.Thisallowsfortheapplicationtobesignedlaterwithanofficialpublishingkey.-->
  288. <targetname="package"depends="dex,package-resource">
  289. <echo>Packaging${out.unsigned.package.absolute.file}forrelease...</echo>
  290. <execexecutable="${tools.apkbuilder}"failonerror="true">
  291. <argvalue="${out.unsigned.package.absolute.file}"/>
  292. <argvalue="-u"/>
  293. <argvalue="-z"/>
  294. <argvalue="${out.resource.package.absolute.file}"/>
  295. <argvalue="-f"/>
  296. <argvalue="${out.dex.absolute.file}"/>
  297. <argvalue="-rf"/>
  298. <argvalue="${in.source.absolute.dir}"/>
  299. <argvalue="-rj"/>
  300. <argvalue="${in.external.libs.absolute.dir}"/>
  301. </exec>
  302. <echo>Itwillneedtobesignedwithjarsignerbeforebeingpublished.</echo>
  303. <deletefile="${out.resource.package.absolute.file}"/>
  304. <deletefile="${out.dex.absolute.file}"/>
  305. </target>
  306. <!--
  307. 第七步对未签名的apk进行签名生成签名后的android文件:
  308. -->
  309. <!--Packagetheapplicationwithoutsigningit.Thisallowsfortheapplicationtobesignedlaterwithanofficialpublishingkey.-->
  310. <targetname="jarsigner"depends="package">
  311. <echo>Packaging${out.unsigned.package.absolute.file}forrelease...</echo>
  312. <execexecutable="${tools.jarsigner}"failonerror="true">
  313. <argvalue="-keystore"/>
  314. <argvalue="${keystore}"/>
  315. <argvalue="-storepass"/>
  316. <argvalue="${password}"/>
  317. <argvalue="-keypass"/>
  318. <argvalue="${password}"/>
  319. <argvalue="-signedjar"/>
  320. <argvalue="${out.signed.package.absolute.file}"/>
  321. <argvalue="${out.unsigned.package.absolute.file}"/>
  322. <argvalue="${keyalias}"/>
  323. </exec>
  324. <deletefile="${out.unsigned.package.absolute.file}"/>
  325. </target>
  326. <!--
  327. 第七步签名的文件进行字节对齐;
  328. -->
  329. <targetname="zipalign"depends="jarsigner">
  330. <echo>Zipalign${out.aligned.package.absolute.file}forrelease...</echo>
  331. <execexecutable="${tools.zipalign}">
  332. <argvalue="-f"/>
  333. <argvalue="-v"/>
  334. <argvalue="4"/>
  335. <argvalue="${out.signed.package.absolute.file}"/>
  336. <argvalue="${out.aligned.package.absolute.file}"/>
  337. </exec>
  338. <deletefile="${out.signed.package.absolute.file}"/>
  339. </target>
  340. <!--
  341. 第八步签名的文件进行字节对齐;
  342. -->
  343. <targetname="release"depends="zipalign">
  344. <copytofile="${release.package.absolute.file}">
  345. <filesetdir="${out.absolute.dir}"includes="${out.aligned.package.file}"/>
  346. </copy>
  347. <deletefile="${out.aligned.package.absolute.file}"/>
  348. </target>
  349. </project>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读