源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/antdemo.zip

Android打包APK的流程如下:

 下面我们开始尝试使用ant进行apk的打包

准备工作

1.因为apkbuilder.bat在新版本的Android sdk中已经被移除,所以我们需要手动创建apkbuilder.bat文件,然后将此文件放在sdk tools目录下,apkbuilder.bat文件内容如下:

@echo off
rem Copyright (C) 2007 The Android Open Source Project
rem
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License. rem don't modify the caller's environment
setlocal rem Set up prog to be the path of this script, including following symlinks,
rem and set up progdir to be the fully-qualified pathname of its directory.
set prog=%~f0 rem Change current directory and drive to where the script is, to avoid
rem issues with directories containing whitespaces.
cd /d %~dp0 rem Check we have a valid Java.exe in the path.
set java_exe=
call lib\find_java.bat
if not defined java_exe goto :EOF set jarfile=sdklib.jar
set frameworkdir= if exist %frameworkdir%%jarfile% goto JarFileOk
set frameworkdir=lib\ if exist %frameworkdir%%jarfile% goto JarFileOk
set frameworkdir=..\framework\ :JarFileOk set jarpath=%frameworkdir%%jarfile% call "%java_exe%" -classpath %jarpath% com.android.sdklib.build.ApkBuilderMain %*

2.创建一个签名文件如jack.keystore,然后创建ant.properties文件,将签名信息写到ant.properties文件中

#签名文件的路径
keystore=jack.keystore
#存储库口令
storepass=123456
#密匙库口令
keypass=123456
#别名
alias=jack

3.下载ant压缩包  http://ant.apache.org,下载之后将其解压到某个目录(本人解压到C:\apache-ant-1.9.5) ,然后配置环境变量(新建ANT_HOME环境变量,值为ant所在的目录,然后将ANT_HOME\bin添加到path环境变量中),如图:    


APK打包

1.创建一个Android项目,名称为hello

2.执行命令android update project --name hello --path .,生成local.properties和build.xml文件,在执行此命令时,请确保Android SDK目录下的tools路径已经添加到Path环境变量中

aaarticlea/png;base64,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" alt="" />

3.修改build.xml文件,将 </condition>之后的语句全部删除,同时添加default="zipalign" basedir="."信息,修改后的build.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project name="hello" default="zipalign" basedir="."> <!-- The local.properties file is created and updated by the 'android' tool.
It contains the path to the SDK. It should *NOT* be checked into
Version Control Systems. -->
<property file="local.properties" /> <!-- The ant.properties file can be created by you. It is only edited by the
'android' tool to add properties to it.
This is the place to change some Ant specific build properties.
Here are some properties you may want to change/update: source.dir
The name of the source directory. Default is 'src'.
out.dir
The name of the output directory. Default is 'bin'. For other overridable properties, look at the beginning of the rules
files in the SDK, at tools/ant/build.xml Properties related to the SDK location or the project target should
be updated using the 'android' tool with the 'update' action. This file is an integral part of the build system for your
application and should be checked into Version Control Sytems. -->
<property file="ant.properties" /> <!-- if sdk.dir was not set from one of the property file, then
get it from the ANDROID_HOME env var.
This must be done before we load project.properties since
the proguard config can use sdk.dir -->
<property environment="env" />
<condition property="sdk.dir" value="${env.ANDROID_HOME}">
<isset property="env.ANDROID_HOME" />
</condition> </project>

4.在build.xml文件中添加一些变量信息,此处我使用的Android sdk build tools版本为23.0.2

    <tstamp>
<format property="now" pattern="yyyyMMdd_HHmmss" locale="en"/>
</tstamp> <property name="sdk-tools" value="${sdk.dir}/tools" />
<property name="sdk-build-tools" value="${sdk.dir}/build-tools/23.0.2" />
<property name="sdk-platforms" value="${sdk.dir}/platforms/android-23" />
<property name="android-jar" value="${sdk-platforms}/android.jar" />
<property name="framework-aidl" value="${sdk-platforms}/framework.aidl" /> <!--编译工具-->
<property name="aapt" value="${sdk-build-tools}/aapt.exe" />
<property name="aidl" value="${sdk-build-tools}/aidl.exe" />
<property name="dx" value="${sdk-build-tools}/dx.bat" />
<property name="apkbuilder" value="${sdk-tools}/apkbuilder.bat" />
<property name="jarsigner" value="${env.JAVA_HOME}/bin/jarsigner.exe" />
<property name="zipalign" value="${sdk-build-tools}/zipalign.exe" /> <!--输入目录-->
<property name="assets-dir" value="${basedir}/assets" />
<property name="res-dir" value="${basedir}/res" />
<property name="src-dir" value="${basedir}/src" />
<property name="libs-dir" value="${basedir}/libs" /> <!--输出目录-->
<property name="outdir-bin" value="${basedir}/bin" />
<property name="outdir-gen" value="${basedir}/gen" />
<property name="outdir-classes" value="${outdir-bin}" />
<property name="dex-file" value="classes.dex" />
<property name="dex-path" value="${outdir-bin}/${dex-file}" />
<property name="resources-package" value="${outdir-bin}/resources.ap_" />
<property name="out-unsigned-package" value="${outdir-bin}/${ant.project.name}-unsigned.apk" />
<property name="out-signed-package" value="${outdir-bin}/${ant.project.name}-singed.apk" />
<property name="out-zipalign-package" value="${outdir-bin}/${ant.project.name}-zipalign_${now}.apk" />

5.初始化输出目录,在build.xml中添加以下信息:

     <!-- 初始化 -->
<target name="init">
<echo>init all output directories...</echo>
<delete dir="${outdir-bin}" />
<delete dir="${outdir-gen}" />
<mkdir dir="${outdir-bin}" />
<mkdir dir="${outdir-gen}" />
</target>

此时执行ant init命令,就会在程序根目录下生成bin和gen文件夹

aaarticlea/png;base64,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" alt="" />

6.生成R.java类文件

在build.xml中添加以下信息:

    <!--生成R.java类文件-->
<target name="gen-R" depends="init">
<echo>Generating R.java from the resources...</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-m" />
<arg value="-J" />
<arg value="${outdir-gen}" />
<arg value="-M" />
<arg value="AndroidManifest.xml" />
<arg value="-S" />
<arg value="${res-dir}" />
<arg value="-A" />
<arg value="${assets-dir}" />
<arg value="-I" />
<arg value="${android-jar}" />
</exec>
</target>

执行命令ant gen-R命令,就会生成R.java文件

7.编译aidl文件

在build.xml文件中添加如下信息:

    <!-- 编译aidl文件 -->
<target name="aidl" depends="gen-R">
<echo>Compiling .aidl into java files...</echo>
<apply executable="${aidl}" failonerror="true">
<arg value="-p${framework-aidl}" />
<arg value="-I${src-dir}" />
<arg value="-o${outdir-gen}" />
<fileset dir="${src-dir}">
<include name="**/*.aidl" />
</fileset>
</apply>
</target>

执行命令ant aidl命令,就会编译相关的aidl文件

8.编译源文件生成对应的class文件

在build.xml文件中添加如下信息:

     <!--编译源文件生成对应的class文件 -->
<target name="compile" depends="aidl">
<echo>Compiling java source code...</echo>
<javac encoding="utf-8" target="1.6" source="1.6" destdir="${outdir-classes}" bootclasspath="${android-jar}" includeantruntime="false" >
<compilerarg value="-nowarn"/>
<src path="${src-dir}" />
<src path="${outdir-gen}" />
<classpath>
<fileset dir="${libs-dir}" includes="*.jar" />
</classpath>
</javac>
</target>

执行命令ant compile命令,就会编译生成.class文件

9.将.class文件转化成.dex文件

在build.xml文件中添加如下信息:

    <!--将.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-path}" />
<arg value="${outdir-classes}" />
<arg value="${libs-dir}" />
</exec>
</target>

执行命令ant dex命令,就会编译生成classes.dex文件

10.打包资源文件,生成resources.ap_

在build.xml文件中添加如下信息:

   <!--打包资源文件(包括res、assets、AndroidManifest.xml)-->
<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="AndroidManifest.xml" /> <arg value="-S" />
<arg value="${res-dir}" /> <arg value="-A" />
<arg value="${assets-dir}" /> <arg value="-I" />
<arg value="${android-jar}" /> <arg value="-F" />
<arg value="${resources-package}" />
</exec> </target>

执行命令ant package-res-and-assets命令,就会生成resources.ap_文件

11.生成未签名的apk包

在build.xml文件中添加如下信息:

 <!--根据classes.dex文件和resources.ap_生成未签名的apk包 -->
<target name="package" depends="package-res-and-assets" >
<echo>Packaging ${out-unsigned-package} for release...</echo>
<exec executable="${apkbuilder}" failonerror="true"> <arg value="${out-unsigned-package}" />
<arg value="-u" /> <arg value="-z" />
<arg value="${resources-package}" /> <arg value="-f" />
<arg value="${dex-path}" /> <arg value="-rf" />
<arg value="${src-dir}" /> <arg value="-rj"/>
<arg value="${libs-dir}" /> <arg value="-nf"/>
<arg value="${libs-dir}" />
</exec>
</target>

执行命令ant package命令,就会生成未签名的apk包hello-unsigned.apk

12.对apk包进行签名

在build.xml文件中添加如下信息:

<!--对上面生成的apk包进行签名-->
<target name="jarsigner" depends="package">
<echo>sign for apk...</echo>
<exec executable="${jarsigner}" failonerror="true"> <arg value="-verbose" /> <arg value="-digestalg"/>
<arg value="SHA1"/> <arg value="-sigalg"/>
<arg value="SHA1withRSA"/> <arg value="-keystore" />
<arg value="${keystore}" /> <arg value="-storepass" />
<arg value="${storepass}" /> <arg value="-keypass" />
<arg value="${keypass}" /> <arg value="-signedjar" />
<arg value="${out-signed-package}" /> <arg value="${out-unsigned-package}" />
<arg value="${alias}" /> </exec> </target>

执行命令ant jarsigner命令,就会生成签名的apk包hello-signed.apk

13.对签名的apk包进行字节对齐

在build.xml文件中添加如下信息:

 <!--对签名的apk包进行字节对齐-->
<target name="zipalign" depends="jarsigner">
<echo>zipalign for signed apk:${out-signed-package}</echo>
<exec executable="${zipalign}" failonerror="true">
<arg value="-f" />
<arg value="-v" />
<arg value="4" />
<arg value="${out-signed-package}" />
<arg value="${out-zipalign-package}" />
</exec>
<echo>++++++++++++++++finished,the last output file is:${out-zipalign-package}+++++++++++++</echo>
</target>

执行命令ant zipalign命令,就会生成签名并且字节对齐的apk包

最终的build.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project name="hello" default="zipalign" basedir="."> <!-- The local.properties file is created and updated by the 'android' tool.
It contains the path to the SDK. It should *NOT* be checked into
Version Control Systems. -->
<property file="local.properties" /> <!-- The ant.properties file can be created by you. It is only edited by the
'android' tool to add properties to it.
This is the place to change some Ant specific build properties.
Here are some properties you may want to change/update: source.dir
The name of the source directory. Default is 'src'.
out.dir
The name of the output directory. Default is 'bin'. For other overridable properties, look at the beginning of the rules
files in the SDK, at tools/ant/build.xml Properties related to the SDK location or the project target should
be updated using the 'android' tool with the 'update' action. This file is an integral part of the build system for your
application and should be checked into Version Control Systems. -->
<property file="ant.properties" /> <!-- if sdk.dir was not set from one of the property file, then
get it from the ANDROID_HOME env var.
This must be done before we load project.properties since
the proguard config can use sdk.dir -->
<property environment="env" />
<condition property="sdk.dir" value="${env.ANDROID_HOME}">
<isset property="env.ANDROID_HOME" />
</condition> <tstamp>
<format property="now" pattern="yyyyMMdd_HHmmss" locale="en"/>
</tstamp> <property name="sdk-tools" value="${sdk.dir}/tools" />
<property name="sdk-build-tools" value="${sdk.dir}/build-tools/23.0.2" />
<property name="sdk-platforms" value="${sdk.dir}/platforms/android-23" />
<property name="android-jar" value="${sdk-platforms}/android.jar" />
<property name="framework-aidl" value="${sdk-platforms}/framework.aidl" /> <!--编译工具-->
<property name="aapt" value="${sdk-build-tools}/aapt.exe" />
<property name="aidl" value="${sdk-build-tools}/aidl.exe" />
<property name="dx" value="${sdk-build-tools}/dx.bat" />
<property name="apkbuilder" value="${sdk-tools}/apkbuilder.bat" />
<property name="jarsigner" value="${env.JAVA_HOME}/bin/jarsigner.exe" />
<property name="zipalign" value="${sdk-build-tools}/zipalign.exe" /> <!--输入目录-->
<property name="assets-dir" value="${basedir}/assets" />
<property name="res-dir" value="${basedir}/res" />
<property name="src-dir" value="${basedir}/src" />
<property name="libs-dir" value="${basedir}/libs" /> <!--输出目录-->
<property name="outdir-bin" value="${basedir}/bin" />
<property name="outdir-gen" value="${basedir}/gen" />
<property name="outdir-classes" value="${outdir-bin}" />
<property name="dex-file" value="classes.dex" />
<property name="dex-path" value="${outdir-bin}/${dex-file}" />
<property name="resources-package" value="${outdir-bin}/resources.ap_" />
<property name="out-unsigned-package" value="${outdir-bin}/${ant.project.name}-unsigned.apk" />
<property name="out-signed-package" value="${outdir-bin}/${ant.project.name}-singed.apk" />
<property name="out-zipalign-package" value="${outdir-bin}/${ant.project.name}-zipalign_${now}.apk" /> <!-- 初始化 -->
<target name="init">
<echo>init all output directories...</echo>
<delete dir="${outdir-bin}" />
<delete dir="${outdir-gen}" />
<mkdir dir="${outdir-bin}" />
<mkdir dir="${outdir-gen}" />
</target> <!--生成R.java类文件-->
<target name="gen-R" depends="init">
<echo>Generating R.java from the resources...</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-m" />
<arg value="-J" />
<arg value="${outdir-gen}" />
<arg value="-M" />
<arg value="AndroidManifest.xml" />
<arg value="-S" />
<arg value="${res-dir}" />
<arg value="-A" />
<arg value="${assets-dir}" />
<arg value="-I" />
<arg value="${android-jar}" />
</exec>
</target> <!-- 编译aidl文件 -->
<target name="aidl" depends="gen-R">
<echo>Compiling .aidl into java files...</echo>
<apply executable="${aidl}" failonerror="true">
<arg value="-p${framework-aidl}" />
<arg value="-I${src-dir}" />
<arg value="-o${outdir-gen}" />
<fileset dir="${src-dir}">
<include name="**/*.aidl" />
</fileset>
</apply>
</target> <!--编译源文件生成对应的class文件 -->
<target name="compile" depends="aidl">
<echo>Compiling java source code...</echo>
<javac encoding="utf-8" target="1.6" source="1.6" destdir="${outdir-classes}" bootclasspath="${android-jar}" includeantruntime="false" >
<compilerarg value="-nowarn"/>
<src path="${src-dir}" />
<src path="${outdir-gen}" />
<classpath>
<fileset dir="${libs-dir}" includes="*.jar" />
</classpath>
</javac>
</target> <!--将.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-path}" />
<arg value="${outdir-classes}" />
<arg value="${libs-dir}" />
</exec>
</target> <!--打包资源文件(包括res、assets、AndroidManifest.xml)-->
<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="AndroidManifest.xml" /> <arg value="-S" />
<arg value="${res-dir}" /> <arg value="-A" />
<arg value="${assets-dir}" /> <arg value="-I" />
<arg value="${android-jar}" /> <arg value="-F" />
<arg value="${resources-package}" />
</exec> </target> <!--根据classes.dex文件和resources.ap_生成未签名的apk包 -->
<target name="package" depends="package-res-and-assets" >
<echo>Packaging ${out-unsigned-package} for release...</echo>
<exec executable="${apkbuilder}" failonerror="true"> <arg value="${out-unsigned-package}" />
<arg value="-u" /> <arg value="-z" />
<arg value="${resources-package}" /> <arg value="-f" />
<arg value="${dex-path}" /> <arg value="-rf" />
<arg value="${src-dir}" /> <arg value="-rj"/>
<arg value="${libs-dir}" /> <arg value="-nf"/>
<arg value="${libs-dir}" />
</exec>
</target> <!--对上面生成的apk包进行签名-->
<target name="jarsigner" depends="package">
<echo>sign for apk...</echo>
<exec executable="${jarsigner}" failonerror="true"> <arg value="-verbose" /> <arg value="-digestalg"/>
<arg value="SHA1"/> <arg value="-sigalg"/>
<arg value="SHA1withRSA"/> <arg value="-keystore" />
<arg value="${keystore}" /> <arg value="-storepass" />
<arg value="${storepass}" /> <arg value="-keypass" />
<arg value="${keypass}" /> <arg value="-signedjar" />
<arg value="${out-signed-package}" /> <arg value="${out-unsigned-package}" />
<arg value="${alias}" /> </exec> </target> <!--对签名的apk包进行字节对齐-->
<target name="zipalign" depends="jarsigner">
<echo>zipalign for signed apk:${out-signed-package}</echo>
<exec executable="${zipalign}" failonerror="true">
<arg value="-f" />
<arg value="-v" />
<arg value="4" />
<arg value="${out-signed-package}" />
<arg value="${out-zipalign-package}" />
</exec>
<echo>++++++++++++++++finished,the last output file is:${out-zipalign-package}+++++++++++++</echo>
</target> </project>

ant自动编译打包android项目的更多相关文章

  1. (转载)Ant自动编译打包android项目

    1  Ant自动编译打包android项目 1.1   Ant安装 ant的安装比较简单,下载ant压缩包  http://ant.apache.org  (最新的为1.9.3版本),下载之后将其解压 ...

  2. Android - Ant自动编译打包android项目 -- 1(转)

    1.  背景: Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其当要将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我 ...

  3. Ant自动编译打包android项目(转载)

      1.1   Ant安装 ant的安装比较简单,下载ant压缩包  http://ant.apache.org  (最新的为1.9.3版本),下载之后将其解压到某个目录(本人解压到E:\Progra ...

  4. Android-Ant自动编译打包android项目 -- 2 ----签名与渠道包

    上篇介绍了怎么使用ant自动编译打包现有的android项目,这篇将继续介绍如果如何在ant打包应用的时候加入签名信息以及自动打包渠道包. 1. 加入签名信息: 在项目的根目录下建一个ant.prop ...

  5. Ant自动编译打包&发布 android项目

    Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...

  6. Andorid进阶7—— Ant自动编译打包&发布 android项目

    http://www.cnblogs.com/tt_mc/p/3891546.html Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Ecl ...

  7. 通过ant脚本编译打包android工程

    通过ant脚本,编译打包android工程 1.Android程序编译.打包.签名.发布的三种方式:  方式一:命令行手动编译打包  方式二:使用ant自动编译打包  方式三:使用eclipse+AD ...

  8. 项目androidAnt编译打包Android项目

    时间紧张,先记一笔,后续优化与完善. Ant编译打包Android项目 在Eclipse中对Android项目停止编译和打包如果项目比较大的话会比较慢,所以改为Ant工具来停止编译和打包 Ant环境配 ...

  9. [转]Windows中使用命令行方式编译打包Android项目

    http://my.oschina.net/liux/blog/37875 网上很多用Ant来编译打包Android应用的文章,毕竟Ant是纯Java语言编写的,具有很好的跨平台性.今天想写个纯win ...

随机推荐

  1. 【十四】jvm 性能调优实例

    实例1: POI Excel 导出 Excel对象很大,多人同时登录系统导出Excel的话,就会有多个大Excel对象到老年代,这是老年代需要回收,系统可能会卡顿. jvm堆内存设置的越大,Full ...

  2. github上face_recognition工程项目实践

    一.安装开发环境 1.安装dlib和相关Python依赖 先下载dlib源码: git clone https://github.com/davisking/dlib.git 编译dlib源码:(可以 ...

  3. 🍓 redux示例 🍓

  4. Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;

    运行tomat  报错: Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Lj ...

  5. 2017 ACM/ICPC(北京)总结

    这个季节的,北京真的很冷. 下午的热身赛,我依然先去敲一道搜索题,但是很不幸这道搜索题坑点还是蛮多的,浪费了好长时间后依然没能A掉,期间Codeblocks崩溃一次使得代码完全丢失,在队友的建议下便暂 ...

  6. 20165234 《Java程序设计》第四周学习总结

    第四周学习总结 教材学习内容总结 第5章 子类与继承 子类的继承性 子类和父类在同一包中的继承性:子类继承父类中不是 private 的成员变量和方法作为自己的成员变量和方法 子类和父类不在同一包中的 ...

  7. C中的malloc/free与C++中的new/delete的用法与区别

    1.先介绍malloc/free的用法: 原型函数: void *malloc(long NumBytes); 该函数分配了NumBytes个字节的内容,分配的空间是堆空间 malloc()根据用户所 ...

  8. oracle dblink的创建与使用

    一.什么是DBLINK dblink,顾名思义就是数据库的链接. 当我们要跨本地数据库访问另一个数据库中的表的数据时,在本地数据库中就必须要创建远程数据库的dblink,通过该dblink就可以达到访 ...

  9. RabbitMQ简单应用の公平分发(fair dipatch)

    公平分发(fair dipatch)和轮询分发其实基本一致,只是每次分发的机制变了,由原来的平均分配到现在每次只处理一条消息 1.MQ连接工厂类Connection package com.mmr.r ...

  10. git 上传代码

    1.注册GitHub账号 2.在GitHub上建立github仓库 3.下载git 4.配置git 5.生成SSH密钥,并把密钥添加SSH密钥到GitHub上 6.创建本地仓库并上传代码到github ...