通过gradle实现自动切换测试环境和线上环境

我们平时在开发Android项目的时候经常需要在线上和线下测试环境进行切换,比如线上请求的api服务器地址跟线下的api服务器地址是不一样的,如果项目里用了友盟sdk或其他的sdk,线上跟线下用的appkey也是不一样的,当然我们可以手动改这些配置参数,但是这样太繁琐,有了gradle之后我们可以通过gradle的buildConfigField()来定义一个配置参数来动态帮我们切换线上线下的配置参数。

一、在gradle中定义配置参数实现线上线下环境的切换

在项目的gradle中文件中增加

buildTypes {
        ///是否是线上版本,如果是true 打包时会自动请求线上的api
        def isReleaseEnvironment=false;

        debug{
            ///定义常量IS_RELEASE
            if(isReleaseEnvironment){
                buildConfigField("boolean","IS_RELEASE","true")
            }else {
                buildConfigField ("boolean","IS_RELEASE","false")
            }
        }

        release {
            ///定义常量IS_RELEASE
            if(isReleaseEnvironment){
                buildConfigField("boolean","IS_RELEASE","true")
            }else {
                buildConfigField ("boolean","IS_RELEASE","false")
            }
        }
    }

使用在gradle中定义的常量

定义完了之后点击build-rebuild重新编译一下
然后我们直接就可以BuildConfig.IS_RELEASE来获取我们定义的常量的值,最后在代码中根据读取到的值来决定请求线上还是线下的api

二、gradle实现自动切换AndroidManifest.xml中配置的线上和线下友盟 UMENG_APPKEY和UMENG_MESSAGE_SECRET

首先在gradle中定义一个manifestPlaceholders,代码如下

buildTypes {
       def isReleaseEnvironment=false;//是否是线上版本,如果是true 使用线上的友盟key、否则使用测试的key

        release {
            if(isReleaseEnvironment){
                manifestPlaceholders=[UMENG_APP_KEY:"88888888",UMENG_MESSAGE_SECRET:"cccctest"]
            }else {
                manifestPlaceholders=[UMENG_APP_KEY:"66666",UMENG_MESSAGE_SECRET:"bbbbtest"]
            }
        }
        debug {
            if(isReleaseEnvironment){
                manifestPlaceholders=[UMENG_APP_KEY:"88888888",UMENG_MESSAGE_SECRET:"cccctest"]
            }else {
                manifestPlaceholders=[UMENG_APP_KEY:"66666",UMENG_MESSAGE_SECRET:"bbbbtest"]
            }
        }
    }

在AndroidManifest.xml中使用key

data
            android:name="UMENG_APPKEY"
            android:value="${UMENG_APP_KEY}">data>

data
            android:name="UMENG_MESSAGE_SECRET"
            android:value="${UMENG_MESSAGE_SECRET}">data>

这样当我们打包的时候把isReleaseEnvironment的值设置为true就会自动设置线上的友盟的key设置为false就会使用线下的友盟key

你可能感兴趣的:(android)