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

  • 相关阅读:
    每日一练ACM 2019.0417
    每日一练ACM 2019.0416
    每日一练ACM 2019.04.13
    每日一练ACM 2019.04.14
    创建线程的方法
    类和对象的概念
    接口的概念
    Mysql添加取消自增属性
    SpringMVC不支持PUT表单提交
    SSM框架整合报org.springframework.beans.factory.NoSuchBeanDefinitionException
  • 原文地址:https://www.cnblogs.com/wayland/p/7155386.html
Copyright © 2020-2023  润新知