起因与结果
闲来无事,注意到了七八年前使用过的旧手机,希望查看上面曾经的 QQ 聊天记录。
然而手机十分老,QQ 版本也很老。手机上的 QQ 因版本过久无法打开,但更新到最新版也因为手机版本过低无法安装。总而言之,这个手机不可能打得开 QQ 了。
网上聊天记录导出方法有许多种,然而我这旧手机不能 ROOT,自带的备份软件备份不了 QQ,会提示权限错误。捣鼓了半天没有可行方法,可谓是山重水复疑无路。
所幸找到了这篇文章,其中提到的第四种方法,尝试过后成功导出记录。
但有必要事先说明:不清楚是我的设备的问题还是方法本身的问题,总之虽然成功导出但只有一部分,并没有达成符合预期的效果,但至少看到了以前的部分聊天记录还是颇为欣慰,毕竟也只剩下这一个办法了。
当然其实后面又想到了别的方法,可能会有更好的效果,后文会提到。
我的情况
手机 Android 版本为 4.3,内存空间寥寥无几,系统过旧无法安装新版 QQ,未解锁 OEM,无法 ROOT,可以开启开发者模式使用 adb 调试。手机上安装有远古版本 QQ,也无法使用。手机自带备份软件,但无法备份 QQ,会显示权限错误。
导出方法
工具
由于资源比较难找,这里我将导出过程中我所使用的工具打包分享,均来自于网络,不一定适合所有情况。
原理
旧版(非 QQNT 版本)QQ 的聊天记录相关文件主要存储于
/data/data/com.tencent.mobileqq/
下的 databases/<QQ号>.db
,databases/slowtable_<QQ号>.db
以及 files/kc
,只需要获取到这三个文件我们就可以导出基本的聊天消息文字记录,更多的图片、语音等也在该目录下可导出。
获取该文件一般需要 ROOT,因此这里我们只能使用别的方式,我们可以利用 adb 的备份功能将该文件提出出来。
使用 adb 备份
首先手机开启开发者模式,允许 usb 调试,然后连接 adb。
在 AndroidManifest.xml
中有一个参数为 allowBackup
,表示该软件是否允许使用 adb 备份。尽管我手机上已经是七八年前的版本,但该属性已设置为 false
,但好在发现 QQ 更远古的版本中该属性还是 true
,因此这里我们需要保留数据卸载并安装允许备份的版本。
保留数据卸载:
adb uninstall -k com.tencent.mobileqq
安装允许备份的旧版后,进行备份:
adb backup com.tencent.mobileqq
备份时需要在手机上点击同意,备份可能需要一些时间,会在当前目录下生成一个扩展名为 .ab
的备份文件。
如果备份文件只有 1kb 那就是失败了,可能是软件版本不对或 adb 与设备 Android 版本不对应。旧版 Android 不兼容高版本 adb,我这里 4.3 使用 1.0.32 版本的 adb 是可以的。
提取数据
提取出数据后,我们这里使用 android-backup-extractor 从.ab
中提取文件:
java -jar abe.jar unpack backup.ab backup.tar
之后直接解压即可。
导出聊天记录
这里使用的是 QQ-History-Backup 这个库。
在导出的文件夹里找出我们需要的文件之后,放入对应的文件夹内,接着按照教程使用该工具导出即可。
另一种或可行方法
在备份完之后,.ab
文件其实也可以使用 adb 将其恢复到其他设备上(例如模拟器)。
我们可以选择在新设备上将 QQ 更新到最新版尝试打开,也可以从可以 root 的新设备上更方便的直接拿到我们需要的文件。
这两种方法我都没有试过,或许效果比我更好。
附录
参考文献
-
GitHub - QQBackup/QQ-History-Backup: 【停更】QQ/TIM 聊天记录导出为 HTML,支持图片、语音,可 GUI 与 非 GUI 操作 (Python)
-
GitHub - nelenkov/android-backup-extractor: Android backup extractor
版权信息
本文原载于 reincarnatey.net,遵循 CC BY-NC-SA 4.0 协议,复制请保留原文出处。