V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ellermister
V2EX  ›  分享创造

解放微信存储空间!一键清理群聊记录,减少十几 GB 体积!

  •  3
     
  •   ellermister · 2023-07-19 13:01:34 +08:00 · 6820 次点击
    这是一个创建于 430 天前的主题,其中的信息可能已经有所发展或是发生改变。

    介绍

    释放你的安卓微信内部存储空间,一键解放微信存储空间的工具。

    主要原理:

    通过解密微信的数据库,过滤出群聊天记录,并找出相关的缓存文件、图片、视频等,一并删除。最后,删除这些数据库记录,从而缩减数据库的大小。

    为什么会做这个?

    由于记忆力有限,可能不想删除所有的聊天记录,而是希望保留联系人记录,以便在需要时可以参考上下文。

    然而,微信甚至不像 QQ 那样,可以手动点击接收图片。微信默认会接收所有群组的消息、图片和视频缓存等,群里聊的每一个字节都存到了你的手机里。

    此外,微信的文件分类管理非常混乱,这些文件甚至被隐藏在 /data 目录中,只有具备 root 权限的用户才能进行处理。即使你有 root 权限,也无法轻易找出哪些文件可以删除,哪些文件不能删除。

    长期以来,虽然你的联系人资料可能并不占用太多存储空间,但群组的资料却可能占据了大部分空间。

    为什么你不退群?

    没有习惯退群,即使退了,群组之前的记录仍会像狗皮膏药一样永远存储在你的手机中,无法轻易清除。

    为什么不用内置聊天管理?

    内置的聊天管理功能根本无法满足清理需求,缺乏一键选择群组的功能。

    经过测试,即使勾选了清理选项,导出数据后你会发现数据库和缓存中仍然存在数据,内置功能并没有完全清理干净,就像删除了一个软连接一样。(测试自 8.0.2 版本)

    功能:

    • 清理所有群产生的聊天记录、图片、视频和音频缓存,从而缩减数据库大小。
    • 可选择只清理联系人,这一功能一般用不上。
    • 顺便清理其他目录:小程序、基础缓存、检查更新残留、record 缓存、avatar 缓存、FTS5Index*、webview 内核缓存、wepkg 缓存等。
    • 清理其他表项:公众号推送列表、转发通知消息、已经删除的关联记录表、用户头像关联缓存等。
    • UI 界面手动精细操作

    UI 界面操作

    支持操作:

    • 搜索昵称备注
    • 全选/取消全选所有好友
    • 全选/取消权限所有群组
    • 单选任意会话

    wechat-clean

    效果

    这是搞了好几天的成果,虽然还是很大,但已经减少了十几 GB 的体积!

    好在是可以弄成一键工具进行清理了。

    1689426978066

    IOS 用户

    对于没有 root 的 Android 或者 IOS 用户来说无法实现。

    可以许愿未来哪一天宇宙级产品经理愿意实现自定义备份功能了,就有解了!

    开源地址

    https://github.com/ellermister/wechat-clean

    49 条回复    2024-01-29 15:31:08 +08:00
    Tink
        1
    Tink  
       2023-07-19 13:32:48 +08:00
    清理之后原来的图片还能看吗
    dianso
        2
    dianso  
       2023-07-19 14:15:51 +08:00
    清理之后还能看吗
    ellermister
        3
    ellermister  
    OP
       2023-07-19 14:32:43 +08:00
    @Tink @dianso

    清理后图片当然不能看了,聊天记录也就一起删除了。选择不需要的会话进行删除就行。
    LawlietZ
        4
    LawlietZ  
       2023-07-19 15:26:56 +08:00
    微信不是有这个功能吗
    ellermister
        5
    ellermister  
    OP
       2023-07-19 15:44:44 +08:00
    @LawlietZ 微信不能全选,按分类选,不能搜索删除。删除也无法删除干净。
    wanwaneryide
        6
    wanwaneryide  
       2023-07-19 15:48:49 +08:00
    @ellermister 按会话清理的话,这个不是微信自带的功能吗?
    ellermister
        7
    ellermister  
    OP
       2023-07-19 15:49:18 +08:00
    @wanwaneryide 微信不能全选,按分类选,不能搜索删除。删除也无法删除干净。
    pkxutao
        8
    pkxutao  
       2023-07-19 16:46:08 +08:00
    你把微信的数据库解密了?也就是说,你能访问微信本地的聊天内容吗?
    ellermister
        9
    ellermister  
    OP
       2023-07-19 17:10:47 +08:00
    @pkxutao 当然可以啊,不然怎么识别哪些文件能不能删除
    pkxutao
        10
    pkxutao  
       2023-07-19 17:21:15 +08:00
    @ellermister #9 在非 root 情况下可以做到导出聊天记录不?或者能恢复删除的聊天记录不?我觉得这个需求量更大哈哈哈
    ellermister
        11
    ellermister  
    OP
       2023-07-19 17:56:33 +08:00
    @pkxutao 可以通过某些厂商自带的备份功能,拿到 zip ,从 PC 端解码,但因为不能 hook ,所以密钥得自己计算,有可能计算不出来。

    而且已经删除的聊天记录不存在主库,存在 FTS5IndexMicroMsg_encrypt.db ,它的加密参数不一样,你可以搜索这个关键字获取更多知识。
    miniblink
        12
    miniblink  
       2023-07-19 17:58:55 +08:00
    这工具不错
    Martens
        13
    Martens  
       2023-07-19 18:31:51 +08:00
    微信的数据库好像是 sqlcipher
    ellermister
        14
    ellermister  
    OP
       2023-07-19 18:35:36 +08:00
    @Martens 嗯,兼容的。微信自己搞了个 wcdb (卧槽 DB ),你可以看看。
    wenning
        15
    wenning  
       2023-07-19 20:53:36 +08:00
    如果能导出微信聊天记录进行备份也是不错的.这样手机上就可以定期直接全清了
    lhbc
        16
    lhbc  
       2023-07-19 20:55:30 +08:00 via Android
    装在备用机上,定期重装
    chotow
        17
    chotow  
       2023-07-19 21:44:49 +08:00
    🤣 配图里好多张某的粉丝群
    lovelylain
        18
    lovelylain  
       2023-07-19 22:00:38 +08:00 via Android
    @ellermister 以前微信自带的清理很废,但是现在的还行啊,不过要删两次才能彻底删除,第一次只删图片视频文件,第二次删语音和文字。你这个能删图片视频文件语音只保留文字吗?
    dianso
        19
    dianso  
       2023-07-19 22:19:37 +08:00
    @ellermister #3 误会了,我以为是删除缩略图这些,每次打开原图还会再生成缩略图占用更大体积,不打开就不占用。

    原来是彻底清除啊。

    我一般都是将重要数据备份到电脑端,定期随机重装,然后聊天记录恢复。
    x86
        20
    x86  
       2023-07-19 22:20:57 +08:00
    张小龙真爱粉啊
    ellermister
        21
    ellermister  
    OP
       2023-07-19 22:44:41 +08:00 via Android
    @lovelylain 你说的那几次我不知道是啥。
    我是说设置/一般/存储空间那里对聊天室清理,之前是清理不干净,图片和数据库依然存在残留。
    ellermister
        22
    ellermister  
    OP
       2023-07-19 22:50:26 +08:00 via Android
    @lovelylain 你可以把那几行删除数据库记录的代码屏蔽掉编译下就行。


    另外在这里说明下,微信数据库只要你在线记录所有加的群的聊天记录,记录每一个文字和表情符号,图片语音缓存。

    别人发了一个表情,你以为就占用几个字节,实际上他存了一个 xml 结构体,一个二进制的实体,还有一堆群用户关联的信息,还有索引信息。我估计几百 K 都少了吧。

    很多群一天到晚全是消息,全存到你的手机。群里发个公众号或者小程序或者浏览器分享的图文信息,又是一大块 xml ,全塞到你的手机里。
    ellermister
        23
    ellermister  
    OP
       2023-07-19 22:51:00 +08:00 via Android
    @x86

    @chotow

    那个是 mock 的数据要正向一些!😂
    anjingdexiaocai
        24
    anjingdexiaocai  
       2023-07-19 23:51:55 +08:00 via Android
    如果要 root 的话,那我还是备份到电脑,然后卸载软件,再备份回来😂
    wayne3602
        25
    wayne3602  
       2023-07-20 00:10:54 +08:00 via Android
    问一下,如果可以做成模块,是不是就可以利用 lspatch 等免 root 工具让无 root 用户使用了?毕竟无 root 用户还是居多的,对于家人,让他们 root 更不现实,而他们的群聊天记录往往比我们还多
    ellermister
        26
    ellermister  
    OP
       2023-07-20 00:18:43 +08:00 via Android
    可以的,劫持到微信的 db 连接,就行。只是我不会,调试也太麻烦,懒得弄。
    @wayne3602
    yhm2046
        27
    yhm2046  
       2023-07-20 03:08:02 +08:00
    好人一生平安,请问下我有一台 pixel2xl 手机进不了系统了可以恢复内存里面的聊天记录吗?
    Jirajine
        28
    Jirajine  
       2023-07-20 06:29:07 +08:00
    既然解密了微信的聊天记录数据库,那么对其进行导出到通用格式或 html 这种易于浏览的格式应该更有价值,至少 dump 一份原始数据库的未加密版放 db 软件里浏览。
    另外关于计算密钥的部分是不是过时了,Android 早就不能获取 IMEI 了,新版本密钥的生成方式肯定也不一样,frida 脚本应该是很不错的方式。
    @wayne3602 如果你能够 patch 微信,并且安装使用 patch 后的微信,且微信允许你这么做,还不封你号,那么用 frida 也是一样的,frida 也可以通过 patch 的方式注入到特定应用中。
    villivateur
        29
    villivateur  
       2023-07-20 08:48:08 +08:00
    我觉得更大的意义是能解密微信聊天记录啊,如果能做一个导出聊天记录的功能就更好了
    opengps
        30
    opengps  
       2023-07-20 08:50:23 +08:00
    漂亮,微信的臃肿确实不是自带聊天记录管理能解决的,重点是哪些 emo 表情的 data 存储根本清理不掉
    shinsekai
        31
    shinsekai  
       2023-07-20 08:52:07 +08:00
    其实借助电脑备份一下聊天记录,卸载后再转回来应该就可以实现同样的效果。另外 iOS 聊天获取可以通过 itunes 备份吧
    wayne3602
        32
    wayne3602  
       2023-07-20 09:14:44 +08:00 via Android
    @Jirajine 参考微信模块-微 x
    allplay
        33
    allplay  
       2023-07-20 09:31:36 +08:00 via Android
    常规手段操作:备份聊天记录至电脑,只选择你要保存的;卸载微信,清除残余文件;重装微信,把聊天记录恢复过来。
    这样确实能消除微信内被秘密备份的不可删除数据,且不必 root 。缺点是每次备份恢复时间稍长,一年弄一次即可。
    thetbw
        34
    thetbw  
       2023-07-20 09:52:54 +08:00
    导出和备份聊天记录感觉用户量更大,还有找到之前删除的好友这种,毕竟后悔药
    lqzhgood
        35
    lqzhgood  
       2023-07-20 11:03:10 +08:00
    推一下自己写的聊天记录归档工具,可以导出微信记录做冷备份,而且不管用没用到的字段都会导出,确保数据完整

    [卖瓜 🍉] Shmily-聊天记录归档 支持 QQ 、Wechat 、SMS 等
    https://v2ex.com/t/944851
    zzz22333
        36
    zzz22333  
       2023-07-20 11:05:54 +08:00
    @thetbw 同感
    ellermister
        37
    ellermister  
    OP
       2023-07-20 11:20:38 +08:00
    @villivateur 之前已经有人做了微信备份聊天记录到文件的项目,可以在 GitHub 搜一下,也是需要 root 。你也可以用我的这个源码改,如果你是只用一次也没必要,可以 dump 出不加密的 DB ,在电脑里随时用 SQL 工具看。

    我有想过,弄个服务在 Android 后台,用浏览器打开界面就能搜关键词,搜聊天记录,真 like 搜索,微信现在[牛逼]的搜索功能,明明聊天记录有,就是搜不到,太[牛逼]了。暂时感觉我自己没需求了,懒得搞。


    @thetbw 我想不起来主动删除的好友,但是如果是被别人删除的,那么 rcontact 表里就有你想要的,like %关键词% 查找就行。另外还有特别关注、拉黑的好友等,包括你加的所有群的群成员都在里面。



    @anjingdexiaocai
    @allplay 从手机备份到电脑是一种方式,但是依然是不能只备份联系人,不能搜索选择全选的操作。就会导致备份一大堆垃圾数据上去,如果你只有几十个少量联系人愿意手动挑选,那么你确实不需要这种功能。


    @shinsekai IOS 备份的也是全量备份,参考上一条,而且我是免费计划用户,只有 5GB ,无法备份。


    @yhm2046 把你存储卡的数据导出来到电脑里,你慢慢折腾,网上文章不少,先从解密数据库开始。可以计算 key ,从配置文件找 KEY 和 IMEI ,另外如果你打包的得当,可以在另外一台设备上登录的并拥有完整数据。


    我自己已经把微信垃圾清理干净了,备份到电脑,再恢复到全新 iPhone 上,最近会话和好友和聊天记录都在。但失去了好友请求记录,包含你什么时间加的好友,发的什么备注信息,反过来一样,有一个时间线先后信息,辅助记忆。

    有点想换回 Android ,虽然感觉少了点什么,但也还能用。
    cheese
        38
    cheese  
       2023-07-20 11:48:00 +08:00
    Releases 里的安装包无法使用,下载后改成 apk 后缀,手机安装的时候提示安装包损坏
    ellermister
        39
    ellermister  
    OP
       2023-07-20 11:49:40 +08:00
    @cheese 他不是 apk 程序,是命令行交互的程序。你需要在 shell 终端执行。
    cheese
        40
    cheese  
       2023-07-20 11:50:15 +08:00
    @cheese #38 乌龙了!!!原来不是直接安装的 apk
    wtdd
        41
    wtdd  
       2023-07-20 13:21:00 +08:00
    聊胜于无,看原理,这和 root 之后直接删图片视频等文件夹,区别不大吧
    ellermister
        42
    ellermister  
    OP
       2023-07-20 13:31:42 +08:00
    @wtdd 我的目的是仅删除群的所有记录。另外还要压缩数据库体积。
    huihuiHK
        43
    huihuiHK  
       2023-07-20 17:14:56 +08:00
    [email protected] 是你嘛?
    ellermister
        44
    ellermister  
    OP
       2023-07-20 18:41:27 +08:00
    @huihuiHK 做咩野?
    yagamil
        45
    yagamil  
       2023-07-21 02:30:59 +08:00
    如果只是删除群的所有记录,按着群,然后直接删除就可以了。

    不过实际这样,你把所有群消息删除完了,实际体积还有一部分是有残余的。吐槽下 wx 的架构,这体积占用太恐怖了。
    ellermister
        46
    ellermister  
    OP
       2023-07-21 03:28:38 +08:00 via Android
    @yagamil 基本无残留了,你看描述。
    skvi
        47
    skvi  
       247 天前 via Android
    从 Android 到聊天记录到电脑,一直提示不在同一个网络,macos 中给了 wechat 获取 location 的权限!双端的网络接口都关了 ip tracking ,甚至电脑开热点都不识别!更离谱的是有一次识别出来了,也说不在同一 ssid !
    ellermister
        48
    ellermister  
    OP
       236 天前
    @skvi mac 不清楚,如果 win 笔记本,试试关闭防火墙。热点好多都不太行,得连局域网 WIFI ,WIFI 别用公司那种,公司那种有可能会开 LAN TO LAN 的防火墙。
    skvi
        49
    skvi  
       236 天前 via Android
    @ellermister 相同环境,我换 weixin 其他账号可以,wechat 不行,但是我同事 wechat 又可以
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2742 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:25 · PVG 17:25 · LAX 02:25 · JFK 05:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.