-
-
Notifications
You must be signed in to change notification settings - Fork 406
常见问题
答:你需要仔细阅读接入文档,必须在Application中按要求初始化XUpdate
,而其中IUpdateHttpService
必须设置,除非你自定义版本检查器和版本更新下载器,否则框架将无法正常使用!
答:出现这个问题,一般是少了混淆配置。如果你使用了自定义的版本更新解析器,请对你的接口实体进行混淆配置。
答:出现这种情况可以从两个方面来排查。
-
如果你打印出进度条的值是-1,那很有可能是服务端提供的下载服务本身就不支持进度。因为如果你在请求服务端下载文件的时候,服务端在请求头中没有返回数据长度,即
contentLength
(Content-Length)没有设置,是未知的,那么是不可能有进度的。这个你可以通过抓包来查看响应头中是否设置了“Content-Length”。 -
如果你使用的服务端本身已经确认是支持进度的。那么就可能需要考虑是不是你的
IUpdateHttpService
的download
接口实现有问题,你务必要保证接口DownloadCallback
的onStart
和onProgress
方法能被正常执行(在主线程中)。
答:出现这个问题,你首先得明确一点的是,你判断是否有最新版本的依据是什么。到底是依据VersionCode
还是VersionName
,这个取决于你实际使用的场景。明确完这一点,你才可以根据日志去判断到底是前端出了问题还是后端出了问题。
答:出现这个问题,只能证明你的后端在返回版本信息的时候并没有返回最新版本文件的MD5值,或者返回了你没有设置。如果你设置了MD5值,那么就是你设置的MD5值和文件计算出来的MD5值不匹配,这种情况下,你的APK文件极有可能被篡改了(当然在这种情况下,你也不能正常安装),或者是你们前后端的MD5值计算算法不一致(一般不存在这种情况)。
答:出现这种问题的情况有很多种。
- 首先你需要确保能否找到下载下来的最新APK,如果你设置了MD5值的话,还需要判断下载下来的最新APK计算出来的MD5值和后台接口返回的MD5值是否一致(计算文件的MD5值Demo中有对应的方法),注意这里的MD5值指的是应用APK文件的MD5值,而非应用签名文件的MD5值!!
- 其次你需要手动安装一下APK,确保APK文件没问题(签名一致、文件完整),能正常安装。例如出现 "未安装应用" 弹窗提示的,一般都是签名不一致导致的问题。(你运行的应用是debug签名,但是你打包的应用却是正式签名)
- 最后你可以在多台设备上尝试一下,确保不是设备自身的问题。
- 如果以上方法都不能解决问题,很遗憾,那么你只能自定义安装监听器
OnInstallListener
接口,实现能够正确安装APK的方法了。
答:最好的解决方法当然是打断点逐个进行排查啦!当然在打断点前,我们需要调用XUpdate.get().debug(true)
开启debug模式,打印相关日志,明确出错的位置,这样才能更快地解决问题啦!
8.问:为什么版本更新弹窗弹不出来,报System.err: at com.xuexiang.xupdate.widget.BaseDialog.init(BaseDialog.java:72)
错误?
答:最好的解决方法就是传入的context使用的是AppCompatActivity
, 而不是Activity
或者FragmentActivity
!如果你一定要使用Activity
或者FragmentActivity
,那么请设置其主题为Theme.AppCompat
类型的主题。
答:框架默认提供的静默安装的方法目前只是在较低Android版本上的实现,在高版本Android和定制Rom上需要做额外的适配。如果想要实现自动静默安装,就需要实现OnInstallListener
接口,实现静默安装的方法。
经常有使用者反馈不知道该如何自定义接口(面对一堆接口,不知道该如何下手),进行个性化的定制,以满足版本更新实现的需求,下面我将一一列举问题和解决的方法。
答:可以自定义版本更新检查器IUpdateChecker
,它主要负责的是查询是否存在最新版本。可参考框架默认提供的版本更新检查器来自定义。
答:可以自定义版本更新解析器IUpdateParser
,它主要负责的是解析服务端返回的数据结果,并构建更新信息实体UpdateEntity
。具体可参考自定义版本更新解析器, 也可参考框架默认提供的版本更新解析器来自定义。
答:可以自定义版本更新提示器IUpdatePrompter
,它主要负责的是展示最新的版本信息。具体可参考自定义版本更新提示器, 也可参考框架默认提供的版本更新提示器来自定义。
答:可以自定义版本更新下载器IUpdateDownloader
,它主要负责的是下载最新的版本APK安装包。可参考框架默认提供的版本更新下载器来自定义。
答:如果你的apk安装与众不同,你可以实现自己的apk安装器。你只需要实现OnInstallListener
接口,并通过XUpdate.setOnInstallListener
进行设置即可生效。
【注意】以上实现的自定义接口,都可以通过XUpdate
进行全局和局部的设置。
错误码 | 备注 |
---|---|
2000 | 查询更新失败 |
2001 | 没有wifi |
2002 | 没有网络 |
2003 | 正在进行版本更新 |
2004 | 无最新版本 |
2005 | 版本检查返回空 |
2006 | 版本检查返回json解析失败 |
2007 | 已经被忽略的版本 |
2008 | 应用下载的缓存目录为空 |
3000 | 版本提示器异常错误 |
3001 | 版本提示器所在Activity页面被销毁 |
4000 | 新应用安装包下载失败 |
4001 | 读写权限申请失败 |
5000 | apk安装失败 |
5100 | 未知错误 |