我们这里项目用到的接口,就和大家访问Google一样,也有一个网址,同时在真实项目中,不同的环境,可能有不同的地址;目的是开发,和测试。我们这里只有一个,但我们会给大家演示如何配置两个。
企业开发中通常都有三个环境,分别是dev,qa,prod分别代表开发环境,测试环境,正式环境;部分企业还有一个预上线环境。对于我们App来说他们最大的不同就是端点(endpoint)不同,所以我们这里要配置多个环境,配置有多种方法,可以使用注释,但这样容易出错;也可以将所有API,图片资源地址,一些配置Key放到一个常量类中。
如何配置?
可以使用Android Studio项目提供的productFlavors(产品风味)功能实现,该功能还可以实现渠道包。
定义在哪里?
在app/build.gradle的android方法中添加如下代码:
android {
//默认配置
defaultConfig {
//应用唯一标志
applicationId "com.ixuea.courses.mymusicold"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//开启MultiDex
//multiDexEnabled true
//渠道相关 这个值versionCode是上面的对应的那个变量
//通过这个渠道包,可以知道这个平台有多少人注册,那个平台多少人注册
flavorDimensions "versionCode"
}
//配置不同的环境
productFlavors{
//开发环境
dev {
//API端点
//注意:这里是可以单引号的(也可以双引号),而java语言是不能这样用的(java单引号只能一个字符)
//'"http://api-courses-misuc.ixuea.com/"':单引号里面有个双引号,
//包含双引号的才是他到的值,"http://api-courses-misuc.ixuea.com/"
buildConfigField('String',"ENDPOINT",'"http://dev-my-cloud-music-api-rails.ixuea.com/"')
dimension = minSdkVersion
}
//正式环境
prod {
//API端点
//buildConfigField:方法 后面省略了括号
buildConfigField 'String','ENDPOINT','"http://api-courses-misuc.ixuea.com/"'
//minSdkVersion() 这里省略了(),原本是一个方法
dimension = minSdkVersion
}
}
}
里定义了两个环境,一个是dev,一个是prod,真实项目中还可以添加更多的环境;在不同的环境中定义了API字段。
如何使用?
编译后字段会自动生成在BuildConfig类中。
/**
* 常量类
*/
public class Constant {
/**
* 资源端点
* 哪天不需要BuildConfig.ENDPOINT啦,直接更改Constant这个类就可以,这样就和BuildConfig没有关系
* 替换更加容易
*/
public static final String ENDPOINT = BuildConfig.ENDPOINT;
对应的系统编译里面生成的代码
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.ixuea.courses.mymusic";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "dev";
public static final int VERSION_CODE = 100;
public static final String VERSION_NAME = "1.0.0";
// Fields from product flavor: dev
//编译后生成的字段
public static final String ENDPOINT = "http://dev-my-cloud-music-api-rails.ixuea.com/";
}
切换环境
在可视化Build Variants窗口中选择编译环境,命令下执行相应的任务就行了。
在这里插入图片描述
测试
//测试productFlavors
//获取ENDPOINT常量
LogUtil.d(TAG, "initDatum:" + Constant.ENDPOINT);
确保项目可以运行。
网友评论