Skip to content

WCX v343

Choose a tag to compare

@github-actions github-actions released this 24 Oct 12:09
· 131 commits to master since this release
642b639

WCX v343

🐛 修复:防撤回(本版重点)

  • 拦截后图片 / 语音 / 视频打不开
    之前只拦住「插入撤回提示」并事后还原数据库:文字能回来,但微信已经把这条消息的媒体资源判成撤回 —— 图片提示「已被清理」、语音和视频播放失败,撤回前没点开过的更是救不回来。
    现在直接跳过微信的撤回处理入口(doRevokeMsg):微信不认为发生过撤回,媒体按正常消息下载与播放,无论撤回前有没有点开过,什么时候点都能看 / 能播。
  • 拦截后「已撤回」标记消失
    跳过微信处理后连标记一起没有,现由模块按 msgSvrId 反查原消息自行标记,徽标(变淡 + 文本 / 图标)与旧版系统提示都恢复正常。
  • 旧版样式给自己撤回也插「已阻止」提示
    微信会先把原消息改写成系统提示,连 isSend 都变成 0,按数据库判断永远判成「对方撤回」。改用三路判定(撤回文案 replacemsg / 数据库内容 / isSend),并给提示按 msgId 去重 —— 同一条撤回只插一次。
  • 撤回目标消息识别
    改用 revokemsg XML 里的 <newmsgid>,修正偶发「标记到错误消息」。
  • 撤回入口定位加 allowFailure:个别设备上定位失败只退回原来的双层拦截,不会影响其它功能。

🐛 修复:开启「屏蔽铃声」后微信卡死 / 闪退

崩溃日志指向 ClassCastException: Return value's type from hook callback does not match the hooked method:

  • hook 里对 void 方法写了 result = true/false,libxposed 校验返回值类型后直接抛异常(一进首页 resume 就崩)
  • 呼出 / 呼入两个开关默认就是开的,用户无感知就吃到了这个 hook → 现改为默认关闭
  • 去掉 name = "playSound" 的宽匹配兜底(命中面太广,会误伤其它音频播放)
  • 修复 val scene = "scene" 常量判断 bug(这条路径此前从未真正生效)
  • 所有 hook 增加返回类型校验(canSkip),非 void 方法不再跳过

✨ 新增:联系人资料页「添加时间」

  • 显示格式:2023-03-02(1332天),天数每次进资料页按当天日期重算(今天 100 天、明天 101 天)
  • 微信没记录该信息时,按与该好友最早一条聊天记录估算,并标注「按最早聊天记录」
  • 当前微信版本没有这个字段 → 当前微信版本不支持查询
  • 对方还不是好友 → 该好友未添加,无法查看添加时间
  • 位置在资料页的自定义区域(与「获取实名尾字」等同一区域,排在最前),不修改微信原生布局

✨ 改进:悬浮标题栏

  • 布局改为下拉选择「一体式 / 分段式」(参照上游 WeKit 的 INTEGRATED / SEPARATED)
  • 老配置自动兼容:之前开过三段式的,升级后仍是分段式;切换时同步写旧键,回退旧版本不会错位

安装包:app-standard-arm64-v8a-release.apk 适配绝大多数机型;老框架选 legacy,32 位机型选 armeabi-v7a。