from://http://blog.csdn.net/androiddevelop/article/details/11100109

相关文章列表:

《 Android 自动编译、打包生成apk文件 1 - 命令行方式》 《Android 自动编译、打包生成apk文件 2 - 使用原生Ant方式》(当前文章) 《 Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式》

上次使用命令行生成apk文件《Android 命令行编译、打包生成apk文件》,学习命令行生成的目的是为了编写ant打下基础。

一、 ant环境

下载ant包,配置环境变量

二、ant编译Android项目

1. 生成R文件 2. Java代码生成class文件 3. class文件生成dex文件 4. 打包资源 5. 生成apk 6 . 签名apk 1. aapt命令, 生成R文件
[plain] view plain copy print ?
  1. >aaptpackage-f-m-J./gen-Sres-MAndroidManifest.xml-ID:\android.jar

-f 如果编译生成的文件已经存在,强制覆盖。
-m 使生成的包的目录存放在-J参数指定的目录
-J 指定生成的R.java 的输出目录路径
-S指定res文件夹的路径 -I指定某个版本平台的android.jar文件的路径 -A指定assert文件夹的路径 转换为ant为: [html] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <execexecutable="aapt">
  2. <argvalue="package"/>
  3. <argvalue="-m"/>
  4. <argvalue="-J"/>
  5. <argvalue="gen"/>
  6. <argvalue="-S"/>
  7. <argvalue="res"/>
  8. <argvalue="-M"/>
  9. <argvalue="AndroidManifest.xml"/>
  10. <argvalue="-I"/>
  11. <argvalue="${android-jar}"/>
  12. <argvalue="--auto-add-overlay"/><!--覆盖资源-->
  13. </exec>

2. javac命令,生成class文件
[plain] view plain copy print ?
  1. >javac-target1.5-bootclasspathD:\android-sdk-windows\platforms\android-8\android.jar-dbinsrc\demo\project\*.javagen\demo\project\R.java

-target <版本> 生成特定 VM 版本的类文件
-bootclasspath <路径> 覆盖引导类文件的位置
-d <目录> 指定存放生成的类文件的位置
-sourcepath <路径> 指定查找输入源文件的位置

转换为ant为:

[html] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <javactarget="1.5"destdir="bin/classes"bootclasspath="${android-jar}">
  2. <srcpath="src"/>
  3. <srcpath="gen"/>
  4. </javac>



3. dx 命令,把class文件转换为.dex文件

[plain] view plain copy print ?
  1. >dx--dex--output=D:\ProjectDemo\bin\classes.dexD:\ProjectDemo\bin

--output=<要生成的classes.dex路径> <要处理的class文件的路径>

转换为ant为:

[html] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <execexecutable="dx.bat"failonerror="true">
  2. <argvalue="--dex"/>
  3. <argvalue="--output=${project-dir}\bin\classes.dex"/>
  4. <argpath="${project-dir}\bin\classes"/>
  5. </exec>



4. aapt命令,打包资源
[plain] view plain copy print ?
  1. >aaptpackage-f-MAndroidManifest.xml-Sres-ID:\android-sdk-windows\platforms\android-8\android.jar-Fbin\resources.ap_

-f 如果编译生成的文件已经存在,强制覆盖
-M 指定AndroidManifest.xml的路径
-S指定res文件夹路径 -I指定某个版本平台的android.jar的路径 -F指定输出文件完整路径

转换为ant为:

[html] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <execexecutable="aapt">
  2. <argvalue="package"/>
  3. <argvalue="-f"/>
  4. <argvalue="-M"/>
  5. <argvalue="AndroidManifest.xml"/>
  6. <argvalue="-S"/>
  7. <argvalue="res"/>
  8. <argvalue="-A"/>
  9. <argvalue="assets"/>
  10. <argvalue="-I"/>
  11. <argvalue="${android-jar}"/>
  12. <argvalue="-F"/>
  13. <argvalue="bin\resources.ap_"/>
  14. <argvalue="--auto-add-overlay"/>
  15. </exec>



5. apkbuilder命令,生成apk
[plain] view plain copy print ?
  1. apkbuilderD:\ProjectDemo\bin\projectdemo.apk-v-u-zD:\ProjectDemo\bin\resources.ap_-fD:\ProjectDemo\bin\classes.dex-rfD:\ProjectDemo\src

-v Verbose 显示过程信息
-u 创建一个无签名的包
-z 指定apk资源路径
-f指定dex文件路径 -rf指定源码路径

转换为ant为:

[html] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <execexecutable="apkbuilder.bat">
  2. <argvalue="${project-dir}\bin\unsigned.apk"/>
  3. <argvalue="-u"/>
  4. <argvalue="-z"/>
  5. <argvalue="${project-dir}\bin\resources.ap_"/>
  6. <argvalue="-f"/>
  7. <argvalue="${project-dir}\bin\classes.dex"/>
  8. </exec>


6. 签名

[plain] view plain copy print ?
  1. jarsigner-verbose-keystoreC:\Users\UserName\Desktop\build\release.keystore-storepassantPassword-keypassantPassword-signedjarD:\ProjectDemo\bin\projectdemo-signed.apkD:\ProjectDemo\bin\projectdemo.apkrelease


-verbose 签名/验证时输出详细信息
-keystore 密钥库位置
-storepass 用于密钥库完整性的口令
-keypass 专用密钥的口令(如果不同)
-signedjar 已签名的 JAR 文件的名称 (第一个apk是签名之后的文件, 第二个apk是需要签名的文件)

转换为ant为:

[html] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <execexecutable="jarsigner">
  2. <argvalue="-keystore"/>
  3. <argvalue="${project-dir}\release.keystore"/>
  4. <argvalue="-storepass"/>
  5. <argvalue="antPassword"/>
  6. <argvalue="-keypass"/>
  7. <argvalue="antPassword"/>
  8. <argvalue="-signedjar"/>
  9. <argvalue="${project-dir}\bin\signed.apk"/>
  10. <argvalue="${project-dir}\bin\unsigned.apk"/>
  11. <argvalue="release"/>
  12. </exec>

三、完整build.xml文件

[html] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
    1. <?xmlversion="1.0"encoding="utf-8"?>
    2. <projectdefault="main">
    3. <propertyname="android-jar"value="D:\android-sdk-windows\platforms\android-8\android.jar"/>
    4. <propertyname="project-dir"value="D:\ProjectDemo"/>
    5. <targetname="init">
    6. <echo>startiniting...</echo>
    7. <mkdirdir="gen"/>
    8. <delete>
    9. <filesetdir="gen"></fileset>
    10. </delete>
    11. <mkdirdir="bin/classes"/>
    12. <delete>
    13. <filesetdir="bin/classes"></fileset>
    14. </delete>
    15. <echo>finishiniting.</echo>
    16. </target>
    17. <targetname="main"depends="init">
    18. <echo>generatingR.javaforprojecttodirgen(usingaapt)...</echo>
    19. <execexecutable="aapt">
    20. <argvalue="package"/>
    21. <argvalue="-m"/>
    22. <argvalue="-J"/>
    23. <argvalue="gen"/>
    24. <argvalue="-S"/>
    25. <argvalue="res"/>
    26. <argvalue="-M"/>
    27. <argvalue="AndroidManifest.xml"/>
    28. <argvalue="-I"/>
    29. <argvalue="${android-jar}"/>
    30. <argvalue="--auto-add-overlay"/><!--覆盖资源-->
    31. </exec>
    32. <javactarget="1.5"destdir="bin/classes"bootclasspath="${android-jar}">
    33. <srcpath="src"/>
    34. <srcpath="gen"/>
    35. </javac>
    36. <echo>packagingclassfiles(includethethird-partyjars)tocalsses.dex...</echo>
    37. <execexecutable="dx.bat"failonerror="true">
    38. <argvalue="--dex"/>
    39. <argvalue="--output=${project-dir}\bin\classes.dex"/>
    40. <argpath="${project-dir}\bin\classes"/>
    41. </exec>
    42. <echo>packagingresource(includeres,assets,AndroidManifest.xml,etc.)tores.zip...</echo>
    43. <execexecutable="aapt">
    44. <argvalue="package"/>
    45. <argvalue="-f"/>
    46. <argvalue="-M"/>
    47. <argvalue="AndroidManifest.xml"/>
    48. <argvalue="-S"/>
    49. <argvalue="res"/>
    50. <argvalue="-A"/>
    51. <argvalue="assets"/>
    52. <argvalue="-I"/>
    53. <argvalue="${android-jar}"/>
    54. <argvalue="-F"/>
    55. <argvalue="bin\resources.ap_"/>
    56. <argvalue="--auto-add-overlay"/>
    57. </exec>
    58. <echo>buildingunsigned.apk...</echo>
    59. <execexecutable="apkbuilder.bat">
    60. <argvalue="${project-dir}\bin\unsigned.apk"/>
    61. <argvalue="-u"/>
    62. <argvalue="-z"/>
    63. <argvalue="${project-dir}\bin\resources.ap_"/>
    64. <argvalue="-f"/>
    65. <argvalue="${project-dir}\bin\classes.dex"/>
    66. </exec>
    67. <echo>signingtheunsignedapktofinalproductapk...</echo>
    68. <execexecutable="jarsigner">
    69. <argvalue="-keystore"/>
    70. <argvalue="${project-dir}\release.keystore"/>
    71. <argvalue="-storepass"/>
    72. <argvalue="antPassword"/>
    73. <argvalue="-keypass"/>
    74. <argvalue="antPassword"/>
    75. <argvalue="-signedjar"/>
    76. <argvalue="${project-dir}\bin\signed.apk"/>
    77. <argvalue="${project-dir}\bin\unsigned.apk"/>
    78. <argvalue="release"/>
    79. </exec>
    80. </target>
    81. <targetname="clean">
    82. </target>
    83. </project>

更多相关文章

  1. Android有用代码(一)
  2. Android PendingIntent实现原理和代码
  3. android Setting中隐藏项实现原理与代码
  4. Android学习之路(一)之 Android文件简单介绍
  5. Android 上如何移植live555生成库文件
  6. Android NDK 使用第一步,编译c文件,声明jni并调用。

随机推荐

  1. Android之Handler非主线程更新UI
  2. [置顶] 关于Android分辨率的支持(转)
  3. Android组件之间的交互
  4. [置顶] Android App关于应用程序升级的一
  5. 1、android orm之greendao
  6. android app性能优化
  7. [置顶] Android View 仿iOS SwitchButton
  8. Android EditText的使用
  9. 第五章 应用:Hello World!——上
  10. android学习五(android中基本控件的使用)