我们这里项目用到的接口,就和大家访问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);确保项目可以运行。
