通過Ant將Android project編譯打包成APK檔案並安裝到手機
本文簡要介紹如何通過Ant指令碼Android project編譯打包成APK檔案並安裝到手機。
主要步驟:
1生成R.java類檔案:利用ant和命令列使用android SDK提供的aapt.ext程式生成R.java。
2將.aidl檔案生成.java類檔案:利用ant和命令列使用android SDK提供的aidl.exe生成.java檔案。
3第三步 編譯.java類檔案生成class檔案:利用ant和命令列使用jdk的javac編譯java類檔案生成class檔案。
4第四步 將class檔案打包生成classes.dex檔案:利用ant命令列使用android SDK提供的dx.bat命令列指令碼生成classes.dex檔案。
5第五步 打包資原始檔(包括res、assets、androidmanifest.xml等):ant命令列使用Android SDK提供的aapt.exe生成資源包檔案。
6第六步 生成未簽名的apk安裝檔案:ant和命令列使用android SDK提供的apkbuilder.bat命令指令碼生成未簽名的apk安裝檔案。
7第七步 對未簽名的apk進行簽名生成簽名後的android檔案:ant和命令列使用jdk的jarsigner對未簽名的包進行apk簽名。
8第八步 安裝和解除安裝APK檔案,利用ant命令列使用Android SDK提供的adb.exe。
下面貼出build指令碼和property檔案:具體例子可以從http://download.csdn.net/source/3505789 下載。
<?xml version="1.0" encoding="UTF-8"?>
<project name="AntTest" default="help">
<property file="build.properties" />
<path id="android.antlibs">
<pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
<pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
<pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
</path>
<path id="project.classpath">
<pathelement location="${android-jar}" />
</path>
<taskdef name="setup" classname="com.android.ant.SetupTask" classpathref="android.antlibs" />
<setup/>
<target name="copy">
<copy todir="${outdir-gen}">
<fileset dir="${srcdir}" />
</copy>
</target>
<target name="GenRJAVA">
<echo>Generating R.java from the resources...</echo>
<mkdir dir="${outdir-gen}" />
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-m" />
<arg value="-J" />
<arg value="${outdir-gen}" />
<arg value="-M" />
<arg value="${projecthomedir}/AndroidManifest.xml" />
<arg value="-S" />
<arg value="${resource-dir}" />
<arg value="-I" />
<arg value="${android-jar}" />
</exec>
</target>
<target name="aidl" depends="copy">
<echo>Compiling aidl files into Java classes...</echo>
<apply executable="${aidl}" failonerror="true">
<arg value="-p${sdk.dir}" />
<arg value="-I${srcdir}" />
<fileset dir="${srcdir}">
<include name="**/*.aidl" />
</fileset>
</apply>
</target>
<!-- Compile this project's .java files into .class files. -->
<target name="compile" depends="copy, GenRJAVA, aidl">
<mkdir dir="${outdir-classes}" />
<javac encoding="UTF-8" target="1.5" debug="true" extdirs="" srcdir="${outdir-gen}" destdir="${outdir-classes}" bootclasspath="${android-jar}">
<classpath refid="project.classpath" />
</javac>
</target>
<!-- Convert this project's .class files into .dex files. -->
<target name="dex" depends="compile">
<echo>Converting compiled files and external libraries into ${outdir-dx}/test.dex...</echo>
<mkdir dir="${outdir-dx}" />
<apply executable="${dx}" failonerror="true" parallel="true">
<arg value="--dex" />
<arg value="--output=${outdir-dx}/test.dex" />
<arg path="${outdir-classes}" />
<fileset dir="${projecthomedir}" includes="*.jar" />
</apply>
</target>
<!-- Put the project's resources into the output package file. -->
<target name="package-res">
<echo>Packaging resources and assets...</echo>
<mkdir dir="${apkdir}" />
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-M" />
<arg value="${projecthomedir}/AndroidManifest.xml" />
<arg value="-S" />
<arg value="${resource-dir}" />
<arg value="-A" />
<arg value="${asset-dir}" />
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="-F" />
<arg value="${resources-package}" />
</exec>
</target>
<target name="packageAPK" depends="dex, package-res">
<echo>Packaging apk for release...</echo>
<exec executable="${apkbuilder}" failonerror="true">
<arg value="${apkdir}/${unsignedapkname}" />
<arg value="-u" />
<arg value="-z" />
<arg value="${resources-package}" />
<arg value="-f" />
<arg value="${outdir-dx}/test.dex" />
<arg value="-rf" />
<arg value="${srcdir}" />
<arg value="-rj" />
<arg value="${outdir-gen}" />
</exec>
<echo>It will need to be signed with jarsigner before being published.</echo>
</target>
<target name="signAPK" depends="packageAPK">
<echo>signAPK ${apkdir}/${apkname}</echo>
<signjar
jar="${apkdir}/${unsignedapkname}"
signedjar="${apkdir}/${apkname}"
keystore="keystore"
storepass="123456"
alias="alias"
keypass="123456"
verbose="-verbose" />
<!--
<exec executable="${jarsigner}" failonerror="true">
<arg value="-verbose" />
<arg value="-storepass" />
<arg value="test" />
<arg value="-keypass" />
<arg value="test" />
<arg value="-keystore" />
<arg value="bbyread.keystore" />
<arg value="-signedjar" />
<arg value="${apkdir}/${apkname}" />
<arg value="${apkdir}/${unsignedapkname}" />
<arg value="byread" />
</exec>-->
</target>
<target name="installAPK" depends="signAPK">
<echo>Install APK...</echo>
<exec executable="adb" failonerror="true">
<arg value="install" />
<arg value="${apkdir}/${apkname}" />
</exec>
</target>
<target name="uninstallAPK">
<echo>uninstall APK..</echo>
<exec executable="adb" failonerror="true">
<arg value="uninstall" />
<arg value="com.anttest" />
</exec>
</target>
<target name="help" />
</project>
property檔案內容:
target=android-8
sdk.dir=D:\\Android\\android-sdk-windows
apkbuilder=${sdk.dir}\\tools\\apkbuilder.bat
android-jar=${sdk.dir}\\platforms\\android-8\\android.jar
projecthomedir=D:\\Android\\AndriodWK\\AntTest
builddir=${projecthomedir}\\build
resource-dir=${projecthomedir}\\res
asset-dir=${projecthomedir}\\assets
srcdir=${projecthomedir}\\src
outdir-gen=${builddir}\\src
outdir-classes=${builddir}\\classes
outdir-dx=${builddir}\\dx
resources-package=${builddir}\\respak
apkdir=${builddir}\\apk
unsignedapkname=unsigntest.apk
apkname=test.apk
相關文章
- ant:如何用ant將web project打包成war包WebProject
- win/mac下反編譯Android安裝包-APK檔案Mac編譯AndroidAPK
- 在Windows下用ant編譯Android應用生成apk安裝包Windows編譯AndroidAPK
- Android 自動編譯、打包生成apk檔案 3 - 使用SDK Ant方式Android編譯APK
- 通過ant指令碼編譯打包android工程指令碼編譯Android
- Android Apk 檔案反編譯和重新打包的過程分析AndroidAPK編譯
- Android Studio 打包生成的 apk 安裝包裝到手機上閃退AndroidAPK
- 通過原始碼的方式編譯hadoop的安裝檔案原始碼編譯Hadoop
- 安卓apk檔案反編譯安卓APK編譯
- Mac環境下adb命令安裝apk到手機MacAPK
- 使用ant編譯Java檔案(一)編譯Java
- 使用ant編譯Java檔案(二)編譯Java
- Android Apk安裝過程分析AndroidAPK
- 將Android程式從Eclipse中匯出成.APK可安裝檔案AndroidEclipseAPK
- Android開發把專案打包成apkAndroidAPK
- 如何給你的Android 安裝檔案(APK)瘦身AndroidAPK
- Nginx 的編譯並打包成二.txtNginx編譯
- Android Apk反編譯系列教程(一)如何反編譯APKAndroidAPK編譯
- Android程式碼實現APK檔案的安裝與解除安裝AndroidAPK
- 通過USB埠 SSH 到手機
- android使用ant編譯(rem)Android編譯REM
- Gluon 編譯 JavaFx -> android apk編譯JavaAndroidAPK
- [轉]andriod的apk檔案相關的編譯反編譯工具APK編譯
- 常見 APK 反編譯工具安裝與使用APK編譯
- Linux下通過原始碼編譯安裝程式Linux原始碼編譯
- rpm安裝的php 通過編譯增加模組PHP編譯
- android apk安裝過程原始碼解析AndroidAPK原始碼
- APK安裝過程APK
- SpringCloud 通過feign檔案傳輸並打zip包下載SpringGCCloud
- Ant and Flex 用Ant編譯MXML檔案 - 螞蟻咬斷鬆緊帶(^_^)Flex編譯XML
- 關於Android APK反編譯AndroidAPK編譯
- Android Apk反編譯系列教程(二)APK重打包AndroidAPK編譯
- Windows使用批處理給手機批量安裝apk檔案WindowsAPK
- 如何將web打包成jar檔案WebJAR
- vue 專案打包成apk(Hbuilder方案)VueAPKUI
- android 反編譯APK取原始碼。Android編譯APK原始碼
- 給android虛擬機器avd安裝apkAndroid虛擬機APK
- Android 專案編譯過程Android編譯