使用ant自动构建apk
最近因渠道过多,需要单独接入渠道支付sdk的渠道也很多,而首发在即、人手不足,所以着手了部分相关的工作,看了下目前的操作流程。。无奈人比较懒,所以决定进行一波简化,先考虑了两种方案:
1)脚本批处理
2)ant自动构建(eclipse的打包方式)
归根到底,ant的build.xml自动化方式也属于脚本处理的一种,还能省去不少设计工作,因此决定使用ant的方式(官网:http://ant.apache.org/manual/)。
Tip:使用ant的构建方式,对环境变量有比较严格的要求(SDK/JDK等)!
首先,了解下ant的build.xml的使用:最简单的方式,先对已有项目自动化生成build.xml等文件,使用Android SDK自带的工具:android.bat(目录<SDKPath>/tools/android.bat,一般会放到环境变量中),命令行调用方式如下:(<SDKPath>/tools/)android update project --path ProjectPath,调用结束即会在项目路径下生成build.xml等文件,接下来我们下来分析下自动生成的几个文件:
1)build.xml(这里,我省略了自动生成时的注释内容,大家可以自行阅读)
<?xml version="1.0" encoding="UTF-8"?>
<project name="ProjectName" default="help"> <!-- 这里的ProjectName即为最终生成时的apk名,help为默认要执行的方法-->
<property file="local.properties" /> <!-- 引用的外部定义文件,方便定制 -->
<property file="ant.properties" /> <!-- ant.properties文件并非自动生成,因此后续的定制信息,我们可以直接在这个文件中定义 -->
<property environment="env" /> <!-- 系统的环境变量信息 --> <condition property="sdk.dir" value="${env.ANDROID_HOME}"> <!-- 条件判断,如果环境变量中设置了ANDROID_HOME,则定义sdk.dir属性 -->
<isset property="env.ANDROID_HOME" />
</condition>
<loadproperties srcFile="project.properties" /> <!-- 在细分功能时,属性会分散到多个properties文件中进行定义,此处是导入需要的文件中定义的property元素 --> <fail
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
unless="sdk.dir"
/> <!-- 校验,没有定义sdk.dir则失败 http://ant.apache.org/manual/Tasks/fail.html --> <import file="custom_rules.xml" optional="true" /> <!-- 导入同目录下的custom_rules.xml文件(非强制,文件允许不存在) -->
<import file="${sdk.dir}/tools/ant/build.xml" /> <!-- 默认optional为false,强制导入 -->
</project>
Tip:ant的设计中,当有引用、依赖文件存在时,如有重复项/冲突项,以先加载的内容为主
2)local.properities及project.properties
伴随build.xml自动生成的另外两个文件,local.properities文件定义了sdk的路径信息,project.properties文件则定义了当前工程的相关设置信息
分析完自动生成的文件,我们来继续刚才分析build.xml的思路深入分析一下,在改文件的最后,导入了sdk提供的内置的build.xml文件(为区分期间,前者称为auto_build.xml,后者为sys_build.xml),我们继续分析下sys_build.xml文件,鉴于文件比较大,这里只针对几个在处理自动化构建中需要关注的点进行说明:

在构建release版本时,需要用到keystore文件,因此我们后面我们需要对相关属性进行配置。

这里会牵扯到我们环境变量设置中的JAVA_HOME的设置,也是经常出现错误的地方,常见的错误信息为JAVA_HOME指向出错,可能的原因有:
1)没有在环境变量中定义JAVA_HOME
2)部分设置不正确(网上给出的解决方案多为复制jdk中的文件到jre),这里推荐ant编译时环境变量及错误提示问题中提到的方案(这里未做尝试)
到这里,我们所需要做工作就明确了:定义keystore的相关属性设置,为最简化工作内容,可以直接在项目路径下创建上文提到的ant.propertities文件,使用该文件配置所需属性:
key.store=KeyStorePath\\name.keystore #注意转义,属性名称不能修改(要与sys_build。xml中的引用一致)
key.alias=alias.keystore
key.store.password=123456
key.alias.password=123456
这样环境配置等相关内容就搞定了。
Tip:同样的道理,custom_rules.xml文件给用户提供了编译打包前的用户自定义行为接口:如果需要在打包前做些额外操作,比如修改AndroidManifest.xml中的设置等,即可在同目录手动创建一个custom_rules.xml文件,并在其中定义用户行为即可,当执行auto_build.xml的时候(sys_build.xml之前)即会执行自定义行为。
接下来就是具体的构建过程:
eclipse中右键点击的auto_build.xml——>run as...

可以以GUI的形式看到引用的sys_build.xml中的任务列表

这里default即为最开始定义的默认函数help(具体内容为Ant的用法说明),最后点击build成功之后,即会在项目的bin目录下生成配置的ProjectName.apk文件。
写在最后:Ant类似Make,不过易用很多。
使用ant自动构建apk的更多相关文章
- ant 自动构建血泪史
1. android.bat update project -p . -t xxx 其中: xxx 为 targetid 特别注意的是: targetid 不等于 API Level.... 2. ...
- Ant自动构建
Ant+jenkins+tomcat <project name="buildWar" default="clean"> <property ...
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
原创文章,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4535459.html android 程序打包成apk,如果在是命令行方式,一般都要经过如下步骤: 1.用a ...
- 用Ant实现Java项目的自动构建和部署
原文地址:http://tech.it168.com/j/2007-11-09/200711091344781.shtml 本文请勿转载! Ant是一个Apache基金会下的跨平台的构 ...
- 利用ant脚本 自动构建svn增量/全量 系统程序升级包
首先请允许我这样说,作为开发或测试,你一定要具备这种 本领.你可以手动打包.部署你的工程,但这不是最好的方法.最好的方式就是全自动化的方式.开发人员提交了代码后,可以自动构建.打包.部署到测试环境. ...
- linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
原创,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4555328.html 之前写过一篇<windows下Android利用ant自动编译.修改配置文件.批量 ...
- 用Ant实现Java项目的自动构建和部署(转)
Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作. 一. ...
- 用Ant实现Java项目的自动构建和部署(转)
Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作. 一. ...
- Ant + Jenkies +Tomcat 自动构建部署Web项目
前言:博主资历尚浅,很多东西都还在刚起步学习的阶段,这几天开发任务比较轻,就在自己window系统下,模拟部署远程服务器,利用Jenkies + Ant + Tomcat 搭建了一个自动发布部署的环境 ...
随机推荐
- meta标签属性总结
一.常见name属性.不同参数含义 meta标签的name属性语法格式是: <meta name="参数" content="具体的参数值"> 其中 ...
- [原创]安全系列之端口敲门服务(Port Knocking for Ubuntu 14.04 Server)
Port Knocking for Ubuntu 14.04 Server OS:ubuntu 14.04 server 原理简单分析: 端口敲门服务,即:knockd服务.该服务通过动态的添加ipt ...
- Submin1安装记录(CentOS5)
安装SVN和Apache wget http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco -O /tmp/RPM-GPG-KEY-WANdisco & ...
- rPithon vs. rPython(转)
Similar to rPython, the rPithon package (http://rpithon.r-forge.r-project.org) allows users to execu ...
- css reset的重置作用(可取还是不可取,取决于你)
一.重置的理由 当今流行的浏览器中,有些都是以自己的方式去理解css规范,这就会到只有的浏览器对css的解释与设计师的css定义初衷相冲突,使得网页的样子在某些浏览器下能正确按照设计师的想法显示.,但 ...
- Java的必备开发工具
身为一个Java开发的爱好者,你不得不承认需要安装以下软件 NO.1 Java开发工具包 Java JDK 可以说这个工具包不得不安装,因为这个工具包是开发Java程序的核心! Java JDK工具包 ...
- 一步一步实现基于GPU的pathtracer(一):基础
出于3D计算机图形学和图形渲染方面的个人兴趣,脑子里便萌生出了自己实现一个渲染器的想法,主要是借助pathtracing这种简单的算法,外加GPU加速来实现,同时也希望感兴趣的朋友们能够喜欢,也欢迎提 ...
- Java中的向上造型和向下造型等
package com.study.oop.day01; /** * 如果某个方法是静态 的,它的行为就不具有多态性 * @author LuHongGang * @date 2017年6月5日 ...
- 一天搞定CSS(扩展):CSS Hack
做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道 ...
- 解析PHP面向对象的三大特征
class BenHang extends Card{ /*构造函数与及构造的继承*/ function __construct($cardno,$pwd, $name,$money){ parent ...