SilverLining's Blog

Android App 保留数据降级

更新之 Android 10

升级到了 Android 10 之后


问题背景

今天在用微信的时候,突然微信闪退后就打不开了。强制停止重新启动后卡在开屏画面,然后黑屏,无限重启。一番测试后确定这个问题是 WeXposed 插件导致的。

以前也遇到过类似的问题,通常只需要保留数据卸载微信后再重新安装同版本的微信,就可以解决了。虽然我关闭了微信的自动更新,但是每隔半个月一个月的还是会抽风一次,所以我的实战经验其实已经很丰富了。然而很不幸,这次同样的方法却没什么作用。尝试了升级插件到最新版,翻了一堆日志,也去 track 了一下官网的 issue,也没有什么好的解决方案。

果然不能手贱随便更新软件。微信越更新越大,从 2018 年的 70MB 到了现在的 100MB 以上,无力吐槽。遂打算直接降级保平安。

尝试折腾

App 的降级本来没什么好说的,卸载最新版以后再网上找一个旧版本的 apk 就搞定了。但是到了微信这儿就有点不太一样了。微信的旧版本安装包倒是好找,但是却不能一卸了之,卸载了之后那些虽然不太重要的记录也没了。

我记得一两年前 adb 是有直接的保留数据降级方案的。简单说一下 android-platform-tools 的安装。 macOS 下直接用 brew 安装即可:

$ brew cask install android-platform-tools

手机连接到电脑上,需要启用开发者模式,然后打开 USB 调试开关,运行 adb devices 测试连接。一切准备就绪后,执行命令:

$ adb install -r -d wechat_7.0.0.apk
# adb: failed to install wechat_7.0.0.apk: 
# Failure [INSTALL_FAILED_VERSION_DOWNGRADE]

好像是 Google 为了某种奇怪的安全问题考虑把这么好用的功能砍掉了(阿西吧 T^T)。

当然有些机智的小伙伴会想到降级 android-platform-tools 。我觉得吧,这个方案理论上可行(我没测试过),但是降级之后你可能会面对找不到设备,fastboot 出错等一系列作死的错误(来源于我曾经坚持不升级的惨痛经验)。

解决方案

在一番查询之后,我找到了一个解决方案:

  1. 保留数据卸载
$ adb shell cmd package uninstall -k <package_name>
  1. 重启设备,手动或者 adb reboot 我前两次总是失败,后来发现我漏掉了一行小字:重启设备。
  2. 安装旧版本,大功告成
$ adb install wechat_7.0.0.apk
# Success

最后一发吐槽,微信安装包真大啊 adb 都要装半天。