相关文章列表:

当前描述多渠道批量打包是基于第3篇文章基础之上的打包方式。

批量按渠道打包要做几件事情:
1. 存储渠道号
2. 取出渠道号
3. 遍历渠道号执行4,5操作
4. 根据取出的渠道号修改AndroidManifest.xml文件并打包

1. 存储渠道号
我选择存在新建的build.properties中,这样可以和打包的分离,当然也可以放到ant.properties, project.properties, local.properties 等文件中。

2. 取出渠道号
从properties中读取信息,xml代码如下

<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" > <property file="build.properties"/> <echo>${market_channels}</echo> </project>

执行ant,结果如下:

D:\ProjectDemo>ant
Buildfile: D:\ProjectDemo\build.xml
[echo] 666666,88888888 BUILD SUCCESSFUL
Total time: 0 seconds

3. 遍历渠道号执行4,5操作

ant核心库本身不支持遍历功能,所以需要引入新库ant-contrib-1.0b3.jar,需要放到ant\lib目录下,我直接放到当前项目目录下。

ant-contrib 下载地址: http://sourceforge.net/projects/ant-contrib/

如果出现如下错误,说明没有放置jar文件

Buildfile: D:\ProjectDemo\build.xml

  [taskdef] Could not load definitions from resource net/sf/antcontrib/antcontri

b.properties. It could not be found.

遍历foreach的小例子,结合之前1,2遍历打印出渠道号

<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" > <property file="build.properties"/> <!-- 支持循环执行 -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties" >
<classpath>
<!-- <pathelement location="lib/ant-contrib-1.0b3.jar" /> -->
<pathelement location="./ant-contrib-1.0b3.jar" />
</classpath>
</taskdef> <echo>Run ant-contrib OK</echo> <target name="deploy">
<foreach target="edit_and_build" list="${market_channels}" param="channel" delimiter=",">
</foreach>
</target> <target name="edit_and_build">
<echo>Run '${channel}' apk</echo>
</target> </project>

结果:

D:\ProjectDemo>ant deploy
Buildfile: D:\ProjectDemo\build.xml
[echo] Run ant-contrib OK deploy:
[echo] Run ant-contrib OK edit_and_build:
[echo] Run '666666' apk
[echo] Run ant-contrib OK edit_and_build:
[echo] Run '88888888' apk BUILD SUCCESSFUL
Total time: 0 seconds

4. 根据取出的渠道号修改AndroidManifest.xml文件并打包

* 正则替换 replaceregexp 标签

http://ant.apache.org/manual/Tasks/replaceregexp.html

** 先来看一个替换的例子,把当前文件夹下的AndroidManifest.xml指定的版本号修改为9

<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" >
<!-- flags="g" 指定全局替换,替换所有符合规则的字段
byline="false" 确认被替换的时候是一次替换一行还是多行
pattern 属性用来指明正则表达式 -->
<replaceregexp flags="g" byline="false">
<regexp pattern="uses-sdk android:minSdkVersion="(.*)"" />
<!-- substitution expression 中是替换的值,替换的值都定义在相对应的配置文件中 -->
<substitution expression="uses-sdk android:minSdkVersion="9"" />
<!-- fileset 属性中的 dir 用来指定被替换文件所在的目录
includes 用来指定要替换哪个文件。 -->
<fileset dir="" includes="AndroidManifest.xml" />
</replaceregexp> </project>

结果:

自己查看AndroidManifest.xml指定的版本号修是否改为9

以上已经实现了批量打包的功能,现在只需要打开build.xml加载最上面:

   <property file="build.properties"/>

    <!-- 支持循环执行 -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties" >
<classpath>
<!-- <pathelement location="lib/ant-contrib-1.0b3.jar" /> -->
<pathelement location="./ant-contrib-1.0b3.jar" />
</classpath>
</taskdef> <echo>Run ant-contrib OK</echo> <target name="deploy">
<foreach target="edit_and_build" list="${market_channels}" param="channel" delimiter=",">
</foreach>
</target> <target name="edit_and_build">
<echo>Run '${channel}' apk</echo>
<!-- flags="g" 指定全局替换,替换所有符合规则的字段
byline="false" 确认被替换的时候是一次替换一行还是多行
pattern 属性用来指明正则表达式 -->
<replaceregexp flags="g" byline="false">
<regexp pattern="android:value="(.*)" android:name="CHANNEL""/>
<!-- substitution expression 中是替换的值,替换的值都定义在相对应的配置文件中 -->
<substitution expression="android:value="${channel}" android:name="CHANNEL"" />
<!-- fileset 属性中的 dir 用来指定被替换文件所在的目录
includes 用来指定要替换哪个文件。 -->
<fileset dir="" includes="AndroidManifest.xml" />
</replaceregexp>
<!-- <property name="out.release.file"
location="./${channel}.apk" />
<antcall target="release" /> -->
<!-- <property
name="out.final.file"
location="D:\ProjectDemo\${channel}.apk" /> -->
<property name="out.final.file"
location="D:\ProjectDemo\${channel}.apk" />
<antcall target="clean" />
<antcall target="release" />
</target>

例子下载地址http://download.csdn.net/detail/love_world_/6257753

出处:http://blog.csdn.net/androiddevelop/article/details/11619635

Android 自动编译、打包生成apk文件 4 - 多渠道批量打包的更多相关文章

  1. linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件

    原创,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4555328.html  之前写过一篇<windows下Android利用ant自动编译.修改配置文件.批量 ...

  2. Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式

      相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式> &l ...

  3. Android 自动编译、打包生成apk文件 2 - 使用原生Ant方式

    from://http://blog.csdn.net/androiddevelop/article/details/11100109 相关文章列表: <Android 自动编译.打包生成apk ...

  4. 使用ant自动编译、打包生成apk文件

    上次使用命令行生成apk文件<Android 命令行编译.打包生成apk文件>,学习命令行生成的目的是为了编写ant打下基础. 一. ant环境 下载ant包,配置环境变量 二.ant编译 ...

  5. windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件

    原创文章,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4535459.html android 程序打包成apk,如果在是命令行方式,一般都要经过如下步骤: 1.用a ...

  6. 在eclipse中将android工程打包生成apk文件

    1.)生成keystore 按照下面的命令行 在C:\Program Files\Java\jdk1.6.0_10\bin>目录下,输入keytool -genkey -alias androi ...

  7. 用eclipse编写Android程序时怎样生成apk文件

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/16828449 APK是Android Package的缩写,即Android安装包.通过将 ...

  8. Android 命令行编译、打包生成apk文件

    一.搭建搭建环境 1. 安装JDK 和 Android SDK   2. 配置环境变量 D:\android-sdk-windows\tools C:\Program Files\Java\jdk1. ...

  9. HBuilder 云打包生成 .apk 文件所需的安卓证书如何获取以及文件打包前必须的设置

    在 HBuilder 云打包功能中,生在 .apk 文件虽然平台提供了免费的 安卓证书,但如果有其它需求,比如想发布,那么就需要自己去申请各种类型的证书了,这里介绍几个工具,方便在线生成证书并配置到打 ...

随机推荐

  1. pomelo

    简介 Pomelo 是基于 Node.js 的高性能.分布式游戏服务器框架.它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳动和底层逻辑的开发.Pomelo 不 ...

  2. cocos2d-x新手学习之Helloworld(第三篇)[版本号:cocos2d-x-3.1.1]

    上篇中,能够正常执行NDK中的样例.可是由cocos2d-x生成的项目,不能编译成功.上一篇戳这里: http://blog.csdn.net/xjjjjjjjjjjj/article/details ...

  3. Objective-c 协议(protocol)

    协议的作用类似地C++中对抽象基类的多重继承.类似于Java中的接口(interface)的概念.   协议是多个类共享方法的列表,协议中列出的方法在本类中并没有相应实现,而是别的类来实现这些方法. ...

  4. jQuery也能舞出绚丽的界面(完结篇)

    ThematicMap又增加了两种Chart类型,现在总算是齐全了,效果也出来了,与大家分享一下: 1.MultiSelect选择界面: 颜色框是可以选择颜色的: 2.生成的饼图效果: 3.生成的柱状 ...

  5. ppt类似工具AxeFile使用心得

    一个所谓的傻瓜式过渡效果自动生成工具.定义好展示窗口大小,加入时序.所谓的闪烁效果,也是相当的滑稽. 是一个非专业的简单的快速PPT工具. 但是体现的确是扁平化的设计思路,很值得深思. ------ ...

  6. C3P0连接池参数解释

    <!--acquireIncrement:链接用完了自动增量3个. --> <property name="acquireIncrement">3</ ...

  7. C# Programming Study #1

    引用的时候需要在参数和使用的时候加上 ref 关键字 static bool addnum (ref int val) //引用 { ++val; return true; } 参数数组的概念,可以接 ...

  8. (IOS)多线程开发

    一.线程的使用 以向网络请求一张图片为例 -(void)downURL:(NSURL *)aURL { NSData *d = [NSData dataWithContentsOfURL:aURL]; ...

  9. TortoiseGit 自动登录

    在环境变量里添加Home=%USERPROFILE% 在运行中打开%Home% 在打开目录中新建文件_netrc,并保存以下内容 machine git.oschina.net login usern ...

  10. 啊华北哦好咕~~(╯﹏╰)b

    http://v.qq.com/boke/page/c/h/0/c01173tzeh0.html http://v.qq.com/boke/page/r/7/x/r0117l07r7x.html ht ...