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 ?
  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 ?
  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 ?
  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 ?
  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 ?
  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 ?
  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 ?
    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高手进阶教程(七)之----Android(安卓)中Preferences的使
  3. Android(安卓)MVVM之Databinding(二) 使用篇
  4. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  5. Android(安卓)requires compiler compliance level 5.0 or 6.0.
  6. Android有用代码片段(四)
  7. Android有用代码片段(四)
  8. Android(安卓)APK反编译详解(附图)
  9. Android连载之:第二章第三节:利用其他的开发环境和工具开发Android

随机推荐

  1. Android中_TextView属性的XML详解 包括单
  2. Linux ubuntu repo安装方法
  3. Android多点触控技术
  4. Android(安卓)-- Layout布局文件里的andr
  5. 移动开发参考书之Android篇
  6. 我的2016,展望2017
  7. 在Android中使用ORMLite
  8. 如何上传应用软件到 Android(安卓)Market
  9. Android之AIDL实现两个app的调用以及双进
  10. 谷歌将大改Android用户体验 欲取消自定义