首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >多渠道批量打包

多渠道批量打包

作者头像
粲然
发布于 2022-08-02 06:58:18
发布于 2022-08-02 06:58:18
60600
代码可运行
举报
文章被收录于专栏:工程师的分享工程师的分享
运行总次数:0
代码可运行

经过一天的奋战,终于搞定了批量打包,不多说,上代码

多渠道就是按照不同的市场进行发布不同的包,由于要改版本名,所以有的时候要打10多个包,在测试部的人员打一次包久会感觉不好,

先说前提,是运用android sdk进行打包,需要ant,

同时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.

对现有项目进行编译

android update project --name ProjectDemo --target 8 --path ./  

生成一下一个文件

  1. Updated project.properties  
  2. Updated local.properties  
  3. Added file D:\ProjectDemo\build.xml  
  4. Updated file D:\ProjectDemo\proguard.cfg  

首先要在AndroidManifest.xml文件中加入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <meta-data android:value="baiduyingyongzhongxin" android:name="CHANNEL"/>

用来表示版本的值

然后再把要替换的值放在配置文件,可以放在ant.properties, project.properties, local.properties等文件,当然如果为了打包与这些文件分离,可以自己创建一个文件,并导入,笔者作为测试,放在了ant.properoties文件中,这里不推荐

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
market_channels=anzhuoshichang,jifengshichang,baiduyingyongzhongxin
app_version=1_0_build_0 

上面就是需要打包的版本,是三个市场的,也就是说要打3个包

一下是build.xml文件中添加的源码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       	   <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.final.file" location="./${channel}.apk" />  
	     
        <antcall target="clean" />
        <antcall target="release" />

是不是感觉头很大,看不懂,没关系,学知识就是要循序渐进,

推荐两篇文章,学习一些怎么循环读数据,看懂了那两个,再看笔者这个久容易很多了

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

这里面有一个地方

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<property name="out.final.file" location="./${channel}.apk" />  

笔者亲测用out.final.file才能生成不同版本的apk,不知道是不是变量名称的改变

http://www.cnblogs.com/stay/archive/2013/05/27/3102027.html这篇讲了比较多的原由

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验