V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zzNucker
V2EX  ›  Android

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

  •  
  •   zzNucker · 314 天前 · 7752 次点击
    这是一个创建于 314 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    I mean ,没必要拿自己的数据来交换一次技术测试。
    tsubasap91
        11
    tsubasap91  
       313 天前
    我开发也不会考虑降级的事,主要还是看数据库的相关逻辑是怎么处理的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2426 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 15:57 · PVG 23:57 · LAX 07:57 · JFK 10:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.