Skip to content

常见问题

xuexiangjys edited this page Jul 7, 2021 · 12 revisions

视频介绍

Flutter系列|版本更新插件的常见问题盘点

使用问题

1.问:为什么我在调试的使用是能正常更新的,但是使用flutter build apk --release打出来的包却不能正常更新?

答:这里建议不要使用flutter build apk --release进行打包。因为原生的组件使用需要配置混淆,目前使用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命令进行打包。

2.问:为什么我在使用自定义弹框样式的顶部图片,debug下能正常显示,但是在release下图片不显示?

答:由于更新弹窗的顶部样式自定义使用的是反射的引用方式,所以在打release包的时候,如果我们不设置shrinkResources为false的话,打包程序就会默认清除你自定义的顶部图片,导致在release下图片不显示。

所以这个时候,我们只需要把shrinkResources设置为false就可以了, 具体可参考下图:

3.问:如果我使用android的原生打包方式,如何减小包的体积呢?

答:

  • 这里我们可以开启混淆,增加混淆配置,点击参考混淆配置样例

  • 使用gradle 配置 ndk 指定 ABI, 按需进行打包。

ndk {
    abiFilters 'armeabi', 'armeabi-v7a'
    // , 'arm64-v8a'
}

4.问:配置了ApkMd5字段,为什么安装的时候还是报Code:5000, msg:安装APK失败!(apk文件校验不通过!)呢?

答:这里需要说明的是,这里填写的MD5值是APK文件进行MD5加密后的值,并不是对APK签名的MD5。框架默认使用的是MD5加密,如果你觉得不够安全,也可以使用其他加密方式,不过这可能涉及到原生的编码,详情参见:自定义文件加密校验器.

如果不想使用MD5的话就不需要配置这个字段,不过这样每次检查的话都会去重新下载APK,建议配置。

5.问:为什么我最新的应用下载了,但是点击安装按钮后一直提示更新失败呢?

答:出现这种问题的情况有很多种。

  • 首先你需要确保能否找到下载下来的最新APK,如果你设置了MD5值的话,还需要判断下载下来的最新APK计算出来的MD5值和后台接口返回的MD5值是否一致(计算文件的MD5值Demo中有对应的方法),注意这里的MD5值指的是应用APK文件的MD5值,而非应用签名文件的MD5值!!
  • 其次你需要手动安装一下APK,确保APK文件没问题(签名一致、文件完整),能正常安装;例如出现 "未安装应用" 弹窗提示的,一般都是签名不一致导致的问题。(你运行的应用是debug签名,但是你打包的应用却是正式签名)
  • 最后你可以在多台设备上尝试一下,确保不是设备自身的问题。
  • 如果以上方法都不能解决问题,很遗憾,那么你只能使用原生的方法来解决了。

6.问:为什么我直接使用UpdateEntity设置了isForce为true了,但是强制更新却不起作用?

答:这是因为isForceisIgnorable是互斥的.如果设置了isIgnorabletrue,这个时候再设置isForcetrue那么isForce就会失效.因为强制更新的版本是不可能可忽略的,而可忽略的版本更新也不可能是强制更新的.


错误码

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