Android笔记之:App自动化之使用Ant编译项目多渠道打包的使用详解
背景介绍
随着移动应用市场的日益火热,App开发变得愈发重要,特别是大型或跨国企业开发一个App需要针对不同市场的版本。这种情况下,如何实现一个代码多版本多分发的编译方案呢?Ant是一款自动化工具,可以根据配置截取不同分支的编译流程,实现内部资源的不同替换,以及多版本的编译和打包。
使用Ant编译项目多渠道打包攻略
以下是Ant编译多渠道打包的攻略步骤:
- 配置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文件目录 -->
- 使用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>
- 在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>
- Ant的room文件中的
do-build
target中附加循环指令,遍历配置文件列表。
<for list="${channel.list}" param="channelType">
<sequential>
<!-- >> 执行do-build中指定的生成不同渠道的包流程 -->
<echo message="@@@@@@@@@@@@@@@@@@@@ Generating APK for channel: ${channelType}"/>
<antcall target="do-build"/>
</sequential>
</for>
- 添加
channel.list
文件,以字符串列表的形式列出所有需要的渠道版本,在room文件中添加如下一行指令。
<property name="channel.list" value="Google,360,UC,Anzhi"/> <!-- 支持渠道的列表,以逗号分隔 -->
- 执行完成指令
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技术站