相关文章列表:

《 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>  




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



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




更多相关文章

  1. Android(安卓)ORM系列之ActiveAndroid
  2. android 布局文件属性说明
  3. 第一天
  4. Android开发文档
  5. Android(安卓)系统中WatchDog 日志分析
  6. Android(安卓)corners 圆角属性各个版本之间兼容问题
  7. Android(安卓)SDK 快速安装方法
  8. 二、ANDROID命令详解
  9. android 设置布局动画

随机推荐

  1. Android字体设置,Roboto字体使用
  2. Eclipse对Android项目导入、导出、修改工
  3. 《Android(安卓)系统源代码分析》PDF版电
  4. android-configChanges属性总结
  5. Android应用去掉标题栏状态栏(Android(安
  6. BlockCanary原理解析(Android端UI卡顿监
  7. Android(安卓)常用知识点整理(含链接)
  8. android Configuration系统设置 .
  9. android中如何捕获home键
  10. Android(安卓)Service教程