Android多渠道打包之工程外部配置渠道列表(gradle方式)

通常多渠道打包的方式是在在manifest.xml文件中通过meta-data设置渠道,以友盟为例

1.进行UMENG_CHANNEL的配置

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

2.在gradle中替换manifest.xml中声明的占位符

// 友盟多渠道打包
    productFlavors {
        // 360手机助手
        _360 { }
        // 91手机助手
        _91 {}
        // 应用汇
        _yingyonghui {}
        // 豌豆荚
        _wandoujia { }
        // 百度手机助手
        _baidu { }
        ...
    }

    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

其实对productFlavors 的配置还有另一种方式,即:

productFlavors {
        _wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
        _360 {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
        }
    }

这两种方式效果是一样的,只是第一种方式是先声明了一个包含所有市场的数组,然后使用productFlavors.all,统一替换占位符;而下面这种方式是声明市场的时候直接替换,就不用productFlavors.all方法了。两种方法哪种都可以,但是显而易见,如果要打的渠道很多时,上面那种方式更简洁,代码更少。

上面这种情况还有一些不方便,即如果不是开发人员打包需要打包人员修改build.gradle。

如果我们可以把渠道列表提出到外面则可以解决这个问题,我的解决办法如下:

1.在local.properties中配置渠道列表的文件地址
如:channel.file=/Users/user/test/channel
为了方便区分Release和开发环境我还配置了project.branch以及apk文件输出目录apk.dir

2.在build.gradle中读取配置:

ext.apkDir = null
ext.channelFile = "./channel/channel"
ext.branch = "release"
最好在工程中带一个默认的渠道列表,否则如果没有配置渠道列表文件就会有问题

// 加载版本信息配置文件方法
def loadProperties() {
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    apkDir = properties.getProperty('apk.dir')
    def channelFileDir = properties.getProperty('channel.file')
    if(channelFileDir != null) {
        channelFile = channelFileDir
    }
    def dev = properties.getProperty('project.branch')
    if(dev != null) {
        branch = dev
    }
}
//加载预设信息
loadProperties()

3.读取渠道列表打包,在原来 productFlavors中

if(branch.equals("dev")) {
            beta{

            }
        } else {
            file(channelFile).eachLine { channel ->
                "$channel" {

                }
            }
        }

按照上面的步骤就可以实现渠道提到外面随意配置!

浏览 720 次