常见问题
答:这里建议不要使用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
命令进行打包。
答:由于更新弹窗的顶部样式自定义使用的是反射的引用方式,所以在打release包的时候,如果我们不设置shrinkResources
为false的话,打包程序就会默认清除你自定义的顶部图片,导致在release下图片不显示。
所以这个时候,我们只需要把shrinkResources
设置为false就可以了, 具体可参考下图:
答:
-
这里我们可以开启混淆,增加混淆配置,点击参考混淆配置样例。
-
使用gradle 配置 ndk 指定 ABI, 按需进行打包。
ndk {
abiFilters 'armeabi', 'armeabi-v7a'
// , 'arm64-v8a'
}
答:这里需要说明的是,这里填写的MD5值是APK文件进行MD5加密后的值,并不是对APK签名的MD5。框架默认使用的是MD5加密,如果你觉得不够安全,也可以使用其他加密方式,不过这可能涉及到原生的编码,详情参见:自定义文件加密校验器.
如果不想使用MD5的话就不需要配置这个字段,不过这样每次检查的话都会去重新下载APK,建议配置。
答:出现这种问题的情况有很多种。
- 首先你需要确保能否找到下载下来的最新APK,如果你设置了MD5值的话,还需要判断下载下来的最新APK计算出来的MD5值和后台接口返回的MD5值是否一致(计算文件的MD5值Demo中有对应的方法),注意这里的MD5值指的是应用APK文件的MD5值,而非应用签名文件的MD5值!!
- 其次你需要手动安装一下APK,确保APK文件没问题(签名一致、文件完整),能正常安装;例如出现 "未安装应用" 弹窗提示的,一般都是签名不一致导致的问题。(你运行的应用是debug签名,但是你打包的应用却是正式签名)
- 最后你可以在多台设备上尝试一下,确保不是设备自身的问题。
- 如果以上方法都不能解决问题,很遗憾,那么你只能使用原生的方法来解决了。
答:这是因为isForce
和isIgnorable
是互斥的.如果设置了isIgnorable
为true
,这个时候再设置isForce
为true
那么isForce
就会失效.因为强制更新的版本是不可能可忽略的,而可忽略的版本更新也不可能是强制更新的.
错误码 | 备注 |
---|---|
2000 | 查询更新失败 |
2001 | 没有wifi |
2002 | 没有网络 |
2003 | 正在进行版本更新 |
2004 | 无最新版本 |
2005 | 版本检查返回空 |
2006 | 版本检查返回json解析失败 |
2007 | 已经被忽略的版本 |
2008 | 应用下载的缓存目录为空 |
3000 | 版本提示器异常错误 |
3001 | 版本提示器所在Activity页面被销毁 |
4000 | 新应用安装包下载失败 |
4001 | 读写权限申请失败 |
4002 | 取消下载 |
5000 | apk安装失败 |
5100 | 未知错误 |