xuexiangjys / XUpdate

🚀A lightweight, high availability Android version update framework.(一个轻量级、高可用性的Android版本更新框架)
https://github.com/xuexiangjys/XUpdate/wiki
Apache License 2.0
2.32k stars 406 forks source link

下载后apk损坏,3.16MB的apk下载下来5.85MB #72

Closed Weiyi-C closed 4 years ago

Weiyi-C commented 4 years ago

问题描述

正常进行更新服务,获取到apk地址后进行下载,下载完成后提示MD5效验不通过,通过文件管理器找到下载的apk发现安装包大小由原本的3.2MB增加到5.85MB,尝试使用压缩软件打开apk发现内部结构完全损坏

使用的XUpdate版本

XUpdate 1.1.1

重现的步骤:

  1. 使用自定义更新解析器配置XUpdate至可正确运行
  2. 启动APP,获取到下载信息,点击更新按钮进行更新
  3. 等待apk下载完成进行安装

期望的效果

正确下载apk并开始安装

截图及Log

D/[XUpdate]: 设置全局是否只在wifi下进行版本更新检查:false
D/[XUpdate]: 设置全局是否使用的是Get请求:false
D/[XUpdate]: 设置全局是否是自动版本更新模式:false
D/[XUpdate]: 设置全局更新网络请求服务:com.SpaceElves.box.XUpdate.OKHttpUpdateHttpService
D/[XUpdate]: XUpdate.update()启动:XUpdate{mUpdateUrl='http://47.98.101.150:881/version/index', mParams={}, mApkCacheDir='/storage/emulated/0/Android/data/com.SpaceElves.box/cache/xupdate', mIsWifiOnly=false, mIsGet=false, mIsAutoMode=false}
D/[XUpdate]: 开始检查版本信息...
I/[XUpdate]: 服务端返回的最新版本信息:{"code":"00000000","msg":"服务调用成功!","data":{"Code":0,"Msg":"","UpdateStatus":"1","VersionCode":"2","VersionName":"1.0.0","ModifyContent":"测试","DownloadUrl":"https://space-content.oss-cn-chengdu.aliyuncs.com/apk/SpaceElve-Box-1.0.0.apk","ApkSize":"3236","ApkMd5":"6fb36f161406a218a6a8521f5ea4f79a"}}
D/XUpdate: 自定义解析器收到的json信息:{"code":"00000000","msg":"服务调用成功!","data":{"Code":0,"Msg":"","UpdateStatus":"1","VersionCode":"2","VersionName":"1.0.0","ModifyContent":"测试","DownloadUrl":"https://space-content.oss-cn-chengdu.aliyuncs.com/apk/SpaceElve-Box-1.0.0.apk","ApkSize":"3236","ApkMd5":"6fb36f161406a218a6a8521f5ea4f79a"}}
I/[XUpdate]: 发现新版本:UpdateEntity{mHasUpdate=true, mIsForce=false, mIsIgnorable=true, mVersionCode=2, mVersionName='1.0.0', mUpdateContent='测试', mDownloadEntity=DownloadEntity{mDownloadUrl='https://space-content.oss-cn-chengdu.aliyuncs.com/apk/SpaceElve-Box-1.0.0.apk', mCacheDir='/storage/emulated/0/Android/data/com.SpaceElves.box/cache/xupdate', mMd5='6fb36f161406a218a6a8521f5ea4f79a', mSize=3236, mIsShowNotification=false}, mIsSilent=false, mIsAutoInstall=true, mIUpdateHttpService=com.SpaceElves.box.XUpdate.OKHttpUpdateHttpService@5e843c4}
I/[XUpdate]: 开始下载更新文件:UpdateEntity{mHasUpdate=true, mIsForce=false, mIsIgnorable=true, mVersionCode=2, mVersionName='1.0.0', mUpdateContent='测试', mDownloadEntity=DownloadEntity{mDownloadUrl='https://space-content.oss-cn-chengdu.aliyuncs.com/apk/SpaceElve-Box-1.0.0.apk', mCacheDir='/storage/emulated/0/Android/data/com.SpaceElves.box/cache/xupdate', mMd5='6fb36f161406a218a6a8521f5ea4f79a', mSize=3236, mIsShowNotification=false}, mIsSilent=false, mIsAutoInstall=true, mIUpdateHttpService=com.SpaceElves.box.XUpdate.OKHttpUpdateHttpService@5e843c4}
D/[XUpdate]: 开始下载更新文件, 下载地址:https://space-content.oss-cn-chengdu.aliyuncs.com/apk/SpaceElve-Box-1.0.0.apk, 保存路径:/storage/emulated/0/Android/data/com.SpaceElves.box/cache/xupdate/1.0.0, 文件名:SpaceElve-Box-1.0.0.apk
D/[XUpdate]: 更新文件下载完成, 文件路径:/storage/emulated/0/Android/data/com.SpaceElves.box/cache/xupdate/1.0.0/SpaceElve-Box-1.0.0.apk
D/[XUpdate]: 开始安装apk文件, 文件路径:/storage/emulated/0/Android/data/com.SpaceElves.box/cache/xupdate/1.0.0/SpaceElve-Box-1.0.0.apk, 下载信息:DownloadEntity{mDownloadUrl='https://space-content.oss-cn-chengdu.aliyuncs.com/apk/SpaceElve-Box-1.0.0.apk', mCacheDir='/storage/emulated/0/Android/data/com.SpaceElves.box/cache/xupdate', mMd5='6fb36f161406a218a6a8521f5ea4f79a', mSize=3236, mIsShowNotification=false}
D/XUpdate: 安装APK失败!(apk文件校验不通过!)
D/XUpdate: 安装APK失败!

下载下来的本地文件

image

设备信息

附加信息

xuexiangjys commented 4 years ago

MD5值不一致的根源还是文件传输错乱了,这个和文件权限无关。考虑看是否是 服务端文件下载服务兼容有问题。可以尝试使用其他的IUpdateHttpService 中的下载实现

Weiyi-C commented 4 years ago

谢谢解答,参考demo中把XUpdate访问网络的 OKHttpUpdateHttpService 换成 XHttpUpdateHttpService 后下载正常了,不过还是没找到之前异常的原因; 下载地址是阿里云的地址,自己尝试换到不同服务器进行下载结果也一样,所以跟服务端下载兼容应该无关,猜测问题应该处在 OKHTTP 下载,但貌似 XHTTP 也是用 OKHTTP 访问网络的,但没出问题,有时间仔细研究一下