Android 自动编译、打包生成apk文件 4 - 多渠道批量打包
来源:互联网 发布:psp网络联机 编辑:程序博客网 时间:2024/06/05 18:06
相关文章列表:
《Android 自动编译、打包生成apk文件 1 - 命令行方式》
《Android 自动编译、打包生成apk文件 2 - 使用原生Ant方式》
《Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式》
当前描述多渠道批量打包是基于第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>antBuildfile: D:\ProjectDemo\build.xml [echo] 666666,88888888BUILD SUCCESSFULTotal 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 deployBuildfile: D:\ProjectDemo\build.xml [echo] Run ant-contrib OKdeploy: [echo] Run ant-contrib OKedit_and_build: [echo] Run '666666' apk [echo] Run ant-contrib OKedit_and_build: [echo] Run '88888888' apkBUILD SUCCESSFULTotal 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>
Note: 这里的路径需要修改一下
<property name="out.final.file" location="./${channel}.apk" />
五、注意事项
1. 定义渠道名,由文章中“2. 取出渠道号”可以看出想要给不同渠道的包生成不同的名字需要在build.properties文件中添加market_channels。
例如:build.properties内容可以如下设置
market_channels=88888888,666666app_version=1.2.1
2. 执行命令
这里对build.xml添加了自定义功能,不能直接使用ant release执行操作,因为release是SDK ant build.xml提供的功能,需要使用ant deploy执行。
ant deploy
参考资料:
Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
http://www.cnblogs.com/qianxudetianxia/archive/2012/07/04/2573687.html#2417439
Android学习系列(33)--App应用之提交到各大市场渠道
http://www.cnblogs.com/qianxudetianxia/archive/2012/12/05/2803894.html
例子下载地址:http://download.csdn.net/detail/love_world_/6257753
出处:http://blog.csdn.net/androiddevelop/article/details/11619635
- Android 自动编译、打包生成apk文件 4 - 多渠道批量打包
- Android 自动编译、打包生成apk文件 4 - 多渠道批量打包
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- Ant自动批量打包多渠道APK
- Android 自动编译、打包生成apk文件 1 - 命令行方式
- Android 自动编译、打包生成apk文件 1 - 命令行方式
- Android 自动编译、打包生成apk文件 1 - 命令行方式
- Android 自动编译、打包生成apk文件 1 - 命令行方式
- apk多渠道自动打包
- Android 自动编译、打包生成apk
- Android 命令行编译、打包生成apk文件
- Android 命令行编译、打包生成apk文件
- Android 命令行编译、打包生成apk文件
- Android 命令行编译、打包生成apk文件
- Android 命令行编译、打包生成apk文件
- Android 命令行编译、打包生成apk文件
- 使用JAVA读写Properties属性文件
- 充电桩概念股
- 黑马程序员--C#数据类型转换
- 多线程编程基础知识
- 归来自己的概念股
- Android 自动编译、打包生成apk文件 4 - 多渠道批量打包
- Windows 64编程中寄存器的使用
- Java语言中能使用的网络功能1--接受网络数据
- DHTML【11】--DOM
- eclipse快速生成java方法的注释
- 使用CentOS光盘镜像作为YUM源安装rpm软件包
- python judge prime number
- C++盲点
- QML文本中实现网页超链接