版本号对比的工具类

简介: 版本号对比的工具类

Android开发过程中,我们会遇到应用内升级的需求,一般是服务端接口返回对应的版本号,我们用这个版本号跟当前apk版本号进行对比,来决定是否需要进行升级操作。

一般而言我们的版本号是1.0.0这种格式的,当然了,也会有2.01.0.0.11这种格式的。比较通用的规则是我们优先比较前面的主版本号,主版本号相同时才会比较后面的福版本号。

我们期望的结果是,1.0.9 < 1.1.01.0.0 vs 2.01.9.9 < 1.9.9.11.0.0 > 0.0.1

接下来我们看下具体实现:

/**
 * app_version:应用当前版本号
 * latest_android_version:服务端返回的apk版本号
 * app_version vs latest_android_version
 * 1.0.9 vs 1.1.0  return true
 * 1.0.0 vs 2.0   return true
 * 1.9.9 vs 1.9.9.1  return true
 * 1.0.0 vs 0.0.1  return false
 *
 * @return latest_android_version的中是否"大于"app_version的值。
 */
public static boolean checkNeedUpgrade(String app_version, String latest_android_version) {// 检测是否需要更新。
    if (app_version == null || app_version.length() == 0 || latest_android_version == null || latest_android_version.length() == 0) {
        return false;
    }

    String[] oldAppVer = app_version.split("\\.");
    String[] latestAppVer = latest_android_version.split("\\.");
    int minSize = Math.min(oldAppVer.length, latestAppVer.length);
    for (int j = 0; j < minSize; j++) {
        if ((oldAppVer[j] != null && oldAppVer[j].length() > 0) && (latestAppVer[j] != null && latestAppVer[j].length() > 0)) {
            int oldVal;
            int latestVal;
            try {
                oldVal = Integer.valueOf(oldAppVer[j]);
                latestVal = Integer.valueOf(latestAppVer[j]);
            } catch (Exception e) {
                oldVal = -1;
                latestVal = -1;
            }
            if (latestVal > oldVal) {
                return true;
            } else if (latestVal < oldVal) {
                return false;
            }
        }
    }
    if (latestAppVer.length > minSize) {
        return true;
    }
    return false;
}

进行验证:

public static void main(String[] args) {
    boolean result = checkNeedUpgrade("1.0.9", "1.1.0");
    System.out.println(result);
    boolean result1 = checkNeedUpgrade("1.0.0", "2.0");
    System.out.println(result1);
    boolean result2 = checkNeedUpgrade("1.0.9", "1.0.9.1");
    System.out.println(result2);
    boolean result3 = checkNeedUpgrade("1.0.0", "0.0.1");
    System.out.println(result3);
    boolean result4 = checkNeedUpgrade("1.0.0", "");
    System.out.println(result4);
}

output: 符合期望。

true
true
true
false
false
相关文章
|
Android开发
Android--文件或目录拷贝、复制、粘贴
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/53762886 需要给 AndroidManifest.
3000 0
|
JavaScript 前端开发 搜索推荐
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
346 0
|
小程序 前端开发 JavaScript
宠托师微信小程序---开题报告分享
宠托师微信小程序---开题报告分享
403 0
|
弹性计算 应用服务中间件 Linux
双剑合璧:在同一ECS服务器上共存Apache与Nginx的实战攻略
在ECS服务器上同时部署Apache和Nginx的实战:安装更新系统,Ubuntu用`sudo apt install apache2 nginx`,CentOS用`sudo yum install httpd nginx`。配置Nginx作为反向代理,处理静态内容及转发动态请求到Apache(监听8080端口)。调整Apache的`ports.conf`监听8080。重启服务测试,实现两者高效协同,提升Web服务性能。记得根据流量和需求优化配置。【6月更文挑战第21天】
1371 1
|
Go 开发工具 git
在Qemu+ARM上运行Minix3内核
在Qemu+ARM上运行Minix3内核
|
存储 SQL 弹性计算
元数据驱动的 SaaS 架构与背后的技术思考
在抽象能力以及沉淀了产品的基础上,把所承载和沉淀的业务能力快速输出,贡献给整个行业。
10413 108
元数据驱动的 SaaS 架构与背后的技术思考
|
机器学习/深度学习 数据可视化 大数据
驾驭股市大数据:Python实战指南
【10月更文挑战第1天】随着信息技术的发展,投资者现在能够访问到前所未有的海量金融数据。本文将指导您如何利用Python来抓取当前股市行情的大数据,并通过分析这些数据为自己提供决策支持。我们将介绍从数据获取到处理、分析以及可视化整个流程的技术方法。
827 2
|
算法
版本号大小比较算法
版本号之间比较大小,本质上是比较字符串之间的关系。这里给定两个版本号,你一定能迅速地区分出大小: 0.0.2 0.0.3 想要让计算机程序分辨她们的关系,可以直接使用strcmp()函数获取返回值,如果你在 iOS 系统下编程,也可以使用 NSString 类提供的- (NSComparisonResult)compare:(NSNumber *)decimalNumber方法。
1820 0
|
移动开发 开发框架 小程序
UniApp与微信小程序介绍及区别
UniApp与微信小程序介绍及区别
1459 0
|
存储 Kubernetes 对象存储
Kubernetes版本对接对象存储几种方案
Kubernetes版本对接对象存储几种方案