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 文件虽然平台提供了免费的 安卓证书,但如果有其它需求,比如想发布,那么就需要自己去申请各种类型的证书了,这里介绍几个工具,方便在线生成证书并配置到打 ...
随机推荐
- [用UpdateLayeredWindow实现任意异形窗口]
前面提到,我们可以用SetWindowRgn或SetLayeredWindowAttributes实现不规则以及半透明的效果 对于SetWindowRgn,它通过一个Rgn来设置区域,这个Rgn一般可 ...
- hdu4725 The Shortest Path in Nya Graph【最短路+建图】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297574.html ---by 墨染之樱花 题目链接:http://acm.hdu ...
- 解决Windows 7下IE11无法卸载、无法重新安装,提示安装了更新的IE版本
2013年12月14日 iefans 有用户反馈在Windows 7系统上安装IE11时发现安装程序似乎出了问题,等待了很长时间都没有响应之后就断开了电脑的电源.之后IE11浏览器虽然能使用,却无法安 ...
- 在GridView控件里面绑定DropDownList控件
参考链接: http://www.aspsnippets.com/Articles/Populate-DropDownList-with-Selected-Value-in-EditItemTempl ...
- 【转】Ubuntu下deb包的安装方法
[转]Ubuntu下deb包的安装方法 deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb dpkg 是Debian P ...
- 基于RSA securID的Radius二次验证java实现(PAP验证方式)
基于rsa SecurID的二次验证.RSA server自身可以作为Radius服务器,RSA也可以和其他的软件集合,使用其他的server作为Radius服务器. radius的验证的一般流程如下 ...
- Non recursive Depth first search
深度优先非递归实现算法: 1 递归算法: //初始化相关数据结构 DFS(G) ------------------------------------------------------------ ...
- 基于Bootstrap的步骤引导html页面
美工设计了一个下一步下一步的引导效果界面,百度谷歌了很久没有找到合适的控件,就想着能不能借助Bootstrap的标签页修改下,实现后的效果如下. 实现思路是先PS三张小图片,作为步骤之间引导的箭头,如 ...
- (Problem 34)Digit factorials
145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145. Find the sum of all numbers which are ...
- this class is not key value coding-compliant for the key detailItem
我出这个错误是因为,自己的一个视图没有给指定想用的viewController文件..及一个classController控制一个xib文件,忘给该视图指定控制器了.