目的:开发环境和生产环境使用不同的URL,并实现自动切换
步骤:
1、设置modules
的flavors

2、设置成功后modules
的build.gradle
文件中会出现下面的代码
productFlavors {
product {
}
dev {
}
}
Android studio
左边Build Varians
中会出现下面的选项:

3、app
的Build Variant
选项中会出现4个选项devDebug
、devRealse
、productDebug
、peoductRelease
。如果想去除其中的某个的话,可以在build.gradle
中这么设置,比如我想去除devRelease
这个选项:
variantFilter { variant ->
def names = variant.flavors.name
def buildType = variant.buildType.name
if (names.contains("dev") && buildType == "release") {
setIgnore(true)
}
}

没有release选项了
4、上面设置了3中环境,实际上只是生成了BuildConfig.java
文件,

接下来在代码中对环境进行判断
public class APIConstant {
public static String BASE_URL = "https://xxxxxx";
static {
if (BuildConfig.FLAVOR != null && BuildConfig.FLAVOR.equals("dev")) {
BASE_URL = "http://xxx_xxx_x/frontend"; //如果是生产环境,则重新赋值
}
}
public static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json");
}
注:这种方式还可用于多渠道打包
Android Studio
中包名为build.gradle
中的application id
,可以和manifest.xml
中的不一致,manifest.xml
中的包名仅作为R
文件的包名


网友评论