APP版本更新中比较APP的版本号高低并返回最高版本

简介: APP版本更新中比较APP的版本号高低并返回最高版本

背景

App检查更新功能,每次进行功能迭代准备上线时,在后台配置一个新的版本号并上传最新的apk,然后在App点击检查更新时返回最新的版本号。

版本号是非空字符串并且只包含数字和 . 字符。如1.2.33这个 '.' 字符不表示小数点,用于分隔数字序列。

方案一

对版本号进行两两比较,判断其大小,得出最高版本。

版本号的特点,假设版本号段数不固定,可能是三段,也可能是四段。每一段的数字位数也不固定,总之从高位往低位判断,数字大的版本号大。

package com.lingyejun.dating.chap11.toutiao;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
 * @Author: lingyejun
 * @Date: 2022/5/1
 * @Describe:
 * @Modified By:
 */
public class CompareVersionNumbers {
    public static int compareVersions(String version1, String version2) {
        String[] levels1 = version1.split("\\.");
        String[] levels2 = version2.split("\\.");
        int length = Math.max(levels1.length, levels2.length);
        for (int i = 0; i < length; i++) {
            Integer v1 = i < levels1.length ? Integer.parseInt(levels1[i]) : 0;
            Integer v2 = i < levels2.length ? Integer.parseInt(levels2[i]) : 0;
            // 对每一段的版本号从高位到低位进行判断
            int compare = v1.compareTo(v2);
            // 如果当前段版本号相同,则继续比较下一段,若当前段能判断出版本高低则直接返回
            if (compare != 0) {
                return compare;
            }
        }
        return 0;
    }
    public static void main(String[] args) {
        String version1 = "1.23.789";
        String version2 = "1.33.6678";
        int compare = compareVersions(version1, version2);
        System.out.println(compare);
        String version3 = "11.1.2";
        List<String> versionList = Arrays.asList(version1, version3, version2);
        List<String> sortedVersionList = versionList.stream()
                .sorted(CompareVersionNumbers::compareVersions)
                .sorted(Comparator.reverseOrder())
                .collect(Collectors.toList());
        System.out.println(sortedVersionList);
        String maxVersion = versionList.stream()
                .sorted(CompareVersionNumbers::compareVersions)
                .sorted(Comparator.reverseOrder())
                .findFirst().orElse(null);
        System.out.println(maxVersion);
    }
}

方案二

App在开发过程中会有自己的版本控制,每次打完包时会标注此包对外发布的版本号,还有一个版本编码(数字类型)随着版本号的增加此数字也是递增的。我们可以在后台维护的时候把版本号和版本编码都维护进去。我们在选取最高版本的时候,直接查数据库select max(version_numer)  from app_version;就可以直接得到最大的版本了。

 

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。


目录
相关文章
|
7月前
|
iOS开发 MacOS
如何指定下载不同版本macOS app
本文介绍了多种下载和安装 macOS 的方法,包括使用终端命令下载指定版本的 macOS App 或 PKG 文件,以及通过脚本工具如 installinstallmacos.py 和 fetch-installer-pkg 实现自动化下载。同时还讲解了如何将 macOS 安装程序制作成可启动 U 盘,适用于系统重装或部署场景。
|
9月前
【Function App】在PowerShell Function中指定特殊的Microsoft.Graph.Users版本
在Azure Function App中运行PowerShell Function时,通过Requirements.psd1文件管理模块版本。若需将“Microsoft.Graph.Users”从最新版2.26.0改回2.23.0以避免冲突,可通过以下步骤解决:1) 在requirements.psd1中明确指定版本为2.23.0 2) 在profile.ps1中添加`Import-Module Microsoft.Graph.Users -RequiredVersion 2.23.0`语句。此方法确保加载特定版本模块
169 18
|
12月前
|
应用服务中间件 Linux nginx
【Azure App Service】基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?
基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?Web App Linux 默认使用的 Nginx 版本是由平台预定义的,无法更改这个版本。
320 77
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
803 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
183 0
|
开发工具 iOS开发 MacOS
【Mac_mistake】app不能安装在未命名需要OSv11.13或更高版本
【Mac_mistake】app不能安装在未命名需要OSv11.13或更高版本
1279 0
|
人工智能
魔搭多模态AI单词助记&通义APP即时口语练习,你从未体验过的全新版本!
首次接触魔搭多模态AI单词助记工具让我颇感惊喜。传统背单词方式枯燥低效,而该工具通过生成关联图像、短语或故事,让记忆变得生动有趣。访问[Word-wizard](https://modelscope.cn/studios/makabakaing/Word-wizard)体验其图文记忆和视觉学习功能。目前图文记忆功能似乎存在问题,但视觉学习功能仍可正常使用,能识别图片特征并生成释义和例句,辅助学习效果不错。此外,可通过通义APP实现即时口语练习,尽管缺乏上下文记忆功能,但仍是一个优秀的练习工具。
|
开发者
【Azure Logic App】中国区标准版本的逻辑应用(Standard Logic App)无法查看历史执行记录的解决之道
【Azure Logic App】中国区标准版本的逻辑应用(Standard Logic App)无法查看历史执行记录的解决之道
183 0
|
Android开发
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
2033 0