发布APK:改一下versionName即可切换网络环境

项目环境切换问题:

遇到的问题:

1.项目网络环境很多,包括5楼环境(网络地址和MQTT地址不同)、12楼环境(网络地址和MQTT地址相同)、新部署环境等,每次打包修改地址容易出错且耗时

2.APP的自动更新依赖于版本名和VersionCode,项目依赖的AAR包经常更新

解决方案:

利用gradle构建工具的特性,修改build.gradle脚本,实现网络环境根据版本名自动切换,这样查看APK文件名就能知道网络环境,且不需要反复修改地址代码

使用manifestPlaceholders控制网络切换:

image-20220113133919875

image-20220113134029429

效果:

以前切换网络环境、切换AAR、发布版本需要修改内容:

image.png image-20220113095142251

image.png

image-20220113095342189

需要修改4个文件的6处内容

重构后切换网络环境、切换AAR、发布版本需要修改内容:

image.png

只需修改一个文件的两处内容:一个是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自动配置网络--------------------
复制代码

おすすめ

転載: juejin.im/post/7052636741462655012