一、需要配置的地方,和场景
最近公司开发了一个产品,分别卖给了N个客户,但是每个客户都是独立的,所以就有了N套环境。
而每一套环境都有不同,后台Web 连接, 以及一些图片,文件下载都再不同的服务器上, 所以每次给不同的环境打包的时候都需要分别配置 好几个地方的URL 或者IP。
经常打错包,或者地址配错。 如果你也正遇到这样的项目,那么不防跟着我学会使用Android 上面的.Prorperties 配置文件吧。
二、编写配置信息
如果我们需要配置
UPDATE_PHOTO_URL 修改图片地址
NOTIC_MSAGES_URL 通知地址
IMAGEPAHT 图片地址
几个用户获取图片和通知的信息。
######开发环境配置########
UPDATE_PHOTO_URL_TEST = http://xxx.xxx.xxx/servlet/MobileServlet
NOTICE_MSAGES_URL_TEST = http://xxx.xxx.xxx/msgPushTxt/
IMAGEPATH_TEST = http://xxx.xxx.xx/img/
HOST_TEST = 10.0.0.1
######测试环境配置########
UPDATE_PHOTO_URL_TEST = http://xxx.xxx.xxx/servlet/MobileServlet
NOTICE_MSAGES_URL_TEST = http://xxx.xxx.xxx/msgPushTxt/
IMAGEPATH_TEST = http://xxx.xxx.xx/img/
HOST_TEST = 10.0.0.1
######生产环境配置########
UPDATE_PHOTO_URL_TEST = http://xxx.xxx.xxx/servlet/MobileServlet
NOTICE_MSAGES_URL_TEST = http://xxx.xxx.xxx/msgPushTxt/
IMAGEPATH_TEST = http://xxx.xxx.xx/img/
配置文件里面分别的给这个配置信息 加上 "_TEST"、"_DEBUG"、"_PRO" 来分别的区分 测试环境、开发环境、以及生产环境。
3.使用配置文件
a.首先需要再清单文件AndroidManifest.xml 下面 application 节点下面配置 一个meta-date节点
<!-- 开发模式,debug:调试(开发)模式,test:测试模式,pro:生产模式-->
<meta-data android:value="debug" android:name="DEV_MODEL"/>
Application 如下
<application
android:name="com.MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- 开发模式,debug:调试(开发)模式,test:测试模式,pro:生产模式-->
<meta-data android:value="debug" android:name="DEV_MODEL"/>
这个属性下面的 value 对应的 分别是 debug test pro 就是刚刚我们配置文件里面的 3个环境。
b.创建一个Application 类 并新增方法
/**
* 加载开发环境的配置文件
* @author wgy
* **/
private void loadConfig(){
InputStream in = null;
try {
in = getResources().openRawResource(R.raw.config);
config.load(in);
} catch (IOException e) {
Log.e(TAG, "load properties error",e);
}finally{
if(in!=null){
try {
in.close();
} catch (IOException e) {
}
}
}
}
并且在 Application 的onCreate 方法时候 需调用加载配置文件方法( loadConfig() );
/**
* 获取开发模式
* @return 配置文件对应 的值。
* **/
public String getDevModelValue(String key){
ApplicationInfo appInfo=null;
String msg = "DEBUG";//默认是开发模式
try {
//获取meta-data 属性
appInfo= this.getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
//获取meta-data 下面DEV_MODEL 的值
msg = appInfo.metaData.getString("DEV_MODEL");
} catch (NameNotFoundException e) {
Log.e(TAG, "获取开发模式失败", e);
}
Properties config = new Properties();
//将Applicaition里面配置的(pro,test,debug)拼接成 UPDATE_PHOTO_URL _TEST
String configKey = key+"_"+ msg;
//获取配置文件对应的值
return config.getProperty(configKey.toUpperCase());
}
c.使用Application 新添加的getDevModelValue 方法
String UPDATE_PHOTO_URL=MyApplication.getInstance().getDevModelValue("UPDATE_PHOTO_URL");// 图片上传地址
String NOTICE_MSAGES_URL=MyApplication.getInstance().getDevModelValue("NOTICE_MSAGES_URL");// 通知获取地址
使用getDevModelValue 方法的时候 只需要 传入对应的前缀"UPDATE_PHOTO_URL" 、 "NOTICE_MSAGES_URL"参数,getDevModelValue 方法会自动去获取配置在AndroidManifest.xml 下面 application 节点下 meta-date “DEV_MODEL” 的值 并拼接为:"UPDATE_PHOTO_URL_DEBUG" 、 "NOTICE_MSAGES_URL_DEBUG"等,去获取配置文件下面相应的值。
二、总结