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

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日

相关文章

  • Win7+xp命令行 一键修改IP、DNS

    Win7+XP命令行 一键修改IP、DNS 简介 通过命令行一键修改IP、DNS可以大大提高设置网络的效率和精度,这对于网络管理员或者有一些比较复杂的网络环境的用户来说是非常有帮助的。本篇文章将详细介绍如何通过命令行修改IP、DNS,适用于Windows 7以及Windows XP系统。 修改IP 步骤 打开命令提示符窗口,可以通过Win+R键打开运行窗口,…

    other 2023年6月26日
    00
  • 如何实现浏览器上的右键菜单

    下面我将为你详细讲解如何实现浏览器上的右键菜单。 1. 添加右键菜单 在实现浏览器上的右键菜单之前,我们需要先了解如何添加右键菜单。在HTML中添加右键菜单可以使用contextmenu属性,该属性指定一个菜单元素作为右键菜单。 下面是一个简单的示例代码: <!DOCTYPE html> <html> <head> &lt…

    other 2023年6月27日
    00
  • 一文带你了解Java创建型设计模式之原型模式

    一文带你了解Java创建型设计模式之原型模式 什么是原型模式? 原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需通过实例化类来创建。这种模式通过克隆已有对象来创建新对象,从而避免了创建对象时的复杂初始化过程。 原型模式的实现方式 在Java中,实现原型模式通常需要满足以下两个条件: 实现Cloneable接口:该接口是一个标记接口,用…

    other 2023年10月15日
    00
  • java设计模式–三种工厂模式详解

    Java 设计模式:三种工厂模式详解 工厂模式是Java中常见的一种设计模式,用来解决对象创建过程中的一些问题。根据具体的需求和使用场景,工厂模式还可以进一步细分为三种——简单工厂模式、工厂方法模式和抽象工厂模式。 本文将详细讲解三种工厂模式的原理、特点、适用场景以及代码实现等方面的内容,希望对Java初学者有所帮助。 简单工厂模式 原理 在简单工厂模式中,…

    other 2023年6月26日
    00
  • 火影忍者OL高手进阶必备知识全部汇总

    火影忍者OL高手进阶攻略 1. 必备知识 战斗机制 火影忍者OL的战斗采用回合制,要想在战斗中胜出,玩家需要掌握以下几个方面的知识: 战斗顺序:火影忍者OL的战斗顺序与战斗阵容中忍者的速度值有关,速度值越高的忍者越先行动,因此玩家需要在战斗阵容中搭配速度不同的忍者。 忍术和绝招:忍者在战斗中可以释放忍术和绝招来对敌人造成伤害或者提升己方忍者的属性,玩家需要掌…

    other 2023年6月27日
    00
  • win11环境变量在哪?Windows11环境变量设置方法

    下面是详细讲解“win11环境变量在哪?Windows11环境变量设置方法”的攻略: Windows11环境变量 环境变量的概念 在计算机中,环境变量是一种存储特定值的系统变量。在Windows中,这些变量包含了各种各样的系统信息,例如用户的个人文件夹位置、Windows的安装位置以及许多其他数据。由于这些信息是动态变化的,因此将它们存储在环境变量中可以让其…

    other 2023年6月27日
    00
  • ASP.NET MVC4入门教程(七):给电影表和模型添加新字段

    针对这个话题,我将为你详细讲解如何在ASP.NET MVC4中给电影表和模型添加新字段。 第一步:添加新字段到电影模型类中 首先,我们需要在我们的电影模型(Movie.cs)中添加新字段,以此来存储电影的“导演”信息。我们可以在模型类中添加如下代码: public string Director { get; set; } 这样,我们的电影模型类就多了一个名…

    other 2023年6月25日
    00
  • 详解C语言中二级指针与链表的应用

    详解C语言中二级指针与链表的应用 本攻略介绍如何使用C语言中的二级指针(也称为指向指针的指针)来实现链表数据结构。本攻略中使用两个示例来说明如何在C语言中使用二级指针来实现链表。 什么是链表 链表是一种动态数据结构,它可以用来存储数据集合。链表由一系列的节点组成,每个节点都包含一个值和一个指向下一个节点的指针。 链表有很多种不同类型,如单向链表、双向链表、循…

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