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日

相关文章

  • Spring Boot解决项目启动时初始化资源的方法

    使用Spring Boot时,我们可能需要在项目启动时初始化一些资源,例如数据库连接池、缓存等。这些资源的初始化需要在应用程序启动时执行,并在应用程序关闭时销毁。 在Spring Boot中,我们可以使用以下三种方法来实现这一目标: 实现InitializingBean和DisposableBean接口 Spring提供了InitializingBean和D…

    other 2023年6月20日
    00
  • Java redis使用场景介绍

    Java Redis使用场景介绍 简介 Redis是一款高性能的、基于内存的NoSQL数据库,主要用于缓存、消息队列、实时计数等场景。Redis支持多种数据结构,如string、hash、list、set、zset等。在Java项目中,可以通过Java Redis客户端来使用Redis。 本篇攻略主要介绍Java Redis在常见的使用场景下的应用。主要分为…

    other 2023年6月26日
    00
  • express的session函数

    Express是一款流行的Node.js Web框架,提供了丰富的功能和插件,其中包括session函数。session函数是一种用于在Web应用程序中存储用户会话数据的机制。本文将介绍Express的session函数的完整攻略,包括使用方法、配置选项和示例说明。 使用方法 要使用Express的session函数,需要先安装express-session…

    other 2023年5月5日
    00
  • c盘满了怎么清理?

    C盘是我们日常使用的计算机系统所在的系统盘,在我们平时的使用过程中会逐渐积累大量的文件,导致C盘空间不足。如果C盘空间不足,系统可能会崩溃、出现冻结、运行缓慢等问题。为了解决这些问题,我们需要及时清理C盘。 以下是C盘满了的实用清理方法和建议: 一、清理系统临时文件 Windows操作系统会产生大量的系统临时文件,不仅会占用C盘空间,而且会影响系统运行速度。…

    其他 2023年4月16日
    00
  • java实现socket客户端连接服务端

    下面我会详细讲解如何在Java中实现Socket客户端连接服务端的完整攻略,并提供两个示例说明。 一、Socket客户端连接服务端的基本流程 Socket客户端连接服务端的基本流程如下: 创建客户端 Socket; 使用 Socket 连接服务端; 使用输出流向服务端发送数据; 使用输入流接收服务端发送的数据; 关闭输入流、输出流和 Socket。 二、Ja…

    other 2023年6月27日
    00
  • MySQL基于DOS命令行登录操作实例(图文说明) 原创

    MySQL是一种常用的关系型数据库管理系统,通过DOS命令行登录MySQL是使用MySQL的一种基本方法。下面我将详细讲解MySQL基于DOS命令行登录操作实例,并提供两条示例说明。 前置条件 在开始MySQL基于DOS命令行登录操作之前,需要满足以下前置条件: 已安装MySQL数据库管理系统。 已配置正确的MySQL环境变量。 确保MySQL服务已启动。 …

    other 2023年6月27日
    00
  • windows下java环境变量的设置方法

    设置Windows下Java环境变量可以让我们在命令提示符下运行Java程序。下面是完整的设置过程: 第一步:下载和安装Java Development Kit(JDK) 前往Oracle官网下载JDK 执行下载好的安装程序并按照提示进行安装。 第二步:找到JDK安装目录 打开文件资源管理器并进入JDK的安装目录。 记下JDK目录的路径。 第三步:设置JAV…

    other 2023年6月27日
    00
  • Win11笔记本wifi功能消失了怎么办?Win11笔记本wifi功能消失了原因以及解决方法

    Win11笔记本wifi功能消失了怎么办? 原因分析 出现Win11笔记本wifi功能缺失,可能是以下原因导致: 系统更新引起的问题; 驱动软件缺失或失效; wifi模组故障或未启用。 解决方案 1. 设置网络适配器 步骤如下: 检查一下网络适配器是否正常启用,可在任务栏搜索栏中输入 “devmgmt.msc” 打开 “设备管理器”; 在 “设备管理器” 中…

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