关于 ADB install 降级 App 版本的问题

217 天前
 zzNucker

以前给某个小应用用过 adb install -r -d <pkg> 这种方式强制覆盖降级应用,最近把 QQ 更新成 9.0 版本以后感觉很不习惯,想退回去,但是又不知道这种大型应用这样降级会不会有问题(因为聊天记录很多,怕出问题丢记录),所以搜索了一下关于这个命令的知识,但是也没太理解透彻,来这里问问各位安卓开发老哥一些问题:

  1. 跟应用版本的 Target SDK 有关系吗,如果两个版本 Target SDK 不一样降级会出问题吗?

  2. 是不是只要 data 存储和读取方式不发生变化,使用 adb 降级就不会出现问题?

  3. 这种方式跟用 adb uninstall -k <pkg> 保留数据卸载后再手动安装旧版本有什么区别吗?

先谢谢各位

5779 次点击
所在节点    Android
11 条回复
fredsunme
217 天前
没具体测过,但是关于降级,就数据存储上,可以补几个概念做参考。
1. 数据库,app 版本提升时,如果我动了数据库,那么数据库版本号必须累加。你回退回去,数据库版本你怎么降?而且光字段名修改就没法可逆吧,更别提新建表后将老表复制过去就为了改个字段名这种实现方式, [所以数据库如果我没记错的话在版本号出问题时会一起删除 [?]
并且一般的聊天记录,都是用的数据库存储 [记录消息时间,收发对象等等,不可能走 sp]
2. 数据缓存,一般是 sharedpreference ,这个你理解为用键值对关系存储数据的一串文字,这个一般是常说的卸载后保留的垃圾中一种,它并不存在数据库那种版本号+1 的概念,而这个也是一般“小应用”喜欢用做存储的东西,因为快且没动过一次结构 [新增字段/删除字段] 就要版本升级的概念
所以不建议回降,极大概率会出问题

另:adb install -r -d <pkg> ,我只知道字面意思,不确定是否有什么独特的降级实现方法。
个人感觉是没法做到你要的结果,如果是降低很多很多版本,甚至还能成功,那么意味着 app 要记录每一个版本的状态,不太现实
fredsunme
217 天前
targetsdk 只是运行时的表现,而不是 min, 理论是不会影响安装
janus77
217 天前
不知道你说的出问题是什么意思,理论上覆盖降级安装都是有可能出现由磁盘数据错乱导致的打不开、崩溃和数据丢失的问题的
你说的“读取方式不变”这个就很宽泛,不同版本的代码实现逻辑不一样,算不算读取方式不变?
你保不保留数据,他都是会在运行时读取和验证的,验证出问题一样会有我第一段说的问题
zzNucker
217 天前
@fredsunme 嗯嗯

不清楚 QQ 微信这种应用的聊天数据是怎么存储的,因为我现在手机也不能 Root ,没法看。我觉得优雅的话就应该跟版本号无关(至少最近几个大版本),这样跨版本的两个 QQ 迁移聊天记录就会比较方便。

如果是那些应用本身的数据,不知道是不是强制安装的时候直接给覆盖了,这也是我第三个疑问里的一点
zzNucker
217 天前
@janus77 是的,其实就是怕读写的逻辑变了导致问题,所以这种降级会不会遇到问题是不是纯纯看运气或者说 APP 开发者有没有改读写逻辑
jim9606
217 天前
基本上不会针对这种情况的降级做测试,所以完全看脸,以及你对数据完整性要求到何种程度。
这种超级 app 是有热更和动态下载可执行代码的,极大概率导致不兼容,我之前为了解锁 bl 用 miui 的备份做过一次同版本还原,都会闪退(tinker 报错),最后我是对 miui 备份档做手脚,删掉除聊天记录数据库之外的文件才恢复成功,而且还是丢失了部分图片。

建议考虑先备份到 pc 再还原回去的路数。
winterbells
217 天前
降级主要怕数据库
sqlite 还好,第三方数据库的话会有个大版本格式更新的问题,升级可以写好更新代码,降级没法改
只能靠运气了,或者 QQ 这种先备份到电脑,出问题再恢复
zzNucker
217 天前
@winterbells
@jim9606 说到这个我之所以考虑降级也是因为 QQ 这个聊天记录备份恢复实在是很一坨,费老大劲备份到电脑,恢复到手机的时候导入能导很久很久卡着不动,有时候是真卡死了,有时候重新再恢复又好了,太折腾了

顺便 QQ 这个 9.0 说是升级了 NT 架构,也没感觉有啥有点,除了默认界面变蓝了,速度也没变快。orz
ssnoopy
216 天前
对的,主要看 app 开发者怎么写逻辑,不过谁会考虑有人这么降级使用
magicls
216 天前
国内大部分应用都不怎么处理降级安装的问题,我只能说,站在你自己的角度考虑,为了你的数据,先备份好,再做任何降级操作。

I mean ,没必要拿自己的数据来交换一次技术测试。
tsubasap91
216 天前
我开发也不会考虑降级的事,主要还是看数据库的相关逻辑是怎么处理的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1016329

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX