• APP多渠道打包


    多渠道打包的概念:

      打包是指使用证书文件对app签名生成一个apk文件。

      多渠道打包指的就是我们的app在开发完成之后需要投放到不同的市场,比如说Google市场、百度市场等,为了统计应用在各个市场的用户下载量、新增用户量等数据,需要把他们打包成不同的包投放到不同的市场,每种包都包含了各自市场的信息。

    多渠道打包的实现:

      目前多渠道打包主要有两种实现方式:一种就是gradle变量动态替换,第二种就是第三方公司推出的批量打包方案。

    gradle动态变量替换:

      首先,将manifest文件中的meta-data标签的value值用占位符替换。即${channel}

    <meta-data android:name="UMENG_CHANNEL" android:value="${channel}" />

      然后,在build.gradle文件中,添加productFlavors节点,配置变量的所有取值集合。

    //渠道配置,通过产品微调的功能来配置
    productFlavors {
        //添加一个产品配置项,名称是WanDouJiaChannel
        WanDouJiaChannel {
            //表示清单文件中有一个占位符channel,编译的时候会将它的值替换为wandoujia
            manifestPlaceholders = [channel:"wandoujia"]
        }
    ​
        //再添加一个小米AppStore渠道
        XiaoMiChannel {
            manifestPlaceholders = [channel:"xiaomi"]
        }
    ​
        //再添加一个应用宝渠道
        YingYongBaoChannel {
            manifestPlaceholders = [channel:"yingyongbao"]
        }
    ​
        //...为所有渠道添加配置
    }

      最后,通过打包生成全部的apk文件。

    美团自动化打包:

      原理:先准备一个签过名的apk文件,然后复制多个apk文件,再向每个apk文件的META-INF目录中写入空文件,而这个文件的名称正好命名为渠道名。这样下来,每个apk文件的META-INF目录下都有一个标识了渠道名称的空文件。然后我们在app代码中,动态读取META-INF目录下的那个空文件,就获取到了渠道名,然后传递给友盟SDK。

      具体做法如下:

      在美团提供的工具中,channel.txt文件是所有的取到信息,如果需要新的,则在下面继续添加。包内有一个MultiChannelBuildTool.py文件这个文件是用python写的脚本程序,作用是读取channel中的渠道信息,然后赋值很多个apk文件,再将读取的取到信息一次写入每个apk文件的META-INF目录下,就是那个空文件。在app代码中,我们使用美团提供的ChannelUtil工具类,读取出META-INF目录下的空文件,得到当前app的渠道信息,因此原来manifest文件中的meta-data的取到标签要去掉了,原来gradle的那些渠道信息配置也都要删除。代码如下:

    //获取META-INF目录下的渠道信息
    String channel = ChannelUtil.getChannel(this);
    //将渠道信息设置给UmengSDK
    String appKey = "58b7fe1aae1bf82ad4001a1d";
    MobclickAgent.UMAnalyticsConfig config = new MobclickAgent.UMAnalyticsConfig(this,appKey,channel);
    MobclickAgent.startWithConfigure(config);

    代码编写完成之后,导出一个签名的apk文件,然后放到PythonTool目录下,该apk文件目前没有任何渠道信息,只是功python脚本来复制用的。

    最后,双击执行MultiChannelBuildTool.py文件,当然前提是安装python运行环境。此时会复制出所有apk文件,并且每个apk文件的META-INF目录下都会出现新的空文件,文件名就是渠道名。

    个人总结:app多渠道打包主要有这么两种方式,一种是gradle替换动态变量的方式,主要实现是首先在清单文件的applcation节点下添加meta-data条目,并且将其value值设置为占位符(${channel}),然后去build.gradle文件中添加productFlovars节点,在该节点下添加各个渠道的信息,最后打包即可。还有一种是通过第三方的工具来实现。用的多的就是美团的自动打包工具。它的实现原理主要是:我们的apk文件一旦被修改就需要重新签名,而当我们在apk文件的META-INF目录下添加一个空文件的时候却不需要重新签名。美团打包工具就是利用了这个特性来实现打包,节省打包时间。主要实现是通过一个python的脚本工具。

    首先在app中添加代码,获取META-INF目录下空文件的文件名,这个文件名就是对应的渠道信息。然后将一个没有取到信息的安装包使用脚本工具生成多个安装包。

  • 相关阅读:
    函数式编程
    8 Principles of Better Unit Testing
    COM 组件 V.S. .NET
    WebBrowser 禁用脚本错误提示
    Unable to automatically debug "XXXXX“
    简介
    android中实现跑马灯效果以及AutoCompleteTestView与MultiAutoCompleteTextView的学习
    我的Android六章:Android中SQLite数据库操作
    Android的生命周期学习
    我的Android第五章:通过Intent实现活动与活动之间的交互
  • 原文地址:https://www.cnblogs.com/yegong0214/p/6511478.html
Copyright © 2020-2023  润新知