Ant打包APK
来源:互联网 发布:八叉树算法 js 编辑:程序博客网 时间:2024/06/05 18:23
除了使用IDE将android工程打包生成APK之外,我们也可以使用Ant对android工程进行打包。使用Ant对android工程进行打包的好处在于我们可以根据自己的需要定制打包流程。下面就来详细说说通过Ant对android工程进行打包生成APK的过程。
一、首先是我们的准备工作,需要android工程:
这就是我们打包需要的android工程目录,我们打包一个android工程需要的最基本的文件包括:
资产文件 assets
第三方库 libs
资源文件 res
源代码 src
清单文件 AndroidManifest.xml
二、android工程准备好,我们还需要准备打包需要的工具,这些工具都在SDK当中。主要的工具有:
aapt 根据资源文件生成R文件
aidl 生成AIDL协议对应的java文件
dx 将class文件编译为dex文件
apkbuilder 将所有文件打包为apk
jarsigner 对apk进行签名
这些工具都在SDK当中,但是在SDK的r22.6.2版本Google不再提供apkbuilder.bat这个批处理命令,但是我们还是能够通过将apkbuilder.bat复制到新版本SDK的对应目录来使用其对android工程进行打包。
三、下面就详细说说每一个命令在打包过程中具体的执行。
1、根据工程中的资源文件生成R.java文件
<target name="gen-R" depends="initapk"><echo>Generating R.java from the resources...</echo><exec executable="${aapt}" failonerror="true"><arg value="package" /><arg value="-f" /><arg value="-m" /><arg value="-J" /><arg value="${dir-gen}" /><arg value="-S" /><arg value="${resource-dir}" /><arg value="-M" /><arg value="${manifest-xml}" /><arg value="-I" /><arg value="${android-jar}" /></exec></target>2、编译aidl文件
<target name="aidl" depends="gen-R"><echo>Compiling .aidl into java files...</echo><apply executable="${aidl}" failonerror="true"><!-- 指定预处理文件 --><arg value="-p${framework-aidl}"/><!-- aidl声明的目录 --><arg value="-I${srcdir}"/><!-- 目标文件目录 --><arg value="-o${dir-gen}"/><!-- 指定哪些文件需要编译 --><fileset dir="${srcdir}"> <include name="**/*.aidl"/></fileset></apply></target>3、将工程中的java源文件编译成class文件
<target name="compile" depends="aidl"><echo>Compiling java source code...</echo><javac encoding="utf-8" target="1.6" srcdir="${project}" destdir="${dir-classes}" bootclasspath="${android-jar}"><classpath><fileset dir="${external-lib}" includes="*.jar"/></classpath></javac></target>
4、将.class文件转化成.dex文件
<target name="dex" depends="compile"><echo>Converting compiled files and external libraries into a .dex file...</echo><exec executable="${dx}" failonerror="true"><arg value="--dex" /><!-- 输出文件 --><arg value="--output=${dex-ospath}" /><!-- 要生成.dex文件的源classes和libraries --><arg value="${dir-classes-ospath}" /><arg value="${external-lib-ospath}"/></exec></target>
5、对资源文件进行输出生成_res文件
<target name="package-res-and-assets" depends="dex"><echo>Packaging resources and assets...</echo><exec executable="${aapt}" failonerror="true"><arg value="package" /><arg value="-f" /><arg value="-M" /><arg value="${manifest-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>
6、打包成未签名的apk
<target name="package" depends="dex, package-res-and-assets"><echo>Packaging unsigned apk for release...</echo><exec executable="${apkbuilder}" failonerror="true"><arg value="${out-unsigned-package-ospath}" /><arg value="-u" /><arg value="-z" /><arg value="${resources-package-ospath}" /><arg value="-f" /><arg value="${dex-ospath}" /><arg value="-rf" /><arg value="${srcdir-ospath}" /></exec><echo>It will need to be signed with jarsigner before being published.</echo></target>
对android工程进行打包,其实就是将上面生成的文件压缩到名为apk的压缩包内,并且对其配置清单文件。apk也是一个压缩文件,将apk的文件类型改成zip,用解压缩软件打开,可以看到apk压缩包目录下的所有文件,如图:
<target name="jarsigner" depends="package"><echo>Packaging signed apk for release...</echo><exec executable="${jarsigner}" failonerror="true"><arg value="-keystore" /><arg value="${keystore-file}" /><arg value="-storepass" /><arg value="123456" /><arg value="-keypass" /><arg value="123456" /><arg value="-signedjar" /><arg value="${out-signed-package-ospath}" /><arg value="${out-unsigned-package-ospath}"/><arg value="release"/></exec></target>
对apk进行签名使用的是JDK自带的签名工具,需要先生成对应的keystone,然后使用该keystone对apk进行签名。
8、发布
<target name="release" depends="jarsigner"><!-- 删除未签名的apk --><delete file="${out-unsigned-package-ospath}"/><echo>APK is released. path:${out-signed-package-ospath}</echo></target>上面的过程参考了http://blog.csdn.net/liuhe688/article/details/6679879,非常感谢博主的总结。
四、上面对apk进行打包的操作,详细展示了android工程打包为apk文件的过程,但是从SDK的r22.6.2版本,Google不再SDK当中提供apkbuilder.bat,虽然现在能够继续使用,但是不推荐这种方式进行打包,其实android的SDK默认已经为我们提供打包脚本,我们只需要执行命令就能够对指定的工程进行打包。在SDK的tools目录下我们发现一个名为android的命令,如图:
这个命令就是SDK提供给我们对android工程进行打包的命令,执行android命令,能够在指定工程生成build.xml文件,只需要执行该文件即可完成打包的过程。下面我们使用该命令对android工程进行打包。
1、执行android
<target name="build"><echo>build ant build.xml from project...</echo><exec executable="${android}" failonerror="true"><arg value="update" /><arg value="project" /><arg value="-n"/><arg value="${app-name}"/><!-- 指定生产app的名称 --><arg value="-p" /><arg value="${project-res}" /><arg value="-t" /><arg value="${android-version}" /></exec></target>其中,-n指定APP的名称,-p指定需要生成build.xml文件的android工程,-t表示使用的SDK的android的版本。
执行该命令之后,进入到工程的根目录,我们可以看到,工程当中多出如下的文件,这就是SDK替我们生成的打包文件,其中主要用到build.xml对工程进行打包。
2、向工程的根目录复制名为ant.properties的属性文件,该属性文件的内容:
key.store=keystone的路径key.alias=keystone的别名key.store.password=密钥key.alias.password=密钥生成的build.xml文件需要该属性文件对apk进行签名,打开build.xml文件我们可以看到如图:
build.xml文件当中引用到ant.properties属性文件,继续往下看,如图:
可以看到其实在这个build.xml文件当中,引用到SDK自带的build.xml,其实打包的主要过程都是在SDK自带的build.xml当中进行的。
3、指定打包操作
在工程的根目录下执行ANT命令,就可以进行打包操作,SDK默认提供两种方式的ant命令
debug模式
release模式
五、使用SDK生成的build.xml文件进行打包,不仅执行过程非常简单,而且对于依赖工程的打包也非常方便,所以更推荐使用该种方式进行打包。
- ant打包apk
- ant自动打包apk
- Ant打包APK
- ant打包apk
- Ant打包生成apk
- Ant打包APK
- eclipse ant 打包 apk
- ant打包apk
- Android apk ant打包
- 使用Ant打包Apk
- ant 打包apk
- android 用ant打包apk
- 使用ant打包APK文件
- android ant脚本打包apk
- ANT打包APK的过程
- Android ant自动打包APK
- Ant打包Apk(上)
- ant 打包生成APK与eclipse打包生成APK比较
- b2Body刚体
- 九度-1384
- 约瑟夫环
- Virtualbox命令行启动和操作虚拟机
- Debian中fcitx无法激活
- Ant打包APK
- 链接保存
- android JNI 资料大全
- Name PK
- 2014百度之星初赛(第二场)——Chess
- 赵雅智_AndroidManifest.xml配置文件详解
- 日期下拉框
- 关于丢番图方程x^2+y^2=n
- 黑马程序员_网络编程