gradle动态配置manifest,多厂商不同icon,appname,主题色等等,一次性搞定

gradle动态配置manifest,多厂商不同icon,appname,主题色等等,一次性搞定(二)

相信大家在开发过程中都会遇到这样的问题,集成一些第三方的sdk,比如百度地图,个推,环信,友盟等,往往会有几个不同环境的配置,dev(开发环境),test(测试环境),product(生产环境),那么每次切换环境的时候都要去修改一遍对应的配置是不是很烦呢,这种没有技术含量,改起来麻烦,万一小手一抖改错了呢。这里教你通过配置,用最少的改动完成环境配置的切换

动态配置manifest

manifest中key的配置

 
 
 

这里以友盟,极光,百度地图为例

那么我们要怎么来配置呢

1.首先在项目根目录下创建一个.properties文件,比如我创建了一个叫config.properties,也可以用现有的,在项目根目录有个gradle.properties文件

2.在config.properties中添加你的配置,以key.type=value的键值对形式,如:

这里用百度地图和极光举例,这里配置了三个环境下的

# 百度地图
baiduapikey.product=123123
baiduapikey.dev=234234
baiduapikey.test=345345

# 极光
jpushappkey.product=123123
jpushappkey.test=234234
jpushappkey.dev=345345

3.在build.gradle中配置

//环境,只需要修改这个字段就可以了
String environment = "product"
Properties properties = new Properties()
properties.load(project.rootProject.file("config.properties").newDataInputStream())
//环境 product
String pack = properties.getProperty("pack", environment)

defaultConfig {
        applicationId "com.test.demo"
        minSdkVersion 18
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        manifestPlaceholders = [
                GETUI_APP_ID    : properties.getProperty("getuiapiid." + pack),
                GETUI_APP_KEY   : properties.getProperty("getuiappkey." + pack),
                GETUI_APP_SECRET: properties.getProperty("getuiappsecret." + pack),
                BAIDU_API_KEY   : properties.getProperty("baiduapikey." + pack)
        ]
        //这里就是获取你在config.properties配置的值,key.type=value中的value,pack就是对应环境
        //这里的JPUSH_KEY_VALUE , BAIDU_API_KEY   对应的就是你在manifest中自己定义的参数值 ${JPUSH_KEY_VALUE} , ${BAIDU_KEY_VALUE}
        JPUSH_KEY_VALUE  : properties.getProperty("jpushappkey." + pack),
        BAIDU_API_KEY    : properties.getProperty("baiduapikey." + pack)
}

gradle配置代码中的配置

有些配置是动态集成在代码中的,比如现在的微信分享,当然也可以配置的url,一些其他的配置

1.同上,我们用的还是config.properties

2.在文件按照键值对的形式创建key值,注意这里有一点不同的地方,如果配置的key是字符串,需要自己添加引号(别忘了转移字符哦)

# 微信
weixinappid.product=\"123123asdf\"

3.在gradle文件中添加这个参数

buildConfigField "String", "WX_APP_ID", properties.getProperty("weixinappid." + pack)

4.注意,这时候你需要rebuild你的工程,使用时直接调用:BuildConfig.WX_APP_ID就行了

/**
 * 微信App_ID
**/
public static String WX_APP_ID = BuildConfig.WX_APP_ID;

是不是很帅!!!

End

当你完成这些配置,真正切换环境就快了,只要修改一个值就行啦
build.pradle中读取配置文件的时候,指定环境,就OK了

//环境,只需要修改这个字段就可以了
String environment = "product"      //product改成test,dev就是相应环境下您的配置了
Properties properties = new Properties()
properties.load(project.rootProject.file("config.properties").newDataInputStream())

//环境 product
String pack = properties.getProperty("pack", environment)

在github上写了一个简单的实例

  • 模拟苹果,香蕉,橙子三家不同厂商,针对不同厂商具有不同的logo,icon,名称,主题色,官网地址等在一份代码下进行配置的例子
  • 具体可以看源码,比较简单
gradle.gif

github

你可能感兴趣的:(gradle动态配置manifest,多厂商不同icon,appname,主题色等等,一次性搞定)