项目中用到了多渠道打包,由于各个渠道对应了单独的渠道号,和签名密钥(或者说加密用的盐),但是又需要在编译时动态替换代码里的参数配置。我把这些需要配置的内容转移到了build.gradle里,当然,也可以转移到工程的build.gradle,大同小异,为了操作简单,这里贴出我自己用的方法。
主要技术点是BuidConfig的使用。
productFlavors {
test900 {
buildConfigField 'String', 'CHANNEL_SPID', '"900"'
buildConfigField 'String', 'CHANNEL_SALT', '"290e0d6629511568"'
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "900"]
}
test901 {
buildConfigField 'String', 'CHANNEL_SPID', '"901"'
buildConfigField 'String', 'CHANNEL_SALT', '"92d7037433951369"'
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "901"]
}
test801 {
buildConfigField 'String', 'CHANNEL_SPID', '"801"'
buildConfigField 'String', 'CHANNEL_SALT', '"73a40d65fd7d07af"'
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "801"]
}
test807 {
buildConfigField 'String', 'CHANNEL_SPID', '"807"'
buildConfigField 'String', 'CHANNEL_SALT', '"c5c4e7c91d272b73"'
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "807"]
}
test809 {
buildConfigField 'String', 'CHANNEL_SPID', '"809"'
buildConfigField 'String', 'CHANNEL_SALT', '"37a1efd05e990e04"'
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "809"]
}
……
}
其中 manifestPlaceholders属性替换的是清单文件里的
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"></meta-data>
我们在代码中需要配置参数的地方这样写:
//SysConfig.SPID和SysConfig.SALT是全局的静态常量
SysConfig.SPID = BuildConfig.CHANNEL_SPID;
SysConfig.SALT = BuildConfig.CHANNEL_SALT;