使用Ant打包Android应用详解——Ant使用解析

上篇《使用Ant打包Android应用详解》描述了使用Ant打包的流程,但很多步骤并没有说明如此做的原因,本篇将从Ant方面来理解,下一篇从APK生成的流程来说明。

APK包的生成是一系列操作的结果,而Ant则是将这一系列操作流程化,提供出定制化的接口,以及可配置的参数供修改,而这些都是通过指定的构建文件来实现。我们就从Ant的打包流程来理解Ant的一些基本用法。当在命令行中执行ant,默认会去解析当前目录的build.xml作为构建文件。下面是个删除部分注视的版本:

<project name="工程名" default="help">

 <!-- 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" />

 <property file="ant.properties" />

 <!--
 Import per project custom build rules if present at the root of the project.
 This is the place to put custom intermediary targets such as:
 -pre-build
 -pre-compile
 -post-compile (This is typically used for code obfuscation.
 Compiled code location: ${out.classes.absolute.dir}
 If this is not done in place, override ${out.dex.input.absolute.dir})
 -post-package
 -post-build
 -pre-clean
 -->
 <import file="custom_rules.xml" optional="true" />

 <!-- Import the actual build file.
 <import file="${sdk.dir}/tools/ant/build.xml" />

再跟进到你的SDK目录的tools/ant/build.xml,查看Ant打包的完整过程。

1.首先理解几个概念,project、target、task。简单来说,你的一个构建工程(project),划分了很多阶段或者子目标(target),而每个阶段目标的实现,你要提供具体的操作,比如文件复制,源码编译,这些封装好的操作就是task(可以理解为为你提供的库函数)。具体看,每个构建文件都有顶层为project的标签,作为标识,而target就是你所要执行的操作序列,target里面可以有很多的task。那么怎么确定操作序列执行的顺序呢?其中project的default指的是默认执行的target,也就是当你在命令行只输入ant不带任何参数时,执行的target。而当你指定了target后,如在命令行中输入ant
help,会从你的构建文件中找到target help执行。当我们输入ant release时,对应的target如下:

<target name="release" depends="-set-release-mode, -release-obfuscation-check, -package, -post-package, -release-prompt-for-password, -release-nosign, -release-sign, -post-build" description="Builds the application in release mode.">
 </target>

target的name和description顾名思义,而depends则是该target执行前,需要执行或者说依赖的target,而且是依据从左到右的顺序依次执行。继续跟进-package它的定义:<target name="-package" depends="-dex, -package-resources">,分别是dex文件的生成和资源打包,里面又定义了很多具体的target。整个过程中就有或者说预留了一些空的target,比如-pre-build -pre-compile
-post-package -post-build,是每个打包编译步骤之前后结束,通过在custom_rules.xml中重写这些target,达到定制化的要求

  2.解决了执行序列的问题,那么如何进行参数配置呢?

(1)首先在工程下的build.xml中property,可以理解为定义了部分变量或者引入了property 文件,看其部分属性:

name:property的名称,在target或者其它地方可以通过${name}的形式引用

value:具体的值或路径

file:需要加载的property文件,文件中的内容以key=value中出现,如local.properties中定义的sdk.dir=android的sdk路径

refid:引用已经定义的path信息

自己工程的build.xml中property定义的local.properties引入了android sdk/ndk,ant.properties引入了签名时需要的信息;这里有个关键的特性是,一旦定义了property,其值是不能改变的,而且会保留最先定义的值;也就是这个特性,方便了在编译过程中的一些定制化操作。如上篇中调用隐藏api,将自己的framework.jar加入到project.target.class.path中

(2)import标签,属性file:要引入的构建文件,optional:值为true时,即使import的文件不存在,也不停止编译。那么custom_rules.xml是可有可无,而${sdk.dir}/tools/ant/build.xml是定义了真正的编译步骤的文件必须存在

3.一些用到的其它标签

(1)定义文件目录path,从ant手册中的例子看:

<path id="base.path">
      <pathelement path="${classpath}"/>
      <fileset dir="lib">
        <include name="**/*.jar"/>
      </fileset>
      <pathelement location="classes"/>
 </path>

一个可以在其它地方通过refid引用的path,里面包括了具体path路径pathelement和通过include或exclude来筛选文件的fileset

(2)copy task

<copy todir="${source.absolute.dir}">

     <fileset dir="其它源码目录">
        <include name="**/*.java" />
        <include name="**/*.aidl" />
    </fileset>
 </copy>

odir:目标目录,源目录在fileset上定义,规则是包括所有.java文件和所有aidl文件;简单的如拷贝单个文件

<copy file="myfile.txt" tofile="mycopy.txt"/>

拷贝一个文件到某个目录

<copy file="myfile.txt" todir="../some/other/dir"/>

这些信息都可以通过查询ant参考手册https://ant.apache.org/manual/来了解,不一一叙述

通过上述描述应该可以理解并跟进整个ant打包android应用的流程,根据自己的需要进行定制化操作

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-27 01:06:23

使用Ant打包Android应用详解——Ant使用解析的相关文章

使用Ant打包Android应用详解

计划写个完整的使用Ant打包Android应用的系列文章,三篇文章.首篇详细介绍采用Ant打包Android应用的流程,列出部分定制问题及其解决方法,第二篇介绍我理解的Ant打包的思路与基本的概念和使用,最后一篇描述apk包的生成过程. 实现的环境: 操作系统:ubuntu 64bit 14.04 Android SDK Build Tools:22.0.1 Android SDK Tools:24.3.3 Ant:1.9.4 ProGuard:5.2.1 JDK:1.7 一.简单应用出包流程

使用Ant打包Android应用具体解释——Ant使用解析

上篇<使用Ant打包Android应用具体解释>描写叙述了使用Ant打包的流程,但非常多步骤并没有说明如此做的原因,本篇将从Ant方面来理解,下一篇从APK生成的流程来说明. APK包的生成是一系列操作的结果,而Ant则是将这一系列操作流程化.提供出定制化的接口,以及可配置的參数供改动,而这些都是通过指定的构建文件来实现. 我们就从Ant的打包流程来理解Ant的一些基本使用方法. 当在命令行中运行ant.默认会去解析当前文件夹的build.xml作为构建文件.以下是个删除部分注视的版本号: &

ant的高级使用,ant命令详解,ant打包,ant编译后打包去掉jar文件

在日常的项目开发中,我们可以经常性的需要打包测试,尤其是开发环境是windows,而实际环境则是linux. 这样的话,很多程序员要一会打一个包,一会打一个包,这些包可能会很大,实际上只有代码部分会变动,而jar包基本则不动. 当然很多人可能会说,自动化测试.很好的,我们今天要做的就是自动化测试的第一步. 这个时候我是可以使用ant来打包,去掉项目中的所有的jar文件.然后在项目的tomcat启动时到特定的地点去加载jar文件. 这样做,war包可能会只有几M,什么更小.具体如何动态的加载jar

Ant之build.xml详解

Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令.当编译Linux内核及一些软件的源程序时,经常要用这个命令.Make命令其实就是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这些工具的缺陷.最初Ant开发者在开发跨平台的应用时,用样也是基于这些缺陷对Ant做了更好的设计. Ant 与 makefile Makefile有一些不足之处,比如

使用Ant打包Android应用具体解释

计划写个完整的使用Ant打包Android应用的系列文章.三篇文章.首篇具体介绍採用Ant打包Android应用的流程.列出部分定制问题及其解决方法,第二篇介绍我理解的Ant打包的思路与主要的概念和使用,最后一篇描写叙述apk包的生成过程. 实现的环境: 操作系统:ubuntu 64bit 14.04 Android SDK Build Tools:22.0.1 Android SDK Tools:24.3.3 Ant:1.9.4 ProGuard:5.2.1 JDK:1.7 一.简单应用出包流

使用ANT打包Android应用

大家好,今天来分享一下如何使用ANT打包Android应用. 通常我们习惯用eclipse来开发Android程序,它会自动帮我们打包当前的应用程序.如果在Navigator视图下,我们可以看到以下几个文件: 在上图中,com包放置的是我们的class文件,classes.dex是class文件经过转换后的可以在dalvik上跑的精简类文件,resources.ap_是经过打包的资源文件,ant.apk就是最终的打包文件. 使用ANT来对应用打包,一般会经过以下几个步骤: 1.用aapt命令生成

Android 签名详解

在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个 permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应 用程序才能取得该权限.Android使用Java的数字证书相关的机制来 给apk加盖数字证书,要理解android的数字证书,需要先了解以下数字证书的概念和java的数字证书机制.Android系统要求每一个

[gitbook] Android框架分析系列之Android Binder详解

请支持作者原创: https://mr-cao.gitbooks.io/android/content/android-binder.html Android Binder详解 Table of Contents 1. binder简介 2. binder的实现 2.1. IBinder类简介 2.2. IInterface类简介 2.3. BpBinder和BBinder简介 2.4. ProcessState和IPCThreadState简介 2.5. ServiceManager简介 2.

android WebView详解,常见漏洞详解和安全源码

这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 由于博客内容长度,这次将分为上下两篇,上篇详解 WebView 的使用,下篇讲述 WebView 的漏洞和坑,以及修复源码的解析. 下篇:android WebView详解,常见漏洞详解和安全源码(下) 转载请注明出处:http://blog.csdn.net/self_study/article/details/54928371. 对技术感兴趣的同鞋加群 54