项目环境切换问题:
遇到的问题:
1.项目网络环境很多,包括5楼环境(网络地址和MQTT地址不同)、12楼环境(网络地址和MQTT地址相同)、新部署环境等,每次打包修改地址容易出错且耗时
2.APP的自动更新依赖于版本名和VersionCode,项目依赖的AAR包经常更新
解决方案:
利用gradle构建工具的特性,修改build.gradle脚本,实现网络环境根据版本名自动切换,这样查看APK文件名就能知道网络环境,且不需要反复修改地址代码
使用manifestPlaceholders控制网络切换:
效果:
以前切换网络环境、切换AAR、发布版本需要修改内容:
需要修改4个文件的6处内容
重构后切换网络环境、切换AAR、发布版本需要修改内容:
只需修改一个文件的两处内容:一个是AAR版本,一个是版本名
版本号、AAR依赖、网络环境会自动根据以上两处进行切换,只需根据注释修改
代码实现
1.在manifest文件的Application标签内增加:
<meta-data
android:name="network_env"
android:value="${network_env}" />
2.在java代码中增加:
public static int getMetaDataInt(String metaName, int defaultValue) {
try {
return MyApplication.getInstance().getPackageManager()
.getApplicationInfo(MyApplication.getInstance().getPackageName(), PackageManager.GET_META_DATA)
.metaData.getInt(metaName, defaultValue);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return defaultValue;
}
}
3.在app的build.gradle中使用:
//----------------------根据versionName自动配置网络->->->->->->-------------------
def hospital_net = 0, floor_12 = 1, new_env = 2
def network_env
if (versionName.toString().startsWith("2")) {
network_env = floor_12
} else if (versionName.toString().startsWith("3")) {
network_env = new_env
} else {
network_env = hospital_net
}
manifestPlaceholders = [network_env: network_env,]
versionName '1.2.04' // 1开头是院内环境,2开头就是12楼环境,3开头是新部署环境
//------<-<-<-<-<-<-----根据versionName自动配置网络--------------------
本文转自 https://juejin.cn/post/7052636741462655012,如有侵权,请联系删除。