瓦力+美团实现多渠道打包(百度统计+友盟统计)

项目中使用了很多多渠道打包,使用原始productFlavors打包编译很慢,有时候还会不够内存,导致打包不完整.后来发现用了瓦力+,美团多渠道打包很好用,打包速度也快.下面分享给大家,希望大家可以少走弯路.

1.在项目的build.gradle的dependencies中添加瓦力插件

dependencies {

        //瓦力
        classpath 'com.meituan.android.walle:plugin:1.1.6'

}

2.在APP的build.gradle的添加瓦力插件

apply plugin: 'walle'//瓦力

3.创建channel文本、config.json文本、channel_debug文本(channel或者config.json必须写一种)放入到app目录下

3.1创建一个文本channel填写你需要统计的应用名称

后台
华为
小米
vivo
oppo
金立
魅族
百度手机助手
腾讯应用宝
阿里应用

3.2创建一个文本config.json填写你需要统计的应用名称

{
  //extraInfo 不要出现以`channel`为key的情况
  /*
  不声明extraInfo的channel默认使用的extraInfo
  如果没有此项则没有默认extraInfo
  */
  "defaultExtraInfo": {
    "key2": "20161213",
    "key": "20161212"
  },

  /*
    strategy:
     1. ifNone (默认适用此策略) : 仅当对应channel没有extraInfo时生效
     2. always : 所有channel都生效,channel中extraInfo的key与defaultExtraInfo重复时,覆盖defaultExtraInfo中的内容。
   */

  //"defaultExtraInfoStrategy": "always",

  "channelInfoList": [
    {
      "channel": "meituan",
      // 此channel将使用自己声明的extraInfo
      /*
      此alias可以做到写入apk的channel是meituan,而打包时输出的文件名是美团
      注意:alias不声明时,walle配置apkFileNameFormat中channel就是channel,否则为alias
      */
      "alias": "美团",
      "extraInfo": {
        "buildtime": "20161212",
        "hash": "123"
      }
    },
    {
      "channel": "360cn",
      // 此channel将使用自己声明的extraInfo
      "extraInfo": {
        "key": "20161213"
      }
    },
    {
      "channel": "googleplay"
      // 此channel将使用defaultExtraInfo
    },
    {
      "channel": "xiaomi"
      // 此channel将使用defaultExtraInfo
    },
    {
      "channel": "meizu"
      // 此channel将使用defaultExtraInfo
    },
    {
      "channel": "wandoujia",
      "excludeDefaultExtraInfo": true
      //强制声明不使用defaultExtraInfo,默认false
    },
    {
      "channel": "myapp",
      "excludeDefaultExtraInfo": true,
      //强制声明不使用defaultExtraInfo,默认false
      "extraInfo": {
        // 尽管exclude default,但也可以继续写入自己的。
        "key": "20161212"
      }
    }
  ]
}

3.3创建一个文本channel_debug填写你需要debug版本的应用名称

meituan # 美团
samsungapps #三星

4.在APP的build.gradle的设置多渠道打包的目录和输出目录

//多渠道打包
walle {
    apkOutputFolder = new File("${project.buildDir}/outputs/channels")
    apkFileNameFormat = '${channel}-${buildType}-${versionName}-${versionCode}-${buildTime}.apk'
    //configFile与channelFile两者必须存在一个,否则无法生成渠道包。两者都存在时优先执行configFile
    channelFile = new File("${project.getProjectDir()}/channel")
    //configFile = new File("${project.getProjectDir()}/config.json")
}

// 根据不同的applicationId来配置不同的channelFile/configFile
afterEvaluate {
    project.android.applicationVariants.all { BaseVariant variant ->
        variant.assemble.doFirst {
            if (variant.applicationId.endsWith(".debug")) {

                project.walle.channelFile = new File("${project.getProjectDir()}/channel_debug")
            }
        }
    }
}

输出目录:

输出目录

在AndroidManifest.xml设置百度统计和友盟统计

    <!-- ================================百度统计开始========================================== -->
        <!-- 您从百度网站获取的APP KEY -->
        <meta-data
            android:name="BaiduMobAd_STAT_ID"
            android:value="自己去百度统计官网注册获取"/>

        <!-- 渠道商编号 -->
        <meta-data
            android:name="BaiduMobAd_CHANNEL"
            android:value="itop"/>
        <!-- android:value="${BAIDU_CHANNEL_VALUE}"/> -->

        <!-- 是否开启错误日志统计,默认为false -->
        <meta-data
            android:name="BaiduMobAd_EXCEPTION_LOG"
            android:value="true"/>

        <!-- 日志发送策略,可选值:APP_START、ONCE_A_DAY、SET_TIME_INTERVAL,默认为APP_START -->
        <meta-data
            android:name="BaiduMobAd_SEND_STRATEGY"
            android:value="APP_START"/>
        <!-- 日志发送策略 为SET_TIME_INTERVAL时,需设定时间间隔(取消下行注释)。取值为1-24的整数,默认为1 -->
        <!-- <meta-data android:name="BaiduMobAd_TIME_INTERVAL" android:value="2" /> -->


        <!-- 日志仅在wifi网络下发送,默认为false -->
        <meta-data
            android:name="BaiduMobAd_ONLY_WIFI"
            android:value="false"/>

        <!-- 是否获取基站位置信息 ,默认为true -->
        <meta-data
            android:name="BaiduMobAd_CELL_LOCATION"
            android:value="true"/>

        <!-- 是否获取GPS位置信息,默认为true -->
        <meta-data
            android:name="BaiduMobAd_GPS_LOCATION"
            android:value="true"/>

        <!-- 是否获取WIFI位置信息,默认为true -->
        <meta-data
            android:name="BaiduMobAd_WIFI_LOCATION"
            android:value="true"/>
        <!-- ================================百度统计结束========================================== -->
<!-- ================================友盟统计开始========================================== -->

        <meta-data
            android:name="UMENG_APPKEY"
            android:value="自己去友盟官网注册获取"/>

        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="myAPP"/> <!-- 自己默认写一个 -->

        <!-- ================================友盟统计结束========================================== -->

权限

   <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.READ_LOGS"/>

在Application中初始化

  /**
     * 设置walle当前渠道
     */
    private void initWalle() {
        String channel = WalleChannelReader.getChannel(this);//获取美团walle当前渠道
        StatService.setAppChannel(this, channel, true);//设置百度统计当前渠道
        UMConfigure.init(this, null, channel, UMConfigure.DEVICE_TYPE_PHONE, null);//设置友盟统计当前渠道

    }
发布了15 篇原创文章 · 获赞 2 · 访问量 8135

猜你喜欢

转载自blog.csdn.net/hzqit520/article/details/90766001