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

Android使用Ant自动编译签名打包详解

 
阅读更多

1.生成R.java类文件:

  1. <!--GeneratetheR.javafileforthisproject'sresources.-->
  2. <targetname="resource-src"depends="copy">
  3. <echo>GeneratingR.java/Manifest.javafromtheresources...</echo>
  4. <execexecutable="${aapt}"failonerror="true">
  5. <argvalue="package"/>
  6. <argvalue="-m"/>
  7. <argvalue="-J"/>
  8. <argvalue="${outdir-gen}"/>
  9. <argvalue="-M"/>
  10. <argvalue="AndroidManifest.xml"/>
  11. <argvalue="-S"/>
  12. <argvalue="${resource-dir}"/>
  13. <argvalue="-I"/>
  14. <argvalue="${android-jar}"/>
  15. </exec>
  16. </target>

2.将.aidl文件生成.java类文件:

  1. <!--Generatejavaclassesfrom.aidlfiles.-->
  2. <targetname="aidl"depends="copy">
  3. <echo>CompilingaidlfilesintoJavaclasses...</echo>
  4. <applyexecutable="${aidl}"failonerror="true">
  5. <argvalue="-p${android-framework}"/>
  6. <argvalue="-I${srcdir}"/>
  7. <filesetdir="${srcdir}">
  8. <includename="**/*.aidl"/>
  9. </fileset>
  10. </apply>
  11. </target>

3.编译.java类文件生成class文件:

  1. <!--Compilethisproject's.javafilesinto.classfiles.-->
  2. <targetname="compile"depends="copy,resource-src,aidl">
  3. <javacencoding="GB18030"target="1.5"debug="true"extdirs=""srcdir="."destdir="${outdir-classes}"bootclasspath="${android-jar}">
  4. <classpath>
  5. <filesetdir="${external-libs}"includes="*.jar"/>
  6. </classpath>
  7. </javac>
  8. </target>
4.将class文件打包生成classes.dex文件:

  1. <!--Convertthisproject's.classfilesinto.dexfiles.-->
  2. <targetname="dex"depends="compile">
  3. <echo>Convertingcompiledfilesandexternallibrariesinto${outdir}/${dex-file}...</echo>
  4. <applyexecutable="${dx}"failonerror="true"parallel="true">
  5. <argvalue="--dex"/>
  6. <argvalue="--output=${intermediate-dex-ospath}"/>
  7. <argpath="${outdir-obfuscate-classes-ospath}"/>
  8. <filesetdir="${external-libs}"includes="*.jar"/>
  9. </apply>
  10. </target>

5.打包资源文件(包括res、assets、androidmanifest.xml等):

  1. <!--Puttheproject'sresourcesintotheoutputpackagefile.-->
  2. <targetname="package-res-and-assets">
  3. <echo>Packagingresourcesandassets...</echo>
  4. <execexecutable="${aapt}"failonerror="true">
  5. <argvalue="package"/>
  6. <argvalue="-f"/>
  7. <argvalue="-M"/>
  8. <argvalue="AndroidManifest.xml"/>
  9. <argvalue="-S"/>
  10. <argvalue="${resource-dir}"/>
  11. <argvalue="-A"/>
  12. <argvalue="${asset-dir}"/>
  13. <argvalue="-I"/>
  14. <argvalue="${android-jar}"/>
  15. <argvalue="-F"/>
  16. <argvalue="${resources-package}"/>
  17. </exec>
  18. </target>

6.生成未签名的apk安装文件:

  1. <targetname="package"depends="dex,package-res">
  2. <echo>Packaging${out-unsigned-package}forrelease...</echo>
  3. <execexecutable="${apk-builder}"failonerror="true">
  4. <argvalue="${out-unsigned-package-ospath}"/>
  5. <argvalue="-u"/>
  6. <argvalue="-z"/>
  7. <argvalue="${resources-package-ospath}"/>
  8. <argvalue="-f"/>
  9. <argvalue="${intermediate-dex-ospath}"/>
  10. <argvalue="-rf"/>
  11. <argvalue="${srcdir-ospath}"/>
  12. <argvalue="-rj"/>
  13. <argvalue="${external-libs-ospath}"/>
  14. </exec>
  15. <echo>Itwillneedtobesignedwithjarsignerbeforebeingpublished.</echo>
  16. </target>
7.对未签名的apk进行签名生成签名后的android文件:
  1. <targetname="jarsigner"depends="package">
  2. <echo>Packaging${out-unsigned-package}forrelease...</echo>
  3. <execexecutable="${jarsigner}"failonerror="true">
  4. <argvalue="-verbose"/>
  5. <argvalue="-storepass"/>
  6. <argvalue="byread002"/>
  7. <argvalue="-keypass"/>
  8. <argvalue="byread002"/>
  9. <argvalue="-keystore"/>
  10. <argvalue="bbyread.keystore"/>
  11. <argvalue="-signedjar"/>
  12. <argvalue="${out-signed-package-ospath}"/>
  13. <argvalue="${out-unsigned-package-ospath}"/>
  14. <argvalue="byread"/>
  15. </exec>
  16. </target>

*完整Ant配置文件build.xml:

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <projectname="Byread"default="debug">
  3. <propertyenvironment="env"/>
  4. <propertyname="sdk-folder"value="${env.ANDROID_SDK_HOME}"/>
  5. <!--SDKLocations-->
  6. <propertyname="sdk2.2-folder"value="${env.ANDROID_SDK_HOME}"/>
  7. <propertyname="sdk-folder"value="${sdk2.2-folder}/platforms/android-3"/>
  8. <propertyname="sdk-tools"value="${sdk-folder}/tools"/>
  9. <propertyname="android-tools"value="${sdk2.2-folder}/tools"/>
  10. <propertyname="proguardpath"location="${wtkhome}/lib/proguard"/>
  11. <!--step1.generateR.javabyaapt2.compilejavatoclassbyjavac。exe3.generateclasses.dexbydx.bat-->
  12. <!--4.packageresourcesbyaapt5.packageresourceandclasses.dexbyapkbuilder.bat6.signapkbyjarsinger-->
  13. <!--Tools-->
  14. <propertyname="aapt"value="${sdk-tools}/aapt.exe"/>
  15. <propertyname="dx"value="${sdk-tools}/dx.bat"/>
  16. <propertyname="apk-builder"value="${android-tools}/apkbuilder.bat"/>
  17. <propertyname="aidl"value="${android-tools}/aidl.exe"/>
  18. <propertyname="adb"value="${android-tools}/adb.exe"/>
  19. <propertyname="android-jar"value="${sdk-folder}/android.jar"/>
  20. <propertyname="jarsigner"value="${env.JAVA_HOME}/bin/jarsigner.exe"/>
  21. <!--ApplicationPackageName-->
  22. <propertyname="application-package"value="com.byread.reader"/>
  23. <propertyname="useragent"value="byAndroidWeb"/>
  24. <propertyname="version"value="1.02"/>
  25. <!--Theintermediatesdirectory-->
  26. <!--Eclipseuses"bin"foritsownoutput,sowedothesame.-->
  27. <propertyname="outdir-bin"value="bin"/>
  28. <propertyname="outdir-gen"value="gen"/>
  29. <!--sourcedirectories-->
  30. <propertyname="resource-dir"value="res"/>
  31. <propertyname="asset-dir"value="assets"/>
  32. <propertyname="srcdir"value="src"/>
  33. <propertyname="srcdir-ospath"value="${basedir}/${srcdir}"/>
  34. <propertyname="external-libs"value="libs"/>
  35. <propertyname="external-libs-ospath"value="${basedir}/${external-libs}"/>
  36. <!--destdirectories-->
  37. <propertyname="des-resource-dir"value="${outdir-bin}/res"/>
  38. <propertyname="des-asset-dir"value="${outdir-bin}/assets"/>
  39. <propertyname="des-srcdir"value="${outdir-bin}/src"/>
  40. <propertyname="des-srcdir-ospath"value="${basedir}/${outdir-bin}/${srcdir}"/>
  41. <propertyname="des-external-libs"value="${outdir-bin}/libs"/>
  42. <propertyname="des-external-libs-ospath"value="${basedir}/${outdir-bin}/${external-libs}"/>
  43. <!--Outputdirectories-->
  44. <propertyname="outdir-classes"value="${outdir-bin}/src"/>
  45. <propertyname="outdir-obfuscate-classes"value="${outdir-bin}/classes"/>
  46. <propertyname="outdir-obfuscate-classes-ospath"value="${basedir}/${outdir-obfuscate-classes}"/>
  47. <!--Intermediatefiles-->
  48. <propertyname="dex-file"value="classes.dex"/>
  49. <propertyname="intermediate-dex"value="${outdir-bin}/${dex-file}"/>
  50. <propertyname="intermediate-dex-ospath"value="${basedir}/${intermediate-dex}"/>
  51. <!--Thefinalpackagefiletogenerate-->
  52. <propertyname="resources-package"value="${outdir-bin}/${ant.project.name}"/>
  53. <propertyname="resources-package-ospath"value="${basedir}/${resources-package}"/>
  54. <propertyname="out-debug-package"value="${outdir-bin}/${ant.project.name}-debug.apk"/>
  55. <propertyname="out-debug-package-ospath"value="${basedir}/${out-debug-package}"/>
  56. <propertyname="out-unsigned-package"value="${outdir-bin}/${ant.project.name}-unsigned.apk"/>
  57. <propertyname="out-unsigned-package-ospath"value="${basedir}/${out-unsigned-package}"/>
  58. <propertyname="out-signed-package"value="${useragent}/${ant.project.name}.apk"/>
  59. <propertyname="out-signed-package-ospath"value="${basedir}/${out-signed-package}"/>
  60. <!--init-->
  61. <targetname="init">
  62. <echo>Creatingalloutputdirectories</echo>
  63. <deletedir="${outdir-bin}"/>
  64. <deletedir="${useragent}"/>
  65. <mkdirdir="${outdir-bin}"/>
  66. <mkdirdir="${outdir-classes}"/>
  67. <mkdirdir="${useragent}"/>
  68. </target>
  69. <!--copyoriginalstringsandmodifyuseragent-->
  70. <targetname="copy"depends="init">
  71. <echo>copyfilestooutputfolder</echo>
  72. <deletefile="${resource-dir}/values/strings.xml"/>
  73. <copyfile="strings.xml"todir="${resource-dir}/values"/>
  74. <replacefile="${resource-dir}/values/strings.xml"token="@USERAGENT@"value="${useragent}"encoding="utf-8"/>
  75. </target>
  76. <!--GeneratetheR.javafileforthisproject'sresources.-->
  77. <targetname="resource-src"depends="copy">
  78. <echo>GeneratingR.java/Manifest.javafromtheresources...</echo>
  79. <execexecutable="${aapt}"failonerror="true">
  80. <argvalue="package"/>
  81. <argvalue="-m"/>
  82. <argvalue="-J"/>
  83. <argvalue="${outdir-gen}"/>
  84. <argvalue="-M"/>
  85. <argvalue="AndroidManifest.xml"/>
  86. <argvalue="-S"/>
  87. <argvalue="${resource-dir}"/>
  88. <argvalue="-I"/>
  89. <argvalue="${android-jar}"/>
  90. </exec>
  91. </target>
  92. <!--Generatejavaclassesfrom.aidlfiles.-->
  93. <targetname="aidl"depends="copy">
  94. <echo>CompilingaidlfilesintoJavaclasses...</echo>
  95. <applyexecutable="${aidl}"failonerror="true">
  96. <argvalue="-p${android-framework}"/>
  97. <argvalue="-I${srcdir}"/>
  98. <filesetdir="${srcdir}">
  99. <includename="**/*.aidl"/>
  100. </fileset>
  101. </apply>
  102. </target>
  103. <!--Compilethisproject's.javafilesinto.classfiles.-->
  104. <targetname="compile"depends="copy,resource-src,aidl">
  105. <javacencoding="GB18030"target="1.5"debug="true"extdirs=""srcdir="."destdir="${outdir-classes}"bootclasspath="${android-jar}">
  106. <classpath>
  107. <filesetdir="${external-libs}"includes="*.jar"/>
  108. </classpath>
  109. </javac>
  110. </target>
  111. <!--Convertthisproject's.classfilesinto.dexfiles.-->
  112. <targetname="dex"depends="compile">
  113. <echo>Convertingcompiledfilesandexternallibrariesinto${outdir}/${dex-file}...</echo>
  114. <applyexecutable="${dx}"failonerror="true"parallel="true">
  115. <argvalue="--dex"/>
  116. <argvalue="--output=${intermediate-dex-ospath}"/>
  117. <argpath="${outdir-obfuscate-classes-ospath}"/>
  118. <filesetdir="${external-libs}"includes="*.jar"/>
  119. </apply>
  120. </target>
  121. <!--Puttheproject'sresourcesintotheoutputpackagefile.-->
  122. <targetname="package-res-and-assets">
  123. <echo>Packagingresourcesandassets...</echo>
  124. <execexecutable="${aapt}"failonerror="true">
  125. <argvalue="package"/>
  126. <argvalue="-f"/>
  127. <argvalue="-M"/>
  128. <argvalue="AndroidManifest.xml"/>
  129. <argvalue="-S"/>
  130. <argvalue="${resource-dir}"/>
  131. <argvalue="-A"/>
  132. <argvalue="${asset-dir}"/>
  133. <argvalue="-I"/>
  134. <argvalue="${android-jar}"/>
  135. <argvalue="-F"/>
  136. <argvalue="${resources-package}"/>
  137. </exec>
  138. </target>
  139. <!--Sameaspackage-res-and-assets,butwithout"-A${asset-dir}"-->
  140. <targetname="package-res-no-assets">
  141. <echo>Packagingresources...</echo>
  142. <execexecutable="${aapt}"failonerror="true">
  143. <argvalue="package"/>
  144. <argvalue="-f"/>
  145. <argvalue="-M"/>
  146. <argvalue="AndroidManifest.xml"/>
  147. <argvalue="-S"/>
  148. <argvalue="${resource-dir}"/>
  149. <!--Noassetsdirectory-->
  150. <argvalue="-I"/>
  151. <argvalue="${android-jar}"/>
  152. <argvalue="-F"/>
  153. <argvalue="${resources-package}"/>
  154. </exec>
  155. </target>
  156. <!--Invokethepropertargetdependingonwhetherornot
  157. anassetsdirectoryispresent.-->
  158. <!--TODO:findanicerwaytoincludethe"-A${asset-dir}"argument
  159. onlywhentheassetsdirexists.-->
  160. <targetname="package-res">
  161. <availablefile="${asset-dir}"type="dir"property="res-target"value="and-assets"/>
  162. <propertyname="res-target"value="no-assets"/>
  163. <antcalltarget="package-res-${res-target}"/>
  164. </target>
  165. <!--Packagetheapplicationandsignitwithadebugkey.
  166. Thisisthedefaulttargetwhenbuilding.Itisusedfordebug.-->
  167. <targetname="debug"depends="dex,package-res">
  168. <echo>Packaging${out-debug-package},andsigningitwithadebugkey...</echo>
  169. <execexecutable="${apk-builder}"failonerror="true">
  170. <argvalue="${out-debug-package-ospath}"/>
  171. <argvalue="-z"/>
  172. <argvalue="${resources-package-ospath}"/>
  173. <argvalue="-f"/>
  174. <argvalue="${intermediate-dex-ospath}"/>
  175. <argvalue="-rf"/>
  176. <argvalue="${srcdir-ospath}"/>
  177. <argvalue="-rj"/>
  178. <argvalue="${external-libs-ospath}"/>
  179. </exec>
  180. </target>
  181. <!--Packagetheapplicationwithoutsigningit.
  182. Thisallowsfortheapplicationtobesignedlaterwithanofficialpublishingkey.-->
  183. <targetname="package"depends="dex,package-res">
  184. <echo>Packaging${out-unsigned-package}forrelease...</echo>
  185. <execexecutable="${apk-builder}"failonerror="true">
  186. <argvalue="${out-unsigned-package-ospath}"/>
  187. <argvalue="-u"/>
  188. <argvalue="-z"/>
  189. <argvalue="${resources-package-ospath}"/>
  190. <argvalue="-f"/>
  191. <argvalue="${intermediate-dex-ospath}"/>
  192. <argvalue="-rf"/>
  193. <argvalue="${srcdir-ospath}"/>
  194. <argvalue="-rj"/>
  195. <argvalue="${external-libs-ospath}"/>
  196. </exec>
  197. <echo>Itwillneedtobesignedwithjarsignerbeforebeingpublished.</echo>
  198. </target>
  199. <targetname="jarsigner"depends="package">
  200. <echo>Packaging${out-unsigned-package}forrelease...</echo>
  201. <execexecutable="${jarsigner}"failonerror="true">
  202. <argvalue="-verbose"/>
  203. <argvalue="-storepass"/>
  204. <argvalue="byread002"/>
  205. <argvalue="-keypass"/>
  206. <argvalue="byread002"/>
  207. <argvalue="-keystore"/>
  208. <argvalue="bbyread.keystore"/>
  209. <argvalue="-signedjar"/>
  210. <argvalue="${out-signed-package-ospath}"/>
  211. <argvalue="${out-unsigned-package-ospath}"/>
  212. <argvalue="byread"/>
  213. </exec>
  214. </target>
  215. <targetname="release"depends="jarsigner">
  216. <echo>releaseforrelease...</echo>
  217. </target>
  218. <!--Installthepackageonthedefaultemulator-->
  219. <targetname="install"depends="debug">
  220. <echo>Installing${out-debug-package}ontodefaultemulator...</echo>
  221. <execexecutable="${adb}"failonerror="true">
  222. <argvalue="install"/>
  223. <argvalue="${out-debug-package}"/>
  224. </exec>
  225. </target>
  226. <targetname="reinstall"depends="debug">
  227. <echo>Installing${out-debug-package}ontodefaultemulator...</echo>
  228. <execexecutable="${adb}"failonerror="true">
  229. <argvalue="install"/>
  230. <argvalue="-r"/>
  231. <argvalue="${out-debug-package}"/>
  232. </exec>
  233. </target>
  234. <!--Uinstallthepackagefromthedefaultemulator-->
  235. <targetname="uninstall">
  236. <echo>Uninstalling${application-package}fromthedefaultemulator...</echo>
  237. <execexecutable="${adb}"failonerror="true">
  238. <argvalue="uninstall"/>
  239. <argvalue="${application-package}"/>
  240. </exec>
  241. </target>
  242. </project>

*在工程目录下建立一个build.bat批处理文件,内容为:

ant -buildfile build.xml

运行这个批处理文件即可。

注意:SDK的安装目录最后不要有中文和空格,否则会出现不必要的错误。如果你的安装路径包含Program Files(有空格),Ant方式打包会报错,没关系,不用重装,解决方法:配置SDk环境变量的时候把Program Files改为Progra~1即可。

转自:http://jojol-zhou.iteye.com/blog/729271

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics