《Android打包之bat腳本打包》實現了bat腳本的打包,如今咱們將該腳本轉換成ant的腳原本執行。ant腳本是xml文件,命令描述在target節點中,須要執行外置的命令時須要在target下增長子節點exec,並在exec節點中經過子節點arg來指定參數。咱們一樣按打包流程來實現該腳本,打包流程以下:css
一、生成R.javahtml
二、編譯*.javajava
三、生成classes.dexandroid
四、將assets、res打包windows
五、生成未簽名的apkmarkdown
六、將apk簽名antd
一、生成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}" failonerror="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腳本時調用。ui
(2)、depends指定的是該target執行前須要執行的target。spa
(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)、其餘變量自行對應。
二、編譯*.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}" failonerror="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腳本相對應。
<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}" failonerror="true" > <arg value="--dex" /> <arg value="--output=${dex-name}" /> <arg value="${bin}" /> </exec> </target>注:
(1)、兩個短橫表示的是--,因--在xml中屬性特殊標記,因此使用文字來描述。
(2)、相關的參數與《Android打包之bat腳本打包》的3_dex.bat腳本相對應。
四、將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}" failonerror="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腳本相對應。
<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}" failonerror="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腳本相對應。
<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}" failonerror="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腳本相對應。
<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腳本