关于 ADB install 降级 App 版本的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zzNucker
V2EX    Android

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

  •  
  •   zzNucker 2024-02-18 19:12:12 +08:00 10894 次点击
    这是一个创建于 648 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    先谢谢各位

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

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

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

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

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

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

    I mean ,没必要拿自己的数据来交换一次技术测试。
    tsubasap91
        11
    tsubasap91  
       2024-02-19 18:50:53 +08:00
    我开发也不会考虑降级的事,主要还是看数据库的相关逻辑是怎么处理的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4457 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 09:57 PVG 17:57 LAX 01:57 JFK 04:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86