上篇《使用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)首先在project下的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应用的流程,依据自己的须要进行定制化操作

使用Ant打包Android应用具体解释——Ant使用解析的更多相关文章

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

    计划写个完整的使用Ant打包Android应用的系列文章.三篇文章.首篇具体介绍採用Ant打包Android应用的流程.列出部分定制问题及其解决方法,第二篇介绍我理解的Ant打包的思路与主要的概念和使 ...

  2. 使用ANT打包Android应用

    大家好,今天来分享一下如何使用ANT打包Android应用. 通常我们习惯用eclipse来开发Android程序,它会自动帮我们打包当前的应用程序.如果在Navigator视图下,我们可以看到以下几 ...

  3. Ant打包Android代码生成apk文件

    可參考下面,实现一套代码不同渠道的打包 http://blog.csdn.net/liuhe688/article/details/6679879 http://cnn237111.blog.51ct ...

  4. 【Android开发经验】使用Ant批量打包Android应用全然指南

    本文章由Socks完毕.博客地址:http://blog.csdn.net/zhaokaiqiang1992 转载请说明. 折腾了一下午.百度了一下午,最终实现了使用Ant对Android应用的批量打 ...

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

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

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

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

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

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

  8. Android Ant打包笔记

    本文文档的下载地址(Word版):http://download.csdn.net/detail/yangwei19680827/7250711 Android Ant 打包 网上找了ant打包的资料 ...

  9. 【转】Android项目使用Ant打包,生成build.xml

    记不住,于是原帖转过来,请看原帖:http://blog.csdn.net/ms03001620/article/details/8490238 一.生成build.xml Eclipse中使用Ant ...

随机推荐

  1. MySql系列之单表查询

    单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 关键字的执行 ...

  2. 洛谷 P1096 Hanoi双塔问题

    P1096 Hanoi双塔问题 题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情 ...

  3. Android项目执行时报错NoclassDefFoundError

    导Android项目时碰到个头疼的NoclassDefFoundError. 项目导入之后是没有报错的.可是执行就报这个错误 java.lang.NoClassDefFoundError: andro ...

  4. VGA接口时序约束

    SF-VGA模块板载VGA显示器DA转换驱动芯片AVD7123,FPGA通过OUPLLN连接器驱动ADV7123芯片产生供给VGA显示器的色彩以及同步信号.SF-CY3核心模块与SF-VGA子模块连接 ...

  5. dotnet 命令的使用

    dotnet --info PS E:\GitHub\KerryJiang\SuperSocket> dotnet --info.NET Command Line Tools (2.1.4) P ...

  6. powerpoint(ppt) 的制作

    1. 幻灯片母版 所谓母版,是共享的部分,也即想在全部幻灯片重复出现的元素. 首先,幻灯片母版在菜单栏的[视图]选择[幻灯片母版]显示和查看. 通过幻灯片母版的编辑和设计,可进一步: 在幻灯片的相关位 ...

  7. RandomStringUtils生成随机数

    org.apache.commons.lang.RandomStringUtils;                                        //产生5位长度的随机字符串,中文环 ...

  8. MySQL Server 5.5.44免安装版配置详解

    转载地址:http://wenku.baidu.com/view/2a8bfe6a25c52cc58bd6beff.html### 一 下载MySQL http://dev.mysql.com/dow ...

  9. C# 之 继承

    继承     继承是OOP最重要的特性之中的一个.不论什么类都能够从还有一个类中继承,这就是说,这个类拥有它继承的类的全部成员. 在OOP中,被继承的类称为父类. 在C#中的对象仅能直接派生于一个基类 ...

  10. 解决WIN7远程登录提示无法保存凭据的问题

    事由:今天到公司,想起手上还有点小东西没有改动完,就打算连上server进行小改动.结果发现昨天还能好好的远程连接server的WIN7,今天突然间不能远程登录了~ 无奈~悲催~ 我仅仅能猜是不是有什 ...