/**
* 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的值。
*/
fun checkNeedUpgrade(appVersion: String?, latestVersion: String?): Boolean {
if (appVersion.isNullOrBlank() || latestVersion.isNullOrBlank()) {
return false
}
val oldAppVer = appVersion.split(".")
val latestAppVer = latestVersion.split(".")
val minSize = min(oldAppVer.size, latestAppVer.size)
for (i in 0 until minSize) {
if (oldAppVer[i].isNotBlank() && latestAppVer[i].isNotBlank()) {
val oldVer: Int = oldAppVer[i].toIntOrNull() ?: -1
val lastVer: Int = latestAppVer[i].toIntOrNull() ?: -1
if (lastVer > oldVer) return true else if (lastVer < oldVer) return false
}
}
if (latestAppVer.size > minSize) {
for (i in minSize until latestAppVer.size) {
if ((latestAppVer[i].toIntOrNull() ?: -1) > 0) {
return true
}
}
}
return false
}
Bug标题 算不上Bug,一个细节问题
AppUpdate参数设置 截图
DownloadManager
配置复现步骤 如果版本判断是VersionName进行判断的话,此时并没有最新VersionCode,没办法传入,但是设置了强制更新的情况下,弹窗不会显示,我看了源码,弹窗显示的逻辑是传入VersionCode,自动判断需要更新才会显示,我觉得这个逻辑是否这样更合理,配置化或者只要更新都需要弹窗,不然强制更新就不强制了,变成了强制下载,用户依旧能够继续使用App,我目前处理逻辑就是按照截图的做法,传入一个Int的最大值,然后判断逻辑放在了外部把他包起来,但是这一步放在框架里面显得更简洁
错误Logcat日志截图 日志截图
软件版本信息
额外有用的信息 额外补充一个判断VersionName对比是否更新的方法