批量打包最常用到的地方是进行产品推广时,为每个渠道打一个包。上一篇随笔中,介绍了怎样进行一次完整的打包,批量打包只要在此基础上做一次循环即可。

在打包之前要做两个准备工作,一个是读取渠道,一个是修改存储渠道的文件。

在工程的assets中新建一个channel.cfg文件,专门用了保存渠道,保存方式是 channel=渠道号。

ant的基本库中没有提够循环,需要引入另一个库ant-contrib-1.0b3.jar,以下通过一个例子来了解ant的循环

<?xml version="1.0" encoding="UTF-8"?>
<project name="TestAnt" default="deploy">

    <taskdef resource="net/sf/antcontrib/antcontrib.properties">
        <classpath>
            <pathelement location="${ant.home}/exlib/ant-contrib-1.0b3.jar" />
        </classpath>
    </taskdef>

    <target name="deploy">
        <foreach list="aaa,bbb,ccc,ddd,eee" target="package" param="channel" delimiter=",">
        </foreach>
    </target>

    <target name="package">
        <echo>${channel}</echo>
    </target>

</project>

输出结果:

在这个例子中aaa,bbb,ccc,ddd,eee以“,”为分隔符,依次取内容赋值给channel,做了五次循环。在target package中,用${channel}就可以取到渠道。

取到渠道后,通过正则表达式替换channel.cfg的内容

    <target name="change.channel">
        <replaceregexp flags="s" byline="true">
            <regexp pattern="channel=(.*)" />
            <substitution expression="channel=${channel}" />
            <fileset dir="assets" includes="channel.cfg" />
        </replaceregexp>
    </target>

flags="s"表示文件是单行,byline="true"表示逐行查找,<regexp pattern="channel=(.*)" />指定匹配的正则表达式,<substitution expression="channel=${channel}" />为替换后的内容,<fileset dir="assets" includes="channel.cfg" />指定文件。

我们在工程的根目录新建一个channels.properties的文件,输入channels=aaa,bbb,ccc,ddd,eee完整的批量打包代码为:

<?xml version="1.0" encoding="UTF-8"?>
<project name="TestJni" default="package">

    <taskdef resource="net/sf/antcontrib/antcontrib.properties">
        <classpath>
            <pathelement location="${ant.home}/exlib/ant-contrib-1.0b3.jar" />
        </classpath>
    </taskdef>

    <!-- 设置sdk,ndk路径,证书路径密码 -->
    <loadproperties srcFile="local.properties" />
    <loadproperties srcFile="project.properties" />
    <!-- 所有的渠道 -->
    <loadproperties srcFile="channels.properties" />

    <fail message="sdk.dir is missing." unless="sdk.dir" />
    <fail message="ndk.dir is missing." unless="sdk.dir" />

    <!-- 编译native代码 -->
    <target name="native" unless="native.libraries.are.uptodate">
        <echo message="Building native libraries..." />
        <exec executable="${ndk.dir}/ndk-build.cmd" failonerror="true" />
        <echo message="DONE (Building native libraries)" />
    </target>

    <!-- 引入sdk中的build.xml -->
    <import file="${sdk.dir}/tools/ant/build.xml" />

    <!-- 修改保存渠道的文件 -->
    <target name="change.channel">
        <replaceregexp flags="s" byline="true">
            <regexp pattern="channel=(.*)" />
            <substitution expression="channel=${channel}" />
            <fileset dir="assets" includes="channel.cfg" />
        </replaceregexp>
    </target>

    <!-- 进行一次完整的打包 -->
    <target name="package" depends="change.channel,native,release">
        <!-- 将apk复制的制定的目录 -->
        <copy tofile="sign/${ant.project.name}-${channel}.apk" file="bin/${ant.project.name}-release.apk" />
    </target>

    <!-- 执行批量打包 -->
    <target name="deploy">
        <foreach list="${channels}" target="package" param="channel" delimiter=",">
        </foreach>
    </target>

</project>

打开cmd,切换到工程根目录,执行ant deploy,批量打包完成后在制定目录生成了apk

安装apk到手机或模拟器进行测试

在程序内部已经读到渠道。

至此,只能够进行简单的批量打包任务,所用到的也是简单的ant命令,上面的的批量打包代码也有待改进,希望通过以后的学习,能加快打包的速度,实现更复杂的功能。

最新文章

  1. iOS controller解耦探究实现——第一次写博客
  2. 编解码-protobuf
  3. angularJs:动态效果之:显示与隐藏(该例对比了普通赋值,层次赋值,事件的写法对比)
  4. 【bzoj2281】[Sdoi2011]黑白棋
  5. util-C# 复杂条件查询(sql 复杂条件查询)查询解决方案
  6. 【js与jquery】电子邮箱、手机号、邮政编码的正则验证
  7. [置顶] [BZOJ]2127: happiness 最小割
  8. 使用F#开发量化模型都缺什么?
  9. 『信息收集』GoogleHacking快速定位目标网站
  10. document.body.scrollTop vs document.documentElement.scrollTop &amp;&amp; document.body.scrollHeight vs document.documentElement.scrollHeight
  11. 平时的笔记02:处理mp3
  12. Dnsmasq(局域网DNS,DHCP)
  13. 牛顿插值法及其C++实现
  14. splay小结—植树结
  15. Unity插件 - MeshEditor(八)模型镜像特效
  16. JavaScript match()方法和正则表达式match()
  17. 【转】BTree,B-Tree,B+Tree,B*Tree
  18. bootstrap学习1
  19. C#字符串。
  20. [archlinux][plasma][screensaver] plasma5配置屏保程序,没成功(-_-#)

热门文章

  1. AssetBundle系列——游戏资源打包(一)
  2. [Tango] Basic Knowledge
  3. Javascript起源...
  4. Angular系列----AngularJS入门教程01:AngularJS模板 (转载)
  5. struts2 s:if标签以及 #,%{},%{#}的使用方法
  6. STL or 线段树 --- CSU 1555: Inversion Sequence
  7. C#关键字
  8. 在Winform开发框架中实现对数据库的加密支持
  9. Aspose.Word 操作word表格的行 插入行 添加行
  10. HTML5 Wijmo:控制 Wijmo Grid 插件的编辑模式