博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ant 实现批量打包android应用
阅读量:5817 次
发布时间:2019-06-18

本文共 1838 字,大约阅读时间需要 6 分钟。

很多的应用中需要加上应用推广的统计,如果一个一个的去生成不同渠道包的应用,效率低不说,还有可能不小心弄错了分发渠道,使用ant可以批量生成应用。

一、添加渠道包信息

       为了统计渠道信息,就不得不在程序的某个地方加入渠道的信息,然后针对不同的渠道打不同的包。一般可以在Manifest文件中加入渠道编号,而不直接写在代码中。这样做的好处是,可以针对不同渠道,自动化去修改Manifest文件中的渠道编号,然后自动为该渠道打包。

Manifest文件支持Meta Data标签,建议使用这种自定义标签。例如下面的文件片段。

 
  1. <meta-data android:value="000000" android:name="CHANNEL"/> 

二、渠道包读取

 
  1. public static String getChanel(Context ctx){  
  2.         String CHANNELID="000000";  
  3.         try {  
  4.                ApplicationInfo  ai = ctx.getPackageManager().getApplicationInfo(  
  5.                        ctx.getPackageName(), PackageManager.GET_META_DATA);  
  6.                Object value = ai.metaData.get("");  
  7.                if (value != null) {  
  8.                    CHANNELID= value.toString();  
  9.                }  
  10.            } catch (Exception e) {  
  11.                //  
  12.            }  
  13.           
  14.         return CHANNELID;  
  15.     } 

三、自动打包实现

              简单介绍了使用ant命令打包android程序,实现批量打包需要的加一个类似于for循环的功能即可,在Ant的核心包里没有相关的For循环的Task,要下载相应的扩展包。可以使用开源的Ant-contrib包。下载地址:  。下载后的解压得到的jar文件放到ant的lib目录。

        在build.xml中增加如下代码就可以实现批量打包:

 
  1. taskdef resource="net/sf/antcontrib/antcontrib.properties">  
  2.   <classpath>  
  3.     <pathelement location="lib/ant-contrib-1.0b3.jar"/>  
  4.   </classpath>  
  5. </taskdef>  
  6.  <target name="deploy">  
  7.    <foreach target="modify_manifest" list="${market_channels}" param="channel" delimiter=",">  
  8.    </foreach>  
  9.  </target>  
  10. <target name="modify_manifest">  
  11.     <replaceregexp flags="g" byline="false">  
  12.     <regexp pattern="android:value="(.*)" android:name="CHANNEL"" />  
  13.     <substitution expression="android:value="${channel}" android:name="CHANNEL"" />  
  14.     <fileset dir="" includes="AndroidManifest.xml" />  
  15.     </replaceregexp>  
  16.     <property name="out.release.file" 
  17.                   location="${out.absolute.dir}/${ant.project.name}_${channel}_${app_version}.apk" />  
  18.     <antcall target="release" />  
  19. </target>  

taskdef 声明需要放到较前位置,因为if condition也会用到此声明。

build.properties文件增加:

 

taskdef 声明需要放到较前位置,因为if condition也会用到此声明。

build.properties文件增加:

 
  1. market_channels=000000,012345   
  2. app_version=1.2.1 

market名称用逗号分隔

执行ant deploy即可。

     本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/816810,如需转载请自行联系原作者

你可能感兴趣的文章
AIX 配置vncserver
查看>>
windows下Python 3.x图形图像处理库PIL的安装
查看>>
【IL】IL生成exe的方法
查看>>
network
查看>>
SettingsNotePad++
查看>>
centos7安装cacti-1.0
查看>>
3个概念,入门 Vue 组件开发
查看>>
没有JS的前端:体积更小、速度更快!
查看>>
数据指标/表现度量系统(Performance Measurement System)综述
查看>>
GitHub宣布推出Electron 1.0和Devtron,并将提供无限制的私有代码库
查看>>
论模式在领域驱动设计中的重要性
查看>>
Spring Web Services 3.0.4.RELEASE和2.4.3.RELEASE发布
查看>>
有关GitHub仓库分支的几个问题
查看>>
云原生的浪潮下,为什么运维人员适合学习Go语言?
查看>>
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Kali linux virtualbox rc=1908 错误解决办法
查看>>
linux软件包管理之三(源代码安装)
查看>>
[转载]设置Ubuntu自动连接无线,无须再输入密钥环和无线密码
查看>>
Apache配置
查看>>