使用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,不过易用很多。

原文地址:https://www.cnblogs.com/wayland/p/7155386.html