以前给某个小应用用过 adb install -r -d <pkg> 这种方式强制覆盖降级应用,最近把 QQ 更新成 9.0 版本以后感觉很不习惯,想退回去,但是又不知道这种大型应用这样降级会不会有问题(因为聊天记录很多,怕出问题丢记录),所以搜索了一下关于这个命令的知识,但是也没太理解透彻,来这里问问各位安卓开发老哥一些问题:
跟应用版本的 Target SDK 有关系吗,如果两个版本 Target SDK 不一样降级会出问题吗?
是不是只要 data 存储和读取方式不发生变化,使用 adb 降级就不会出现问题?
这种方式跟用 adb uninstall -k <pkg> 保留数据卸载后再手动安装旧版本有什么区别吗?
先谢谢各位
1
fredsunme 281 天前 1
没具体测过,但是关于降级,就数据存储上,可以补几个概念做参考。
1. 数据库,app 版本提升时,如果我动了数据库,那么数据库版本号必须累加。你回退回去,数据库版本你怎么降?而且光字段名修改就没法可逆吧,更别提新建表后将老表复制过去就为了改个字段名这种实现方式, [所以数据库如果我没记错的话在版本号出问题时会一起删除 [?] 并且一般的聊天记录,都是用的数据库存储 [记录消息时间,收发对象等等,不可能走 sp] 2. 数据缓存,一般是 sharedpreference ,这个你理解为用键值对关系存储数据的一串文字,这个一般是常说的卸载后保留的垃圾中一种,它并不存在数据库那种版本号+1 的概念,而这个也是一般“小应用”喜欢用做存储的东西,因为快且没动过一次结构 [新增字段/删除字段] 就要版本升级的概念 所以不建议回降,极大概率会出问题 另:adb install -r -d <pkg> ,我只知道字面意思,不确定是否有什么独特的降级实现方法。 个人感觉是没法做到你要的结果,如果是降低很多很多版本,甚至还能成功,那么意味着 app 要记录每一个版本的状态,不太现实 |
2
fredsunme 281 天前
targetsdk 只是运行时的表现,而不是 min, 理论是不会影响安装
|
3
janus77 281 天前 1
不知道你说的出问题是什么意思,理论上覆盖降级安装都是有可能出现由磁盘数据错乱导致的打不开、崩溃和数据丢失的问题的
你说的“读取方式不变”这个就很宽泛,不同版本的代码实现逻辑不一样,算不算读取方式不变? 你保不保留数据,他都是会在运行时读取和验证的,验证出问题一样会有我第一段说的问题 |
4
zzNucker OP @fredsunme 嗯嗯
不清楚 QQ 微信这种应用的聊天数据是怎么存储的,因为我现在手机也不能 Root ,没法看。我觉得优雅的话就应该跟版本号无关(至少最近几个大版本),这样跨版本的两个 QQ 迁移聊天记录就会比较方便。 如果是那些应用本身的数据,不知道是不是强制安装的时候直接给覆盖了,这也是我第三个疑问里的一点 |
6
jim9606 281 天前 via Android 1
基本上不会针对这种情况的降级做测试,所以完全看脸,以及你对数据完整性要求到何种程度。
这种超级 app 是有热更和动态下载可执行代码的,极大概率导致不兼容,我之前为了解锁 bl 用 miui 的备份做过一次同版本还原,都会闪退(tinker 报错),最后我是对 miui 备份档做手脚,删掉除聊天记录数据库之外的文件才恢复成功,而且还是丢失了部分图片。 建议考虑先备份到 pc 再还原回去的路数。 |
7
winterbells 281 天前 1
降级主要怕数据库
sqlite 还好,第三方数据库的话会有个大版本格式更新的问题,升级可以写好更新代码,降级没法改 只能靠运气了,或者 QQ 这种先备份到电脑,出问题再恢复 |
8
zzNucker OP @winterbells
@jim9606 说到这个我之所以考虑降级也是因为 QQ 这个聊天记录备份恢复实在是很一坨,费老大劲备份到电脑,恢复到手机的时候导入能导很久很久卡着不动,有时候是真卡死了,有时候重新再恢复又好了,太折腾了 顺便 QQ 这个 9.0 说是升级了 NT 架构,也没感觉有啥有点,除了默认界面变蓝了,速度也没变快。orz |
9
ssnoopy 281 天前
对的,主要看 app 开发者怎么写逻辑,不过谁会考虑有人这么降级使用
|
10
magicls 281 天前
国内大部分应用都不怎么处理降级安装的问题,我只能说,站在你自己的角度考虑,为了你的数据,先备份好,再做任何降级操作。
I mean ,没必要拿自己的数据来交换一次技术测试。 |
11
tsubasap91 281 天前
我开发也不会考虑降级的事,主要还是看数据库的相关逻辑是怎么处理的
|