>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Java

NagramXF 的架构解析及 Telegram 分支为何持续繁荣

如果你曾经看过官方 Telegram Android 客户端的源代码,你可能记得那种略微困惑的感觉。庞大的代码库 TMessagesProj、Java 和 C++ 的混合、大量的自定义 Views 和自研的界面渲染。尽管架构复杂,围绕 Telegram 客户端已经形成了一个完整的分支生态系统。开发者们不断尝试重新改造应用以满足自己的需求:有人添加隐藏的已读回执,有人移除广告或添加新的主题。

最近,我在 GitHub 上发现了 NagramXF 仓库。它是热门 Nagram X 客户端的一个分支,其作者决定不局限于单一分支,而是将多个知名项目的功能整合在一起:AyuGram、exteraGram、Cherrygram 和 OctoGram。

让我们来详细了解这个项目是什么,它的内部结构是怎样的,以及如何从源代码构建你自己的 APK。

最佳第三方客户端功能的集大成者

Android 替代 Telegram 客户端的发展史就像一套积木。首先是 Nekogram 分支,然后是 Nagram,后来是 Nagram X,现在我们来到了 NagramXF。项目作者 Keeperorowner 有一个简单的目标:以 Nagram X 的基础稳定性为基础,将其他闭源和开源分支的有用改进移植进来。

以下是整合到构建中的内容:

  • 来自 AyuGram 的功能:直接在设备上保存已编辑和已删除消息的历史记录、灵活配置"正在输入"状态,以及对话的隐藏已读回执。
  • 来自 exteraGram 和 Cherrygram 的自定义功能:精细调整的字体、图标样式、自定义聊天分隔线,以及不带作者的扩展消息转发菜单。
  • 来自 OctoGram 的小 UI 调整:快速复制链接、简化的资料查看,以及列表中的动画优化。

一个有趣的细节:在仓库描述中,作者坦诚地警告某些功能是通过对闭源构建版本进行逆向工程获得的。代码中保留了各个补丁原始作者的引用,对于这种类型的开源分支来说,这是相当难得的做法。

底层架构与结构特点

仓库相当大,不含子模块约 800 兆字节。里面是一个经典项目 TMessagesProj,但对模块和辅助工具进行了显著修改。

如果你查看包 tw.nekomimi.nekogram.helpers,Nekogram 的血统立即显现。例如,远程元数据和客户端配置管理绑定到类 BaseRemoteHelper,它从特殊服务频道读取参数。

该分支的架构建立在三个支柱之上:

  1. 基础 Telegram Android 代码,定期从官方仓库 DrKLO/Telegram 的上游拉取。
  2. 事件拦截层:在服务器发送删除或编辑命令之前,传入的消息被缓存到本地 SQLite 数据库(这就是 AyuGram 功能的工作方式)。
  3. UI 补丁:叠加在标准 Telegram Activities 和控制器之上的覆盖层,向设置菜单添加开关选项。

如何在本地构建项目

构建 Telegram 分支一直是一项独立的任务,但 NagramXF 有一个相当直接的指南。如果你想要深入研究代码或使用自己的密钥构建一个干净的版本,你需要 Android Studio、从 Telegram 开发者控制台获取的几个密钥,以及大约 15 分钟的空闲时间。

首先,克隆仓库以及所有子模块:

git clone --recursive --shallow-submodules https://github.com/Keeperorowner/NagramXF.git NagramXF

如果在初始克隆时忘记了 --recursive 标志,你可以手动拉取子模块:

git submodule update --init --recursive --depth=1

接下来,访问 my.telegram.org,登录并创建一个新应用以获取你的 TELEGRAM_APP_IDTELEGRAM_APP_HASH。没有它们,客户端将无法与 Telegram 服务器进行身份验证。

在项目根目录中,创建一个 local.properties 文件并添加你收到的凭证:

TELEGRAM_APP_ID=1234567
TELEGRAM_APP_HASH=0123456789abcdef0123456789abcdef

如果你要构建用于常规使用的发布版 APK,你还应该在那里添加你的密钥库参数:

KEYSTORE_PASS=your_keystore_password
ALIAS_NAME=your_alias_name
ALIAS_PASS=your_alias_password

现在你需要在代码中配置几个系统参数:

  • TMessagesProj/src/main/AndroidManifest.xml 中指定你的 Google Maps API 密钥(如果你希望位置共享正常工作)。
  • BaseRemoteHelper.java 文件中指定元数据频道 ID。
  • 如果需要通过 Google FCM 推送通知,将 google-services.json 放入 TMessagesProj/

之后,项目可以在 Android Studio 中打开,并使用标准的 assembleReleaseassembleDebug 任务进行构建。

谁会发现这个项目有用

像 NagramXF 这样的客户端在两种场景下很有趣。

首先,对于 Android 开发者来说。如果你希望了解消息拦截器、本地存储以及在 Telegram 庞大的遗留单体架构之上的补丁是如何在实践中实现的,NagramXF 清楚地展示了这一点。在这里你可以查看自定义菜单、网络事件覆盖和 NDK 使用的实现。

其次,对于那些觉得基础 Telegram 版本在设置方面过于受限的人。NagramXF 整合了以前需要在 AyuGram 和 exteraGram 之间做出选择的功能。所有内容都聚集在一个地方。

当然,你需要考虑风险:使用带有闭源补丁的第三方客户端需要对分支作者有信任。但如果你需要一个具有开放构建过程的可定制客户端,NagramXF 看起来是一个有趣的实验。

相关项目