关于flutter:flutter版本更新常见问题大盘点

前言

在2020年新冠疫情的时候,我宅在家中鸿鹄之志,于是乎我写了一个flutter的版本更新插件: flutter_xupdate, 并且将其公布在了Google建设的Dart插件平台上,一年以来收到的反应还算不错,具体可看下图所示:

但与此同时,也收到了很多使用者的疑难.

为此,我简略看了一下问题,发现使用者之前可能压根就没有做过Android原生开发,对Android的一些基础知识十分不足,就会导致很多问题.

这里,为了可能让大家更好地去应用flutter_xupdate实现一键版本更新,我顺便为大家盘点了应用过程中可能呈现的几大问题,为大家提前排排雷.不仅如此,我还顺便录了一期视频,喜爱看视频的小伙伴是不是连忙三连反对一下呢?

视频地址如下: https://www.bilibili.com/video/BV1gy4y1g7pB/

https://www.bilibili.com/vide…


常见问题

好了,言归正传,让咱们简略瞧一瞧,常见的问题都有哪些?

  • 1.无奈显示版本更新弹窗。
  • 2.版本更新提醒显示异样。
  • 3.下载结束无奈装置更新。
  • 4.强制更新不起作用。
  • 5.国际化问题。

上面我将一一为大家做出解答.


无奈显示版本更新弹窗

呈现无奈显示版本更新弹窗的问题可能有多种状况. 次要的表现形式是: 更新产生报错或者显示以后无版本更新.

1.接口的问题

前提条件: 应用的框架提供的默认接口(默认更新).

申请的url没有返回默认格局的json,那样json序列化就会有问题,导致版本信息获取失败,无奈判断更新状态.

因为flutter_xupdate底层调用的是XUpdate, 其默认json格局如下所述:

{
  "Code": 0, //0代表申请胜利,非0代表失败
  "Msg": "", //申请出错的信息
  "UpdateStatus": 1, //0代表不更新,1代表有版本更新,不须要强制降级,2代表有版本更新,须要强制降级
  "VersionCode": 3, //本地也会对版本号进行校验,确保降级的时候,版本号自增
  "VersionName": "1.0.2",
  "ModifyContent": "1、优化api接口。\r\n2、增加应用demo演示。\r\n3、新增自定义更新服务API接口。\r\n4、优化更新提醒界面。",
  "DownloadUrl": "https://raw.githubusercontent.com/xuexiangjys/XUpdate/master/apk/xupdate_demo_1.0.2.apk",
  "ApkSize": 2048
  "ApkMd5": "..."  //利用apk的md5值没有的话,就无奈保障apk是否残缺,每次都会从新下载。框架默认应用的是md5加密。
}

以上字段有任何一个不合乎的都有可能导致json解析失败,无奈显示版本更新弹窗. 除非你应用自定义接口或者间接传入UpdateEntity进行更新.

版本号的问题

前提条件: 应用的框架提供的默认接口(默认更新).

同样的, 应用的默认接口,返回的json格局也失常,也能失常解析, 唯独是这个返回的VersionCode没有自增,导致本地版本号更新校验失败,无奈显示版本更新弹窗.

混同打包的问题

前提条件: 应用的框架提供的默认接口(默认更新),且debug运行一切正常.

呈现这种状况, 次要是因为android原生我的项目中设置了代码混同. 然而应用flutter build apk --release进行打包, 混同配置并不会失效(因为该指令默认应用的是R8压缩,会有问题)。

这里有三个办法能够解决:

  • 1.应用flutter build apk --no-shrink指令代替。
  • 2.被动敞开R8压缩,应用D8压缩进行代替。办法就是进入到我的项目的android目录下,批改gradle.properties如下:
org.gradle.jvmargs=-Xmx1536M
# 开启D8压缩
android.enableD8=true
android.useAndroidX=true
android.enableJetifier=true
# 敞开R8压缩
#android.enableR8=true
  • 3.间接应用android的原生打包形式进行打包。办法就是进入到以后我的项目的android目录下,应用./gradlew assembleRelease命令进行打包。

版本更新提醒显示异样

前提条件: 应用自定义更新弹窗款式, 设置了topImageRes属性.

呈现的景象个别是在debug下失常显示,然而在release下却显示异样,详情如下:

呈现这种问题, 次要起因是更新弹窗的顶部款式自定义应用的是反射的援用形式,所以在打release包的时候,如果咱们不设置shrinkResources为false的话,打包程序就会默认革除你自定义的顶部图片,导致在release下图片不显示。

所以这个时候,咱们只须要把shrinkResources显示设置为false就能够了, 具体可参考下图:

下载结束无奈装置更新

呈现下载结束无奈装置更新的问题可能有多种状况. 次要的表现形式是: 无奈进入到利用装置页面或者提醒装置失败(签名不统一/文件解析失败).

1.apk下载的问题

如果apk没有被残缺公开下来的话,或者下载下来的apk就是受损无奈装置的,是必定没法失常装置的.

所以这里咱们能够先开启debug日志,而后获取到下载的apk门路,而后找到指定的文件关上看一下是否失常装置.(首先保障下载的文件是正确的).

2.MD5值设置的问题

留神这里的MD5值指的是利用APK文件的MD5值,而非应用签名文件的MD5值!!

之所以设置MD5值下载校验,就是为了避免文件下载被人篡改或者不残缺,所以框架才会去对下载的APK进行MD5值的校验.

但很多人并不理解这其中的原理,所以首次应用的时候,很容易设置MD5的值是利用签名文件的MD5值,这就导致MD5值校验失败,利用无奈进入到利用装置页面.

3.签名的问题

置信做过Android原生开发的人都晓得,同一个包名下的利用,是不能够间接笼罩装置(更新降级)不同签名的利用的. 同包名的利用只能够笼罩装置雷同签名的利用apk.

如果你debug的时候没有配置和release雷同的签名,那么是不能够间接笼罩降级到release包上的.

4.设施终端的问题

因为Android的设施终端的rom以及版本都各不相同,可能在某些定制的rom机器上应用通用的apk装置形式并不起作用. 这种问题呈现的概率绝对较低,当上述3点都没有问题的话,能够尝试应用不同机型的机器来尝试是否装置,以排除特定设施机型的问题.

强制更新不起作用

前提条件: 应用自定义接口或者间接传入UpdateEntity进行更新.

这是因为UpdateEntity对象的isForceisIgnorable属性是互斥的.如果设置了isIgnorabletrue,这个时候再设置isForcetrue那么isForce就会生效.因为强制更新的版本是不可能可疏忽的,而可疏忽的版本更新也不可能是强制更新的.

国际化问题

因为flutter_xupdate底层调用的是XUpdate原生库, 更新UI是原生写的,因而要实现多语言国际化的话,须要应用原生的国际化进行配置.

错误码

最初附上常见的错误码,不便debug调试的时候发现问题.

错误码 备注
2000 查问更新失败
2001 没有wifi
2002 没有网络
2003 正在进行版本更新
2004 无最新版本
2005 版本查看返回空
2006 版本查看返回json解析失败
2007 曾经被疏忽的版本
2008 利用下载的缓存目录为空
3000 版本提醒器异样谬误
3001 版本提醒器所在Activity页面被销毁
4000 新利用安装包下载失败
4001 读写权限申请失败
4002 勾销下载
5000 apk装置失败
5100 未知谬误

最初

以上就是我整理出来的全部内容, 喜爱的小伙伴肯定要记得去我的项目的主页: https://github.com/xuexiangjys/flutter_xupdate star反对一下哦~

我是xuexiangjys,一枚酷爱学习,喜好编程,致力于Android架构钻研以及开源我的项目教训分享的技术up主。获取更多资讯,欢送微信搜寻公众号:【我的Android开源之旅】

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理