《Android打包之bat脚本打包》实现了bat脚本的打包,现在我们将该脚本转换成ant的脚本来执行。ant脚本是xml文件,命令描述在target节点中,需要执行外置的命令时需要在target下增加子节点exec,并在exec节点中通过子节点arg来指定参数。我们同样按打包流程来实现该脚本,打包流程如下:
1、生成R.java
2、编译*.java
3、生成classes.dex
4、将assets、res打包
5、生成未签名的apk
6、将apk签名
1、生成R.java
<target name="init" >
<echo>Initialize...</echo>
<delete dir="${bin}" />
<mkdir dir="${bin}" />
</target>
<target
name="gen-R"
depends="init" >
<echo>
Generating R.java from the resources...
1.aapt package -f -m -J gen -S res -I D:/android-sdk-windows/platforms/android-16/android.jar -M AndroidManifest.xml
</echo>
<exec
executable="${tools.aapt}"
failοnerrοr="true" >
<arg value="package" />
<arg value="-f" />
<arg value="-m" />
<arg value="-J" />
<arg value="${gen}" />
<arg value="-S" />
<arg value="${res}" />
<arg value="-M" />
<arg value="${manifest}" />
<arg value="-I" />
<arg value="${android-jar}" />
</exec>
</target>
注:
(1)、target中的name是该target的名字,该名字会在其他target的depends中调用,也可在project的default中使用,也可在指定ant脚本时调用。
(2)、depends指定的是该target执行前需要执行的target。
(3)、arg中的参数与《Android打包之bat脚本打包》的1_genR的bat脚本参数相对应。
(4)、${XXX}是对变量的引用,这些变量定义到property属性中。下面是相关的代码。
<property
name="sdk-folder"
value="D:\android-sdk-windows" />
<property
name="platform-folder"
value="${sdk-folder}\platforms\android-17" />
<property
name="platform-tools-folder"
value="${sdk-folder}\platform-tools" />
<property
name="jdk-folder"
value="D:\Program Files (x86)\Java\jdk1.6.0_45" />
<!-- tools -->
<property
name="android-jar"
value="${platform-folder}\android.jar" />
<property
name="tools.aapt"
value="${platform-tools-folder}\aapt.exe" />
<property
name="tools.javac"
value="${jdk-folder}\bin\javac.exe" />
<property
name="tools.dx"
value="${platform-tools-folder}\dx.bat" />
<property
name="tools.apkbuilder"
value="${sdk-folder}\tools\apkbuilder.bat" />
<property
name="tools.jarsigner"
value="${jdk-folder}\bin\jarsigner.exe" />
<!-- dir -->
<property
name="project-dir"
value="G:\Code\Android\Workspace\AntDemo" />
<property
name="res"
value="${project-dir}\res" />
<property
name="gen"
value="${project-dir}\gen" />
<property
name="src"
value="${project-dir}\src" />
<property
name="bin"
value="${project-dir}\bin" />
<property
name="assets"
value="${project-dir}\assets" />
<!-- files -->
<property
name="manifest"
value="${project-dir}\AndroidManifest.xml" />
<property
name="java-file-gen"
value="${gen}\com\example\antdemo\*.java" />
<property
name="java-file-src"
value="${src}\com\example\antdemo\*.java" />
<property
name="dex-name"
value="${bin}\classes.dex" />
<property
name="pakcage-temp-name"
value="${bin}\${ant.project.name}" />
<property
name="unsigned-apk-name"
value="${ant.project.name}_unsigned.apk" />
<property
name="unsigned-apk-path"
value="${bin}\${unsigned-apk-name}" />
<property
name="signed-apk-name"
value="${ant.project.name}.apk" />
<property
name="signed-apk-path"
value="${bin}\${signed-apk-name}" />
<property
name="keystore-name"
value="${project-dir}\my.keystore" />
<property
name="keystore-alias"
value="ant_test" />
注:
(1)、sdk-folder指定了android-sdk所在的目录。
(2)、jdk-folder指定的是jdk所在的目录。建议使用jdk1.6,jdk1.7可能会有问题。
(3)、tools中指定了所要用到的工具。
(4)、其他变量自行对应。
2、编译*.java
<target
name="compile"
depends="gen-R" >
<echo>
Compile...
2.javac -target 1.6 -bootclasspath D:/android-sdk-windows/platforms/android-16/android.jar -d bin gen\com\example\antdemo\*.java src\com\example\antdemo\*.java
</echo>
<exec
executable="${tools.javac}"
failοnerrοr="true" >
<arg value="-target" />
<arg value="1.6" />
<arg value="-bootclasspath" />
<arg value="${android-jar}" />
<arg value="-d" />
<arg value="${bin}" />
<arg value="${java-file-gen}" />
<arg value="${java-file-src}" />
</exec>
</target>
注:调用javac命令来编译,相关的参数与《
Android打包之bat脚本打包》的2_compile.bat脚本相对应。
3、生成classes.dex
<target
name="dex"
depends="compile" >
<echo>
Generate dex...
3.dx 两个短横dex 两个短横output=G:\Code\Android\Workspace\AntDemo\bin\classes.dex G:\Code\Android\Workspace\AntDemo\bin
</echo>
<exec
executable="${tools.dx}"
failοnerrοr="true" >
<arg value="--dex" />
<arg value="--output=${dex-name}" />
<arg value="${bin}" />
</exec>
</target>
注:
(1)、两个短横表示的是--,因--在xml中属性特殊标记,所以使用文字来描述。
(2)、相关的参数与《Android打包之bat脚本打包》的3_dex.bat脚本相对应。
4、将assets、res打包
<target
name="package"
depends="dex" >
<echo>
Package resource and assets...
4.aapt package -f -A assets -S res -I D:/android-sdk-windows/platforms/android-16/android.jar -M AndroidManifest.xml -F bin/AntDemo
</echo>
<exec
executable="${tools.aapt}"
failοnerrοr="true" >
<arg value="package" />
<arg value="-f" />
<arg value="-A" />
<arg value="${assets}" />
<arg value="-S" />
<arg value="${res}" />
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="-M" />
<arg value="${manifest}" />
<arg value="-F" />
<arg value="${pakcage-temp-name}" />
</exec>
</target>
注:相关的参数与《Android打包之bat脚本打包》的4_package.bat脚本相对应。
5、生成未签名的apk
<target
name="build-unsigned-apk"
depends="package" >
<echo>
Build unsigned apk
5.apkbuilder G:\Code\Android\Workspace\AntDemo\bin\AntDemo_unsigned.apk -v -u -z G:\Code\Android\Workspace\AntDemo\bin\AntDemo -f G:\Code\Android\Workspace\AntDemo\bin\classes.dex -rf G:\Code\Android\Workspace\AntDemo\src
</echo>
<exec
executable="${tools.apkbuilder}"
failοnerrοr="true" >
<arg value="${unsigned-apk-path}" />
<arg value="-v" />
<arg value="-u" />
<arg value="-z" />
<arg value="${pakcage-temp-name}" />
<arg value="-f" />
<arg value="${dex-name}" />
<arg value="-rf" />
<arg value="${src}" />
</exec>
</target>
注:相关的参数与《
Android打包之bat脚本打包》的5_unsinged.bat脚本相对应。
6、将apk签名
<target
name="sign-apk"
depends="build-unsigned-apk" >
<echo>
Sign apk
6.jarsigner -keystore G:\Code\Android\Workspace\AntDemo\build\my.keystore -storepass 123456 -keypass 123456 -signedjar G:\Code\Android\Workspace\AntDemo\bin\AntDemo_signed.apk G:\Code\Android\Workspace\AntDemo\bin\AntDemo_unsigned.apk ant_test
</echo>
<exec
executable="${tools.jarsigner}"
failοnerrοr="true" >
<arg value="-keystore" />
<arg value="${keystore-name}" />
<arg value="-storepass" />
<arg value="123456" />
<arg value="-keypass" />
<arg value="123456" />
<arg value="-signedjar" />
<arg value="${signed-apk-path}" />
<arg value="${unsigned-apk-path}" />
<arg value="${keystore-alias}" />
</exec>
</target>
注:相关的参数与《
Android打包之bat脚本打包
》的6_singed.bat脚本相对应。
附1: 增加release命令,执行一些收尾任务。
<target
name="release"
depends="sign-apk" >
<delete file="${unsigned-apk-path}" />
<echo>
APK is released. path:${signed-apk-path}
</echo>
</target>
注:delete是ant的内置命令。
附2:脚本头
<?xml version="1.0" encoding="UTF-8"?>
<project
name="AntDemo"
default="release" >
....
</project>
注:
name是工程名称,default指的是默认执行的target。下面是执行的过程图。
输出的apk文件如下
转载请注明出处:Android打包之将bat脚本转换成ant脚本