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;就可以直接得到最大的版本了。

 

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


目录
相关文章
|
4月前
|
数据安全/隐私保护 iOS开发 开发者
hbuilderx打包应用上传到app store构建版本的教程
hbuilderx打包应用上传到app store构建版本的教程
37 0
|
2月前
|
前端开发
最新版本create-react-app 如何使用css-module
最新版本create-react-app 如何使用css-module
16 0
|
3月前
|
移动开发 开发工具 数据安全/隐私保护
iOS APP 版本更新升级教程:如何打包上架新的 APP 版本?
iOS APP 版本更新升级教程:如何打包上架新的 APP 版本?
iOS APP 版本更新升级教程:如何打包上架新的 APP 版本?
|
5月前
|
XML 数据库 数据安全/隐私保护
Android App规范处理中版本设置、发布模式、给数据集SQLite加密的讲解及使用(附源码 超详细必看)
Android App规范处理中版本设置、发布模式、给数据集SQLite加密的讲解及使用(附源码 超详细必看)
45 0
|
5月前
|
前端开发 JavaScript API
【uni-app】【基于jQuery Ajax】[sd.js]最新原生完整版for凯哥API版本
【uni-app】【基于jQuery Ajax】[sd.js]最新原生完整版for凯哥API版本
|
7月前
|
开发工具 开发者
上传了ipa但在苹果App Store中没有看到构建版本的问题
上传了ipa但在苹果App Store中没有看到构建版本的问题
|
7月前
|
编译器
Spartacus 4.3.x 版本导入 Cart 到 App Module 构造函数的错误消息
Spartacus 4.3.x 版本导入 Cart 到 App Module 构造函数的错误消息
51 1
|
8月前
|
移动开发 开发工具 数据安全/隐私保护
iOS APP版本更新升级教程:如何打包上架新的APP版本?
本篇博客将介绍如何快速、简便地完成APP更新升级流程,让你的用户享受到更好的使用体验。使用常用开发工具打包,注意版本号的修改。进入APP页面点击“所有构建版本”选项,这里会显示上传成功的构建版本。输入更新说明,修改APP描述、关键词等,选择是否为新功能。如审核通过则恭喜你,否则根据反馈修改再重新上传提交审核。
|
9月前
|
Web App开发 移动开发
Crack App | 【填坑】某 H5 app 的反调试绕过(Frida 与 Xposed 双版本)
Crack App | 【填坑】某 H5 app 的反调试绕过(Frida 与 Xposed 双版本)
204 0