Android Studio 一键切换测试和正式环境

背景

开发中我们经常会遇到这样的情况,比如:

  • 几乎所有的项目都会有测试环境和正式环境,有的甚至的还有开发环境,不同的环境有不同的 API 根地址,测试环境和正式环境每次打包都需要手动去更改 API 根地址;
  • 很多第三方SDK比如百度地图并没有区分测试环境和正式环境,那么我们就需要去申请两个不同的 APP KEY 标识(因为 APP KEY 标识是根据包签名来区分的),而且很多 APP KEY 都只能在 manifest 中配置,每次更改环境都需要去手动更改 APP KEY, 一旦第三方包比较多,那叫一个麻烦了啊。。。最重要的是万一你少改了一个或复制错了一个,一旦上线了就成了悲剧。。。悲剧。。。悲剧。。。
  • 别问我为什么悲剧,我也不知道。

    解决方法

以 API 根地址和百度地图 KEY 来举例说明

1、配置 gradle.properties

BASE_API_DEBUG=\"http://api.android.com\"
BASE_API_PRODUCT=\"http://api.android.test\"
BAIDU_APPKEY_VALUE_DEBUG=xrAslSGF7xjSLI2kFFgQb1Dl
BAIDU_APPKEY_VALUE_PRODUCT=aMfi0c1f3oeefjmMpmEEeGPs

2、配置项目的 build.gradle 文件

    buildTypes {
        release {
            buildConfigField("String", "BASE_API", project.BASE_API_PRODUCT)
            manifestPlaceholders = [BAIDU_APPKEY_VALUE: project.BAIDU_APPKEY_VALUE_PRODUCT]
      }
        debug {
            buildConfigField("String", "BASE_API", project.BASE_API_DEBUG)
            manifestPlaceholders = [BAIDU_APPKEY_VALUE: project.BAIDU_APPKEY_VALUE_DEBUG]
        }
    }

buildConfigField(“String”, “BASE_API”, project.BASE_API_PRODUCT)

BASE_API_PRODUCT 和 BASE_API_DEBUG 就是我们在 gradle.properties 中定义的正式环境和测试环境的 API 根地址。这一行代码编译后会在 BuildConfig.java 文件中生成下面的代码。

public static final String BASE_API = “http://api.android.com“; 正式环境
public static final String BASE_API = “http://api.android.test“; 测试环境

这样我们就可以直接调用 BuildConfig.BASE_API 来使用 API 根地址了。

manifestPlaceholders = [BAIDU_APPKEY_VALUE: project.BAIDU_APPKEY_VALUE_PRODUCT]

BAIDU_APPKEY_VALUE_PRODUCT 是我们在 gradle.properties 中定义的百度地图 APP KEY, 当然了,如果你有多个 SDK 的 KEY , 可以这样写:
 manifestPlaceholders = [BAIDU_APPKEY_VALUE     : project.BAIDU_APPKEY_VALUE_PRODUCT
                         , GETUI_APPID_VALUE    : project.GETUI_APPID_VALUE_PRODUCT
                         , GETUI_APPKEY_VALUE   : project.GETUI_APPKEY_VALUE_PRODUCT
                         , GETUI_APPSECRET_VALUE: project.GETUI_APPSECRET_VALUE_PRODUCT
                         , QQ_SHARE_APP_ID_VALUE: project.QQ_SHARE_APP_ID_PRODUCT]

顾名思义, manifestPlaceholders 就是配置在 manifest 中引用的变量的。
配置完之后,我们就可以在 manifest 中使用了。

     <meta-data
           android:name="com.baidu.lbsapi.API_KEY"
            android:value="${BAIDU_APPKEY_VALUE}" />
     <meta-data
           android:name="PUSH_APPID"
           android:value="${GETUI_APPID_VALUE}" />
     <meta-data
           android:name="PUSH_APPKEY"
           android:value="${GETUI_APPKEY_VALUE}" />
     <meta-data
           android:name="PUSH_APPSECRET"
           android:value="${GETUI_APPSECRET_VALUE}" />

不管多少个 KEY , 多少个变量,BOSS 再也不用担心我们换错 KEY 啦~

Smile Wei wechat
请扫码关注我的微信公众号