Android笔记之:App自动化之使用Ant编译项目多渠道打包的使用详解

yizhihongxing

Android笔记之:App自动化之使用Ant编译项目多渠道打包的使用详解

背景介绍

随着移动应用市场的日益火热,App开发变得愈发重要,特别是大型或跨国企业开发一个App需要针对不同市场的版本。这种情况下,如何实现一个代码多版本多分发的编译方案呢?Ant是一款自动化工具,可以根据配置截取不同分支的编译流程,实现内部资源的不同替换,以及多版本的编译和打包。

使用Ant编译项目多渠道打包攻略

以下是Ant编译多渠道打包的攻略步骤:

  1. 配置build.xml文件:在build.xml中描述不同版本所要替换的资源文件和基础配置参数。
<!-- 多渠道打包的基础配置 -->
<property name="channelType" value="Test"/>  <!-- 渠道类型 -->
<property name="platformRoot" value="${project.basedir}/../"/>  <!-- 项目根目录 -->
<property name="productName" value="TestDemo"/>  <!-- 产品名称 -->
<property name="resourcesFilePath" value="${project.basedir}/../resources/accessories" />  <!-- 资源花名册文件夹目录 -->
<property name="manifestFilePath" value="${project.basedir}/AndroidManifest.xml" />  <!-- AndroidManifest.xml文件目录 -->
  1. 使用task组合: 在task组合中实现不同version的配置和替换。
<!--task:将指定的包拷贝到输出目录中 -->  
<target name="copy_apk">  
    <echo message="srcfile = ${bin.file}" />  
    <echo message="srcfile = ${output.file}" />  
    <copy file="${bin.file}" tofile="${output.file}" />  
</target> 

<!-- task:使用简单文件的方式替换AndroidManifest.xml中的值 -->  
<target name="do-version">  
    <echo message="productName = ${productName}" />  
    <echo message="channelType = ${channelType}" />  
    <property file="${resourcesFilePath}/${channelType}.properties"/>  
    <replace file="${manifestFilePath}" encoding="UTF-8">  
        <replacetoken>PRODUCT_NAME</replacetoken>  
        <replacevalue>${productName}</replacevalue>  
    </replace>  
    <replace file="${manifestFilePath}" encoding="UTF-8">  
        <replacetoken>CHANNEL_NAME</replacetoken>  
        <replacevalue>${channelType}</replacevalue>  
    </replace>  
</target>  

<!-- task:主要用于区分不同的渠道包的名字和输出路径 -->  
<target name="do-package">  
    <property name="st" value=""/>  
    <if>  
        <not>  
            <equals arg1="${channelType}" arg2="Google"/>  
        </not>  
        <then>  
            <property name="st" value="_${channelType}"/>  
        </then>  
    </if>  
    <property name="name" value="${productName}${st}.apk"/>  
    <property name="output.dir" value="${ob.dir}/${channelType}"/>  
    <property name="output.file" value="${output.dir}/${name}"/>  
</target> 
  1. 在task组合中整合前两个task,同时附加指令。此时执行Ant的ant do-build -DchannelType=Google便会生成一个Google版本。
<!--组合task -->
<target name="do-build">  
    <!-- >> 具体内容:1.据渠道类型替换AndroidManifest.xml中的变量,2.拷贝指定的apk文件, 3.根据不同的渠道名称,生成版本号,以及输出的文件名称。 -->  
    <antcall target="do-version"/>  
    <antcall target="copy_apk"/>  
    <antcall target="do-package"/> 
</target>  
  1. Ant的room文件中的do-buildtarget中附加循环指令,遍历配置文件列表。
<for list="${channel.list}" param="channelType">  
    <sequential>  
        <!-- >> 执行do-build中指定的生成不同渠道的包流程 -->  
        <echo message="@@@@@@@@@@@@@@@@@@@@  Generating APK for channel: ${channelType}"/>
        <antcall target="do-build"/>
    </sequential>  
</for>
  1. 添加channel.list文件,以字符串列表的形式列出所有需要的渠道版本,在room文件中添加如下一行指令。
<property name="channel.list" value="Google,360,UC,Anzhi"/>  <!-- 支持渠道的列表,以逗号分隔 --> 
  1. 执行完成指令ant all,Ant将会自动截取不同渠道需要的编译流程,并按照版本名称整理成文件夹和apk格式的文件。例如,文件夹Google内将会保存Google版本的apk文件。

示例说明

  • 示例一:以360加固保渠道打包为例。在room文件中增加以下代码:

```xml

  <!-- 拷贝加固保的脚本,注意路径和名称;将apk进行加密和校验 -->
  <exec executable="/bin/bash" dir="${project.basedir}/res/tools">  
      <arg line="/bin/bash -c 'cp protect360.sh ${project.basedir}/bin/'"/> 
      <arg value="'${project.basedir}/bin/protect360.sh'"/>  
      <arg value="'${project.basedir}/bin/${ant.project.name}-signed.apk'"/>  
      <arg value="'${key-store-password}'"/>  
      <arg value="'${outpath}/${packageName}.apk'"/>  
      <arg value="'${key-alias-name}'"/>  
      <arg value="'${key-alias-password}'"/>   
      <arg value="'${project.basedir}/bin/'"/>   
  </exec>


```

执行指令ant do-build-jiebao便可以自动生成360加固保的apk文件。

  • 示例二:以多语言划分实现多渠道打包。在build.xml文件中修改如下代码:

```xml


```

在do-version中增加以下代码:

xml
<property file="${resourcesFilePath}/${lang}.properties"/>
<replace file="${manifestFilePath}" encoding="UTF-8">
<replacetoken>PRODUCT_NAME</replacetoken>
<replacevalue>${productName}</replacevalue>
</replace>
<replace file="${manifestFilePath}" encoding="UTF-8">
<replacetoken>CHANNEL_NAME</replacetoken>
<replacevalue>${channelType}</replacevalue>
</replace>

执行指令ant all便可以根据lang.properties文件自动分发不同语言版本的apk文件。

总结

通过以上的攻略,我们可以利用Ant快速实现多种渠道打包,同时在不同版本中灵活跨越编译环境。Ant是一个非常好用的自动化工具,同时可以和其他自动化工具结合使用,帮助我们更快捷和标准化开发过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android笔记之:App自动化之使用Ant编译项目多渠道打包的使用详解 - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • C语言中求余运算符的使用解读

    当我们在C语言中使用求余运算符时(%),会得到两个数相除后的余数。下面是关于C语言中求余运算符的使用解读的完整攻略: 什么是求余运算符? 求余运算符是一种二元运算符,通常表示为百分号(%),用于计算两个数相除后的余数。 求余运算符的使用方法 我们可以使用如下语法来使用求余运算符: remainder = dividend % divisor; 其中,divi…

    other 2023年6月27日
    00
  • 什么是usbmini接口

    以下是“什么是USB Mini接口的完整攻略,过程中至少包含两条示例说明”的标准markdown格式文本: 什么是USB Mini接口的完整攻略 USB Mini接口是一种较小的USB接口,通常用于连接移动设备和其他小型电子设备。以下是USB Mini接口的详细介绍和攻略。 1. USB Mini接口的类型 USB Mini接口有两种类型:Mini-A和Mi…

    other 2023年5月10日
    00
  • nohup启动命令

    nohup启动命令的完整攻略 在Linux系统中,nohup命令可以在后台运行程序,并且不会因为终端关闭而停止运行。本攻略将详细介绍nohup命令的方法和示例说明。 1. 命令格式 nohup命令的基本格式如下: nohup command [arg…] [> output.file] [&] 其中,command是要执行的命令,arg是命…

    other 2023年5月7日
    00
  • vivo z3怎么重启?vivo z3两种重启方法

    当vivo z3出现问题需要重启时,我们可以采取以下两种重启方法: 方法一:正常关机重启 当vivo z3正常运行时,可以采取正常关机重启的方法,步骤如下: 长按手机右侧的电源按钮,弹出”关机”选项; 点击”关机”选项并等待手机关闭; 检查手机是否完全关闭,没有任何显示; 再次长按手机右侧的电源按钮,直至vivo的标志出现; 等待vivo系统启动,此时viv…

    other 2023年6月26日
    00
  • 使用PyInstaller 打包配置文件

    使用PyInstaller打包配置文件的完整攻略如下: 1. 安装PyInstaller 首先需要安装PyInstaller工具,可以通过pip方式进行安装,命令如下: pip install pyinstaller 2. 准备代码和配置文件 需要准备好需要打包的代码,以及需要使用的配置文件。通常,配置文件需要放置在代码的同级目录下,并使用相对路径来引用。 …

    other 2023年6月25日
    00
  • Python递归函数特点及原理解析

    Python递归函数可以理解为在函数内部调用函数本身的过程。递归函数常常用于解决具有递归结构的问题,如数学中的阶乘、斐波那契数列等。Python递归函数的特点及原理见下: 特点: 调用本身:递归函数必须调用函数本身,否则就无法完成递归。 有限制条件:递归函数必须有限制条件,否则会一直调用自身,陷入死循环导致程序崩溃或栈溢出。 原理: 最终情况:递归算法必须包…

    other 2023年6月27日
    00
  • Intellij IDEA如何自定义注释模板的实现方法

    Intellij IDEA是一款流行的Java开发工具,可以通过自定义注释模板来提高开发效率。以下是Intellij IDEA如何自定义注释模板的实现方法: 1.创建注释模板文件 首先要创建一个模板文件,文件格式是.ftl。在Intellij IDEA中,可以通过以下操作来创建ftl文件: 点击File -> New -> FreeMarker …

    other 2023年6月25日
    00
  • Android中编写属性动画PropertyAnimation的进阶实例

    Android中编写属性动画PropertyAnimation的进阶实例攻略 属性动画(Property Animation)是Android中一种强大的动画机制,可以对任意对象的属性进行动画操作。本攻略将详细讲解如何在Android中编写属性动画的进阶实例。 步骤一:导入属性动画库 首先,需要在项目的build.gradle文件中添加属性动画库的依赖: d…

    other 2023年9月7日
    00
合作推广
合作推广
分享本页
返回顶部