QQ&微信手机版带聊天记录降级方案

手机QQ带聊天记录降级需要root辅助,微信不需要。

此教程目的是将未解锁手机的聊天记录导出后解锁刷机再还原回去。因此不一定具有通用性

1.为什么我会降级?

答案很简单:手机并没有跟上时代更换,而新版本的又增加了一大堆无用功能、内存占用更大等等等等一大堆,虽然手机安装新版也不卡,但是强迫症肯定是忍不了的。

2.论Google提供的降级方案

在adb中提供了app降级安装的命令:

1
./adb install -d <APP.apk>

但这条命令不是无条件可用的:

  • 只能在app调试模式下可用,但是在我手上的unofficial-lineage的系统里所有app都是可调试状态,所以在los上这条命令是直接可用的,如果没有开启可以参考文末使用magisk开启全局调试的方法。
    • 如果不在调试模式下降级,则会报:Failure [INSTALL_FAILED_VERSION_DOWNGRADE]
    • 若用adb uninstall -k 保留数据卸载也会保存包versionCode导致报同样的错误
  • app最低sdk不能更改,如果最低sdk版本提升了就会报如下错误:Failure [-26: Package com.tencent.mobileqq new target SDK 9 doesn’t support runtime permissions but the old target SDK 26 does.]

3.我所使用的方案

我的两台手机:

  • Nubia Z17(NX563J)
    • 未解锁,官方系统停止更新
  • MI 4W (Cancro)
    • Los+Magisk

那么我的需求就很明显了:我需要找到一种可以带聊天记录迁移的方式将Z17的聊天记录备份出来,再解锁刷机之后把聊天记录导入回来。

这样问题就很简单了:

微信非常好解决,最低可迁移聊天记录的版本是6.0,所以6.0之后的所有版本均可以迁移聊天记录。但是微信在新机器上登陆账号时,会触发身份验证,需要另一台手机扫码登陆,而这个验证又限制了最低版本。所以找一个微信6.7以上版本验证过之后,使用adb install -d 进行版本降级即可。

QQ这边相比之下就麻烦很多,原因有二:
1、QQ支持聊天记录迁移的版本是8.2.8,太高了。
2、QQ8.2.8的target SDK 是26,也就是安卓8.0,QQ6.6.6左右的版本则是9,也就是安卓2.3.x。这就触发了adb命令的第二条限制。

所以我打开了R.E管理器…

经过多次比对后,保留以下文件就能留得住聊天记录和登陆session

  • /data/data/com.tencent.mobileqq路径内:
    • config/
    • databases/
    • files/<qq号>
    • files/highway_session_info_dir
    • files/下的所有独立文件
    • shared_prefs
    • filesskins<QQ号>

接下来,卸载新版本,安装旧版本,文件复制进去就好了。因为没有开启seLinux,所以不需要对比权限。

到此,成功保留到聊天记录并且降级成功,附上几个关键节点的apk链接:

附一个开启全局调试的文章:https://zhuanlan.zhihu.com/p/100583752