Android 自动编译、打包生成apk文件 4 - 多渠道批量打包
相关文章列表:
当前描述多渠道批量打包是基于第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 - 多渠道批量打包的更多相关文章
- linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
原创,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4555328.html 之前写过一篇<windows下Android利用ant自动编译.修改配置文件.批量 ...
- Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式
相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式> &l ...
- Android 自动编译、打包生成apk文件 2 - 使用原生Ant方式
from://http://blog.csdn.net/androiddevelop/article/details/11100109 相关文章列表: <Android 自动编译.打包生成apk ...
- 使用ant自动编译、打包生成apk文件
上次使用命令行生成apk文件<Android 命令行编译.打包生成apk文件>,学习命令行生成的目的是为了编写ant打下基础. 一. ant环境 下载ant包,配置环境变量 二.ant编译 ...
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
原创文章,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4535459.html android 程序打包成apk,如果在是命令行方式,一般都要经过如下步骤: 1.用a ...
- 在eclipse中将android工程打包生成apk文件
1.)生成keystore 按照下面的命令行 在C:\Program Files\Java\jdk1.6.0_10\bin>目录下,输入keytool -genkey -alias androi ...
- 用eclipse编写Android程序时怎样生成apk文件
转载请注明出处:http://blog.csdn.net/ns_code/article/details/16828449 APK是Android Package的缩写,即Android安装包.通过将 ...
- Android 命令行编译、打包生成apk文件
一.搭建搭建环境 1. 安装JDK 和 Android SDK 2. 配置环境变量 D:\android-sdk-windows\tools C:\Program Files\Java\jdk1. ...
- HBuilder 云打包生成 .apk 文件所需的安卓证书如何获取以及文件打包前必须的设置
在 HBuilder 云打包功能中,生在 .apk 文件虽然平台提供了免费的 安卓证书,但如果有其它需求,比如想发布,那么就需要自己去申请各种类型的证书了,这里介绍几个工具,方便在线生成证书并配置到打 ...
随机推荐
- elk 添加节点
elk 添加节点: cluster.name: es_cluster node.name: node03 path.data: /elk/elasticsearch/data path.logs: / ...
- Home | WebScraping.com
Home | WebScraping.com We specialize in extracting data from websites, which is known as web scrapin ...
- 今天刚申请成为Uber司机 已经接了5单了....大家有什么想问的吗?
今天刚申请成为Uber司机 已经接了5单了....大家有什么想问的吗? 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版最新最详细注册流程)/ ...
- Struts2 学习笔记19 类型转换 Part1
现在来说一说类型转换,提到类型转换其实我们之前早已经用过了,在url传递参数的时候,我们传递过来的参数其实都是String类型的,在显示的时候都自动转换了,像这种简单的转换很好理解,我们要说的是,转换 ...
- 首页 导航栏隐藏 下一级页面显示,pop回来遇到的问题
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationContr ...
- 软碟通UltraISO 9.65.3237官方注册版
UltraISO软碟通是一款功能强大.方便实用.老牌优秀的光盘映像文件制作/编辑/转换工具:可直接编辑ISO文件,从ISO中提取文件和目录:也可从CD – ROM制作光盘映像或者将硬盘上的文件制作成I ...
- 正则RegEXp
JavaScript RegExp 对象 RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 直接量语法 /pattern/attributes 创建 RegE ...
- css两列布局,一边固定宽度,另一边自适应
<!DOCTYPE HTML><HTML> <head> <meta charset="utf-8" ...
- C#高级编程零散知识点
1.206-实现单链表的添加和插入 207-实现单链表的其他功能和 3.209-Lambda表达式 4.301-栈的介绍和BCL中的栈 4.501-进程和线程的概念[00_12_06][2015122 ...
- NSArray的4种遍历方式
前言:NSArray对应的是java的List,不同的是其元素不能更改,不过其派生类NSMutableArray可以更改,遍历的方式跟java的List基本一样 一. for循环 Student * ...