如果你也是 Telegram 的重度用户,大概早就对那个“令人抓狂”的设计忍无可忍了:明明已经把某个讨厌的家伙拉进了黑名单,但聊天列表里依然冷不丁冒出一条“[已屏蔽的消息]”,或者他在群组里的发言只是被折叠了一下,依然会占用你的注意力。

强迫症表示:这也算屏蔽?

Telegram 默认屏蔽后提示消息的截图

Telegram 默认屏蔽后依然显示的“[已屏蔽的消息]”提示

今天给大家分享一个硬核但非常实用的技术向操作——把第三方客户端 Ayugram 中那个备受好评的“彻底屏蔽消息(Fully Hide Messages from Blocked Users)”功能,魔改移植到另一个流行的客户端 Forkgram 里。这样一来,世界才算真正清静。

为什么非得折腾这一步?

大家可能会问,直接用 Ayugram 不就好了吗?确实,Ayugram 原生就支持这个功能,但很多朋友(包括我)更喜欢 Forkgram 的特定 UI 交互或者某些底层优化。由于 TG 生态的客户端“萝卜青菜各有所爱”,这种功能互补的需求就一直存在。

Ayugram 和 Forkgram 客户端的图标对比

Ayugram(左)与 Forkgram(右),功能移植的目标对象

原版 Forkgram 的处理方式比较“委婉”,屏蔽后用户依然会有占位符。而我们移植的目的,就是从底层逻辑上,让被屏蔽者的消息在客户端渲染层直接消失,仿佛这个人从未存在过。

移植前的准备:工具篇

这不是一键安装包,需要大家动动手。在开始之前,请确保你已经准备好了以下环境:

  1. Android Studio / VS Code:用于查看和编辑代码。
  2. Telegram Source Code:Forkgram 和 Ayugram 都是基于 Telegram 官方源码魔改的,你需要有源码基础才能定位修改点。
  3. Decompiler 工具(可选):如果你不想直接编译源码,也可以反编译 APK 修改 Smali,但难度较大,容易报错,不推荐新手尝试。
  4. 基础 Java/Kotlin 知识:你需要看懂逻辑,主要是关于消息过滤和 UI 绘制的部分。

核心移植思路:如何做到“彻底消失”?

移植的核心不在于改图标,而在于修改消息过滤逻辑(Filter Logic)聊天列表渲染(Chat List Rendering)。这里不贴枯燥的代码片段,重点讲一下原理和实操步骤。

第一步:定位 Ayugram 的屏蔽逻辑

在 Ayugram 的源码中(通常在 MessagesController 或类似的消息控制类中),你可以找到处理“已屏蔽用户”的逻辑。Ayugram 做了一个增强判断:

  • 当收到一条消息时,先校验发送者 ID 是否在用户本地的黑名单 ID 列表中。
  • 关键点:如果校验通过(即在黑名单中),不仅标记为 blocked,还会直接拦截该消息进入数据库的特定视图,或者在 UI 读取时直接跳过此对象。

你需要寻找类似 isBlockedignoreMessages 的关键词,找到它处理布尔值判断的那个 Method。

第二步:在 Forkgram 中找到对应接口

打开 Forkgram 的源码,寻找对应的消息接收和展示入口。通常 Forkgram 也会有自己的屏蔽逻辑,只是它的逻辑是“显示占位符”。

你需要将 Ayugram 那个“直接丢弃/不渲染”的判断逻辑,复制并覆盖到 Forkgram 的对应位置。这就好比把一个强力过滤网换到了另一个水管接口上。

第三步:适配 UI 交互(防止出现空白行)

移植中最容易出 bug 的地方是 UI。如果你只是拦截了消息,但聊天窗口没重绘高度,就会出现奇怪的空白行。

在移植完逻辑后,务必检查 DialogCellChatActivity 相关的布局文件。确保在消息被过滤后,列表能自动吸附,不留视觉上的“残影”。Ayugram 的代码里通常包含了处理 Adapter 刷新的逻辑,这一部分也要一并移植过来。

编译、签名与安装

代码改完后,剩下的就是常规操作了:

  1. 在 IDE 中进行 Build 过程,生成 APK 文件。
  2. 签名:由于魔改了客户端,必须重新签名才能安装,否则覆盖安装会失败。
  3. 安装测试:先找个小号互发消息测试。拉黑小号后发送消息,看主号是否还能看到任何提示。

可能遇到的问题与解决方案

Q: 移植后闪退怎么办? A: 通常是因为 Method 混淆或者参数类型不匹配。检查一下你复制的代码中调用的变量名在 Forkgram 里是否存在,或者是否因为 ProGuard 混淆导致找不到引用。

Q: 群组消息也一起消失了? A: 注意排查逻辑范围。有些代码逻辑可能不仅影响私聊,还影响了群组的 ChatObject。如果你希望在群里彻底静音某人,那是好事;如果你只想在私聊屏蔽,可能需要加一层 isChat 的判断条件。

写在最后

这种代码移植虽然有点折腾,但一旦搞定,带来的体验提升是巨大的。对于那些追求极致干净数字生活的朋友来说,这绝对值得一试。Forkgram 本身的轻量加上 Ayugram 的硬核屏蔽功能,简直是绝配。

如果你对具体的代码文件路径感兴趣,可以自行去 GitHub 上搜索两个项目的源码进行比对(关键词搜 blocked 准没错)。动手能力强的玩家,这周末可以折腾起来了!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭