`
coolerbaosi
  • 浏览: 730282 次
文章分类
社区版块
存档分类
最新评论

Android自动打包、签名、优化、上传ANT脚本

 
阅读更多

此脚本是针对于android在线更新的SDK,以前android有离线安装包,后来改为直接在线安装进行,两者的成本在于sdk的路径和一些工具类的路径不同。

此脚本用于进行自动编译用户需要的APK安装包,使用时候,请将签名用的*.keystore放在和build.xml同一目录,并命名为android.keystore,(如想更改,请在build.xml 中的jarsigner target进行更改)

build.properties

Java代码收藏代码
  1. android.tools=${sdk.folder}tools
  2. android_version=2.1
  3. apk.sdk.home=D\:/androidsdktools/android-sdk_r04-windows/android-sdk-windows/
  4. apk.tools=${apk.sdk.home}tools/
  5. application.package=com.test.testname
  6. bin.dir=${jde.home}bin
  7. app.name=NewAndroid
  8. app.source.path=G\:/test/
  9. jdk.home=C\:/Java_1.6_U18/jdk1.6.0_18/
  10. output.dir=../outputDir
  11. password=123456
  12. sdk.folder=D\:/androidsdktools/android-sdk_r04-windows/android-sdk-windows/platforms/android-2.0.1/
  13. temp.dir=127980239039628

Build.xml

Xml代码收藏代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <projectname="Test"default="debug"basedir=".">
  3. <propertyfile="build.properties">
  4. </property>
  5. <!--Theintermediatesdirectory-->
  6. <!--Eclipseuses"bin"foritsownoutput,sowedothesame.-->
  7. <propertyname="outdir"value="bin"/>
  8. <!--*************************************************************************************-->
  9. <!--Nouserservicablepartsbelow.-->
  10. <propertyname="android-framework"value="${sdk.folder}/framework.aidl"/>
  11. <!--Inputdirectories-->
  12. <propertyname="resource-dir"value="res"/>
  13. <propertyname="asset-dir"value="assets"/>
  14. <propertyname="srcdir"value="src"/>
  15. <conditionproperty="srcdir-ospath"value="${basedir}\${srcdir}"else="${basedir}/${srcdir}">
  16. <osfamily="windows"/>
  17. </condition>
  18. <propertyname="external-libs"value="libs"/>
  19. <conditionproperty="external-libs-ospath"value="${basedir}\${external-libs}"else="${basedir}/${external-libs}">
  20. <osfamily="windows"/>
  21. </condition>
  22. <!--Outputdirectories-->
  23. <propertyname="outdir-classes"value="${outdir}/classes"/>
  24. <conditionproperty="outdir-classes-ospath"value="${basedir}\${outdir-classes}"else="${basedir}/${outdir-classes}">
  25. <osfamily="windows"/>
  26. </condition>
  27. <conditionproperty="zipalign-package-ospath"value="${basedir}\${output.dir}\${app.name}_for_android_${android_version}_${temp.dir}.apk"else="${basedir}/${output.dir}">
  28. <osfamily="windows"/>
  29. </condition>
  30. <!--CreateR.javainthesourcedirectory-->
  31. <propertyname="outdir-r"value="src"/>
  32. <!--Intermediatefiles-->
  33. <propertyname="dex-file"value="classes.dex"/>
  34. <propertyname="intermediate-dex"value="${outdir}/${dex-file}"/>
  35. <conditionproperty="intermediate-dex-ospath"value="${basedir}\${intermediate-dex}"else="${basedir}/${intermediate-dex}">
  36. <osfamily="windows"/>
  37. </condition>
  38. <!--Thefinalpackagefiletogenerate-->
  39. <propertyname="resources-package"value="${outdir}/${ant.project.name}.ap_"/>
  40. <conditionproperty="resources-package-ospath"value="${basedir}\${resources-package}"else="${basedir}/${resources-package}">
  41. <osfamily="windows"/>
  42. </condition>
  43. <propertyname="out-debug-package"value="${outdir}/${ant.project.name}-debug.apk"/>
  44. <conditionproperty="out-debug-package-ospath"value="${basedir}\${out-debug-package}"else="${basedir}/${out-debug-package}">
  45. <osfamily="windows"/>
  46. </condition>
  47. <propertyname="out-unsigned-package"value="${outdir}/${ant.project.name}-unsigned.apk"/>
  48. <propertyname="out-signed-package"value="${outdir}/${ant.project.name}-signed.apk"/>
  49. <conditionproperty="out-unsigned-package-ospath"value="${basedir}\${out-unsigned-package}"else="${basedir}/${out-unsigned-package}">
  50. <osfamily="windows"/>
  51. </condition>
  52. <conditionproperty="out-signed-package-ospath"value="${basedir}\${out-signed-package}"else="${basedir}/${out-signed-package}">
  53. <osfamily="windows"/>
  54. </condition>
  55. <!--Tools-->
  56. <conditionproperty="aapt"value="${android.tools}/aapt.exe"else="${android.tools}/aapt">
  57. <osfamily="windows"/>
  58. </condition>
  59. <conditionproperty="zipalign"value="${apk.tools}/zipalign.exe"else="${apk.tools}/zipalign">
  60. <osfamily="windows"/>
  61. </condition>
  62. <conditionproperty="jarsigner"value="${jdk.home}/bin/jarsigner.exe"else="${jdk.home}/bin/jarsigner">
  63. <osfamily="windows"/>
  64. </condition>
  65. <conditionproperty="aidl"value="${android.tools}/aidl.exe"else="${android.tools}/aidl">
  66. <osfamily="windows"/>
  67. </condition>
  68. <conditionproperty="adb"value="${apk.tools}/adb.exe"else="${apk.tools}/adb">
  69. <osfamily="windows"/>
  70. </condition>
  71. <conditionproperty="dx"value="${android.tools}/dx.bat"else="${android.tools}/dx">
  72. <osfamily="windows"/>
  73. </condition>
  74. <conditionproperty="apk-builder"value="${apk.tools}/apkbuilder.bat"else="${apk.tools}/apkbuilder">
  75. <osfamily="windows"/>
  76. </condition>
  77. <propertyname="android-jar"value="${sdk.folder}/android.jar"/>
  78. <!--Rules-->
  79. <!--Createtheoutputdirectoriesiftheydon'texistyet.-->
  80. <targetname="dirs"depends="init">
  81. <echo>Creatingoutputdirectoriesifneeded...</echo>
  82. <mkdirdir="${outdir}"/>
  83. <mkdirdir="${outdir-classes}"/>
  84. </target>
  85. <!--GeneratetheR.javafileforthisproject'sresources.-->
  86. <targetname="resource-src"depends="dirs">
  87. <echo>GeneratingR.java/Manifest.javafromtheresources...</echo>
  88. <execexecutable="${aapt}"failonerror="true">
  89. <argvalue="package"/>
  90. <argvalue="-m"/>
  91. <argvalue="-J"/>
  92. <argvalue="${outdir-r}"/>
  93. <argvalue="-M"/>
  94. <argvalue="AndroidManifest.xml"/>
  95. <argvalue="-S"/>
  96. <argvalue="${resource-dir}"/>
  97. <argvalue="-I"/>
  98. <argvalue="${android-jar}"/>
  99. </exec>
  100. </target>
  101. <!--Generatejavaclassesfrom.aidlfiles.-->
  102. <targetname="aidl"depends="dirs">
  103. <echo>CompilingaidlfilesintoJavaclasses...</echo>
  104. <applyexecutable="${aidl}"failonerror="true">
  105. <argvalue="-p${android-framework}"/>
  106. <argvalue="-I${srcdir}"/>
  107. <filesetdir="${srcdir}">
  108. <includename="**/*.aidl"/>
  109. </fileset>
  110. </apply>
  111. </target>
  112. <!--Compilethisproject's.javafilesinto.classfiles.-->
  113. <targetname="compile"depends="dirs,resource-src,aidl">
  114. <javacencoding="ascii"target="1.5"debug="true"extdirs=""srcdir="."destdir="${outdir-classes}"bootclasspath="${android-jar}">
  115. <classpath>
  116. <filesetdir="${external-libs}"includes="*.jar"/>
  117. </classpath>
  118. </javac>
  119. </target>
  120. <!--Convertthisproject's.classfilesinto.dexfiles.-->
  121. <targetname="dex"depends="compile">
  122. <echo>Convertingcompiledfilesandexternallibrariesinto${outdir}/${dex-file}...</echo>
  123. <applyexecutable="${dx}"failonerror="true"parallel="true">
  124. <argvalue="--dex"/>
  125. <scriptsrc="/javascripts/tinymce/themes/advanced/langs/zh.js"type="text/javascript"><!--mce:0--></script><scriptsrc="/javascripts/tinymce/plugins/javaeye/langs/zh.js"type="text/javascript"><!--mce:1--></script><argvalue="--output=${intermediate-dex-ospath}"/>
  126. <argpath="${outdir-classes-ospath}"/>
  127. <filesetdir="${external-libs}"includes="*.jar"/>
  128. </apply>
  129. </target>
  130. <!--Puttheproject'sresourcesintotheoutputpackagefile.-->
  131. <targetname="package-res-and-assets">
  132. <echo>Packagingresourcesandassets...</echo>
  133. <execexecutable="${aapt}"failonerror="true">
  134. <argvalue="package"/>
  135. <argvalue="-f"/>
  136. <argvalue="-M"/>
  137. <argvalue="AndroidManifest.xml"/>
  138. <argvalue="-S"/>
  139. <argvalue="${resource-dir}"/>
  140. <argvalue="-A"/>
  141. <argvalue="${asset-dir}"/>
  142. <argvalue="-I"/>
  143. <argvalue="${android-jar}"/>
  144. <argvalue="-F"/>
  145. <argvalue="${resources-package}"/>
  146. </exec>
  147. </target>
  148. <!--Sameaspackage-res-and-assets,butwithout"-A${asset-dir}"-->
  149. <targetname="package-res-no-assets">
  150. <echo>Packagingresources...</echo>
  151. <execexecutable="${aapt}"failonerror="true">
  152. <argvalue="package"/>
  153. <argvalue="-f"/>
  154. <argvalue="-M"/>
  155. <argvalue="AndroidManifest.xml"/>
  156. <argvalue="-S"/>
  157. <argvalue="${resource-dir}"/>
  158. <!--Noassetsdirectory-->
  159. <argvalue="-I"/>
  160. <argvalue="${android-jar}"/>
  161. <argvalue="-F"/>
  162. <argvalue="${resources-package}"/>
  163. </exec>
  164. </target>
  165. <!--Invokethepropertargetdependingonwhetherornot
  166. anassetsdirectoryispresent.-->
  167. <!--TODO:findanicerwaytoincludethe"-A${asset-dir}"argument
  168. onlywhentheassetsdirexists.-->
  169. <targetname="package-res">
  170. <availablefile="${asset-dir}"type="dir"property="res-target"value="and-assets"/>
  171. <propertyname="res-target"value="no-assets"/>
  172. <antcalltarget="package-res-${res-target}"/>
  173. </target>
  174. <!--Packagetheapplicationandsignitwithadebugkey.
  175. Thisisthedefaulttargetwhenbuilding.Itisusedfordebug.-->
  176. <targetname="debug"depends="dex,package-res">
  177. <echo>Packaging${out-debug-package},andsigningitwithadebugkey...</echo>
  178. <execexecutable="${apk-builder}"failonerror="true">
  179. <argvalue="${out-debug-package-ospath}"/>
  180. <argvalue="-z"/>
  181. <argvalue="${resources-package-ospath}"/>
  182. <argvalue="-f"/>
  183. <argvalue="${intermediate-dex-ospath}"/>
  184. <argvalue="-rf"/>
  185. <argvalue="${srcdir-ospath}"/>
  186. <argvalue="-rj"/>
  187. <argvalue="${external-libs-ospath}"/>
  188. </exec>
  189. </target>
  190. <!--Packagetheapplicationwithoutsigningit.
  191. Thisallowsfortheapplicationtobesignedlaterwithanofficialpublishingkey.-->
  192. <targetname="release"depends="dex,package-res">
  193. <echo>Packaging${out-unsigned-package}forrelease...</echo>
  194. <execexecutable="${apk-builder}"failonerror="true">
  195. <argvalue="${out-unsigned-package-ospath}"/>
  196. <argvalue="-u"/>
  197. <argvalue="-z"/>
  198. <argvalue="${resources-package-ospath}"/>
  199. <argvalue="-f"/>
  200. <argvalue="${intermediate-dex-ospath}"/>
  201. <argvalue="-rf"/>
  202. <argvalue="${srcdir-ospath}"/>
  203. <argvalue="-rj"/>
  204. <argvalue="${external-libs-ospath}"/>
  205. </exec>
  206. <echo>Itwillneedtobesignedwithjarsignerbeforebeingpublished.</echo>
  207. </target>
  208. <!--Installthepackageonthedefaultemulator-->
  209. <targetname="install"depends="debug">
  210. <echo>Installing${out-debug-package}ontodefaultemulator...</echo>
  211. <execexecutable="${adb}"failonerror="true">
  212. <argvalue="install"/>
  213. <argvalue="${out-debug-package}"/>
  214. </exec>
  215. </target>
  216. <targetname="reinstall"depends="debug">
  217. <echo>Installing${out-debug-package}ontodefaultemulator...</echo>
  218. <execexecutable="${adb}"failonerror="true">
  219. <argvalue="install"/>
  220. <argvalue="-r"/>
  221. <argvalue="${out-debug-package}"/>
  222. </exec>
  223. </target>
  224. <!--Uinstallthepackagefromthedefaultemulator-->
  225. <targetname="uninstall">
  226. <echo>Uninstalling${application.package}fromthedefaultemulator...</echo>
  227. <execexecutable="${adb}"failonerror="true">
  228. <argvalue="uninstall"/>
  229. <argvalue="${application.package}"/>
  230. </exec>
  231. </target>
  232. <!--初始化目录-->
  233. <targetname="init"depends="Copy_Ressource">
  234. <echomessage="Initoutputdirectory.....">
  235. </echo>
  236. <mkdirdir="${output.dir}"/>
  237. </target>
  238. <!--拷贝资源-->
  239. <targetname="Copy_Ressource">
  240. <echomessage="Copyappresource.">
  241. </echo>
  242. <copytodir="${asset-dir}"overwrite="true"failonerror="false">
  243. <filesetdir="${app.source.path}">
  244. <includename="*.*"/>
  245. </fileset>
  246. </copy>
  247. </target>
  248. <!--进行签名-->
  249. <targetname="jarsigner"depends="release">
  250. <execexecutable="${jarsigner}"failonerror="true">
  251. <argvalue="-verbose"/>
  252. <argvalue="-storepass"/>
  253. <argvalue="${password}"/>
  254. <argvalue="-keystore"/>
  255. <argvalue="android.keystore"/>
  256. <argvalue="-signedjar"/>
  257. <argvalue="${out-signed-package-ospath}"/>
  258. <argvalue="${out-unsigned-package-ospath}"/>
  259. <argvalue="android.keystore"/>
  260. </exec>
  261. </target>
  262. <!--进行优化-->
  263. <targetname="zipalign"depends="jarsigner">
  264. <execexecutable="${zipalign}"failonerror="true">
  265. <argvalue="-v"/>
  266. <argvalue="-f"/>
  267. <argvalue="4"/>
  268. <argvalue="${out-signed-package-ospath}"/>
  269. <argvalue="${zipalign-package-ospath}"/>
  270. </exec>
  271. </target>
  272. <!--直接上传到手机中去-->
  273. <targetname="adb"depends="zipalign">
  274. <execexecutable="${adb}"failonerror="true">
  275. <argvalue="install"/>
  276. <argvalue="-r"/>
  277. <argvalue="${zipalign-package-ospath}"/>
  278. </exec>
  279. </target>
  280. </project>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics