使用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 搭建了一个自动发布部署的环境 ...
随机推荐
- SmartCoder每日站立会议04
1.站立会议内容 经过今天的站立会议,决定首页先做成简单的样式,先完善功能.进行了首页模块划分. 站立会议照片: 2.任务展板 3.燃尽图
- 解决R语言临时文件目录的问题(tempdir、tempfile)
最近在调用SparkR的时候,当用copy_to函数将R中的数据框导入到Spark时,会在默认的tempdir()目录下(这里默认目录即为/tmp)产生巨大的临时文件, 严重影响R脚本的运行,最终一番 ...
- 在node.js中如何屏蔽掉favicon.ico的请求
今天准备用node做个api出来,还没入门,遇到一个小问题,特在此记录一下! 在做路由模块的时候,发现控制台每次都会多输出一条favicon.ico的请求,对于这种又占资源,看着又碍眼的玩意,强迫症完 ...
- python基础 - 01
python 变量名 在python中的变量命名,与其他语言大体相似,变量的命名规则如下: 变量名是数字.字母.下划线的任意组合 变量名的第一个字符不能是数字 系统的关键字不能设置为变量名 Ti ...
- DOM知识梳理
DOM 我们知道,JavaScript是由ECMAScript + DOM + BOM组成的.ECMAScript是JS中的一些语法,而BOM主要是浏览器对象(window)对象的一些相关知识的集合. ...
- 基于FPGA的均值滤波算法的实现
前面实现了基于FPGA的彩色图像转灰度处理,减小了图像的体积,但是其中还是存在许多噪声,会影响图像的边缘检测,所以这一篇就要消除这些噪声,基于灰度图像进行图像的滤波处理,为图像的边缘检测做好夯实基础. ...
- 基于redis实现tomcat8及以上版本的tomcat集群的session持久化实现(tomcat-redis-session-manager二次开发)
前言: 本项目是基于jcoleman的tomcat-redis-session-manager二次开发版本 1.修改了小部分实现逻辑 2.去除对juni.jar包的依赖 3.去除无效代码和老版本tom ...
- 转发:Ubuntu软件卸载安装的命令
说明:由于图形化界面方法(如Add/Remove... 和Synaptic Package Manageer)比较简单,所以这里主要总结在终端通过命令行方式进行的软件包安装.卸载和删除的方法. 一.U ...
- orcle :Could not initialize "D:\app\Administrator\product\11.2.0\dbhome_1\bin\oci.dll" Make sure you have the 32 bits Oracle Client installed.
服务器重启后,数据库登录信息为空 错误信息: ---------------------------(Not logged on) - PL/SQL Developer---------------- ...
- 谈一下我们是怎么做数据库单元测试(Database Unit Test)的
作者水平有限,如有错误或纰漏,请指出,谢谢. 背景介绍 最近在团队在做release之前的regression,把各个feature分支merge回master之后发现DB的单元测试出现了20多个失败 ...