友盟统计基础上Eclipse下使用Ant多渠道批量打包

在上一篇文章《Eclipse下Ant自动打包,混淆和签名》中我们可以通过ant 进行打包了。。但是实际中。有的时候有业务需求。需要统计各个渠道的app下载量和使用情况。很多人会说。Android各大平台都有自己的统计量。通过下载链接那里就有。通过开发者平台后台可以看到。。我的回答是:扯淡。 举个例子:安卓app分发平台这么多。。他们统计的规则相同吗。你能确定吗。某个ip或者某个用户下载多次app.平台是否去重处理?他们给你看到的数据是一定是真实的吗?公司想看看我的用户在哪个平台使用量占比。。如何区分?多渠道打包应运而生。。当然你如果选择传统方法。。一个个打。。需要100个包我打100次。。没人拦着你。本文是一次性打出多个包。下面进入正题。本文多渠道打包使用的是友盟统计第三方。

遵照的链接是:  http://blog.csdn.net/shanghaibao123/article/details/45598619    有兴趣的同学可以看一下。我们这里在此基础上做了完善。

我们在配置文件中写好需要用到的渠道名和渠道号,用ant构建时将会读取我们写好的渠道,动态替换AndroidManifest.xml中的meta节点的name和value,每替换完一个就打出一个apk包,用一个for循环不断地重复打包直到导出所有的渠道包为止。为了方便替换,在AndroidManifest.xml中</application>下添加一个meta节点如下:

<meta-data android:value="5853f5c34544cb51fd001de5" android:name="UMENG_APPKEY"/>
        <meta-data  
           android:name="channelname" android:value="channelkey" >  
       </meta-data>  

记住这里的  <meta-data android:name="channelname" android:value="channelkey"> 格式固定,必须要求android:name和android:value间必须有且只有一个空格符。

待会儿我们在打包的时候就会把channelname替换成渠道名,把channelkey替换成渠道号。上一篇文章讲到local.properties,我们把参数都写在这里
如下local.properties:


程序根目录下新建一个custom_rules.xml:

<?xml version="1.0" encoding="UTF-8"?>    
<!-- 渠道包打包脚本  ant deploy -->    
<project name="custom_rules" >    
    
    <taskdef resource="net/sf/antcontrib/antcontrib.properties" >    
    
        <classpath>    
    
            <pathelement location="lib/ant-contrib-1.0b3.jar" />    
        </classpath>    
    </taskdef>    
    
    <!-- 循环打包 -->    
    
    <target name="deploy" >    
    
        <antcall target="clean" />    
    
        <foreach    
            delimiter=","    
            list="${market_channels}"    
            param="channel"    
            target="modify_manifest" >    
        </foreach>    
    </target>    
    
    <target name="modify_manifest" >    
    
        <!-- 获取渠道名字 -->    
    
        <propertyregex    
            input="${channel}"    
            override="true"    
            property="channelname"    
            regexp="(.*):"    
            select="\1" />    
        <!-- 获取渠道号码 -->    
    
        <propertyregex    
            input="${channel}"    
            override="true"    
            property="channelkey"    
            regexp=":(.*)"    
            select="\1" />    
            
        <replaceregexp    
            byline="false"    
            flags="g" >    
    
            <!-- 匹配的内容是 android:name="channelname" android:value="(.*)" -->    
    
            <regexp pattern="android:name="channelname" android:value="(.*)"" />    
            <!-- 匹配之后将其替换为 android:name="${channelname}" android:value="channelkey" -->    
    
            <substitution expression="android:name="${channelname}" android:value="${channelkey}"" />    
            <!-- 正则表达式需要匹配的文件为AndroidManifest.xml -->    
    
            <fileset    
                dir=""    
                includes="AndroidManifest.xml" />    
        </replaceregexp>    
    
        <!-- 打包 -->    
    
        <antcall target="release" />    
        <!-- 拷贝渠道包到指定目录下 -->    
    
        <copy    
            file="${out.absolute.dir}/${ant.project.name}-release.apk"    
            tofile="${out.absolute.dir}/out/${ant.project.name}-v${version}-${channelkey}.apk" />    
    
        <!-- 打包完一个渠道包后把渠道名和渠道号替换回原来格式,这样可以进行下一次替换 -->    
    
        <replaceregexp    
            byline="false"    
            flags="g" >    
    
            <regexp pattern="android:name="${channelname}" android:value="(.*)"" />    
    
            <substitution expression="android:name="channelname" android:value="channelkey"" />    
            <!-- 正则表达式需要匹配的文件为AndroidManifest.xml -->    
    
            <fileset    
                dir=""    
                includes="AndroidManifest.xml" />    
        </replaceregexp>    
    
    </target>    
    
</project>    


在这里需要注意:双引号用&quot;,由于贴代码的时候网页自动把&quot;转义字符替换成了。。我们把代码粘贴进程序。需要我们手动修改一下。

如图:注意看一下我的截图和你粘贴上面代码的区别。你的多了几个双引号。我的改为转义字符了。

修改完成以后开始构建.



运行。等待结果。


这就是我打包出来的结果。。说明成功了。。文件存放在bin---out文件夹下。运行通过友盟统计查看结果吧。。记得友盟统计那个key改成你自己的。

不放心的话也可以通过反编译app查看一下meta值。

我在运行过程中也遇到了2个问题,比较棘手。。下面介绍一下:

报错形式1:

这种问题就是上面提到的双引号的问题。。按照指示修改对应行即可。

报错形式2:

custom_rules.xml内容粘贴有问题。。重新粘贴我上面的代码修改即可。

报错形式3:

这是代码混淆引起的。在local.properties里面去掉代码混淆语句即可。。如果需要增加混淆,请自行查找解决办法。

报错形式4:

这是由于缺少一个名为ant-contrib-1.0b3的jar包引起。下载该jar包放在libs下。通过 build.xml右击run as---Exterenal  Tools configurations--Classpath 选择 add JARS 增加该jar包ok。开始生成app



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值