在进行环境切换时候,我们可以有多种方式,比如
- 直接适用常量管理类
- 利用Gradle实现app的环境分离
- 使用配置文件的形式
其中,
第一种方式比较适合环境稳定/单一的情况,如果涉及多种环境,比如Alpha/UAT/Production等的情况,管理起来就不是很方便了,所以要考虑第二和第三种方式,用Gradle的方式,可以参考Multi-flavor variants,下面以properties文件为例.
1.在assets文件夹下,新建环境配置文件apiurl.properties,如下:
以Alpha和UAT为例,切换时只需注释掉不用的环境,即可.
#### Alpha ####
#versionName=A
#memberApp=http://xxx.alpha.com/member-app/v1/api
#designApp=http://xxx.alpha/design-app/v1/api
#### UAT ####
versionName=A
memberApp=http://xxx.uat.com/member-app/v1/api
designApp=http://xxx.uat.com/design-app/v1/api
2. 读取apiurl.properties
/**
* 运行环境的管理切换类.
* @author liuhea
* @date 2016-6-6 .
*/
public class ApiManagerV2 {
public static final String PROPERTY_PATH = "apiurl.properties";
private static final String MEMBER_APP = "memberApp";
private static final String DESIGN_APP = "designApp";
private static final String VERSION_NAME = "versionName";
/*登录地址*/
public final static String LOGIN_PATH = getUrlPath(LOGIN_URL);
/*member-app*/
public final static String MEMBER_PATH = getUrlPath(MEMBER_APP);
/*design-app*/
public final static String DESIGN_PATH = getUrlPath(DESIGN_APP);
/**
* 获取配置文件中对应的URL地址
*
*/
private static String getUrlPath(String propKey) {
String urlPath = (String) PropUtil.loadAssetsProperties(AdskApplication.getInstance(), PROPERTY_PATH).get(propKey);
return urlPath;
}
}
/**
* 读取配置文件的工具类 .
* @author liuhea .
* @date 2016-6-6 .
*/
public class PropUtil {
/**
* 读取assets文件夹下的文件
*/
public static Properties loadAssetsProperties(Context context, String arg) {
Properties prop = null;
prop = new Properties();
//first load default properties
try {
prop.load(context.getAssets().open(arg));
} catch (IOException e) {
e.printStackTrace();
}
return prop;
}
/**
* 读取Res文件夹的文件
*/
public static Properties loadResProperties(Context context, int id) {
Properties prop = new Properties();
//first load default properties
try {
prop.load(context.getResources().openRawResource(id));
} catch (IOException e) {
e.printStackTrace();
}
return prop;
}
}