Inugram
有很多 tga 分支,但这个是 mine
一个非常酷且 dog-pilled 的分支(或者更准确地说,patchset,见下文),基于 Telegram Android
主要目标
这个分支主要面向希望获得干净且稳健体验、摆脱所有臃肿内容的长期 Telegram 用户。
你可以期待:
- 移除烦人的功能
- 大量 qol 功能
- 使界面更美观、更整洁的 ui 调整
- 有主见的默认设置
同时,用户仍然可以禁用我们的自定义调整,以(基本上)实现 stock 体验(但为什么要这样做?)
参见 FEATURES.md 获取非详尽的添加/调整/修复列表(随补丁落地保持同步)。
为什么我应该用这个而不是 whatevergram?
我不知道。也许你不应该。
Inugram 主要供我个人使用,因为我受够了大多数分支的臃肿(以及缺乏透明度),而最新的 stock 版本几乎无法使用。 显然,我对良好 ui/ux 客户端和去杂乱化的愿景与许多每天在应用中花费数小时的长期 telegram 用户高度契合,所以我们在这里。
随意 fork 这个仓库,移除你不喜欢的补丁或添加你自己的,甚至“窃取”你喜欢的功能到你自己的分支。我真的不在乎。
patchset,而非 fork
与大多数基于 Telegram Android 的替代客户端不同,Inugram 是一个 patchset。 它不是传统意义上的 fork,而是应用于 stock 代码库的一组补丁。
这种方法的几个优点:
- 更容易进行 rebase,因为原生代码与 fork 代码清晰分离
- 更容易审计更改,因为所有修改都集中在一个地方
- 更容易让 bug 修复合并到上游(尽管我认为他们并不真正在意)
补丁集使用 stgit 以及 scripts/ 中的几个辅助脚本进行管理。
仓库布局
src/kotlin: 我们的自定义 Kotlin 代码src/res: 我们的自定义资源patches/: 原生补丁series: 补丁应用顺序upstream-commit: 固定的 Telegram 提交worktree/: 本地 Telegram 检出,已加入 gitignore
补丁按类型分组:
| 类型 | 描述 |
|---|---|
bugfix | 修复上游代码库中的 bug |
feature | 为应用添加一个包含性的功能(如果相关,可以是一个或多个)(qol、ui 调整等) |
debloat | 将原生“功能”隐藏在开关后面。你也可以称之为“去功能化” |
hooks | 在应用各个部分的小钩子,以便跳转到我们的自定义 kotlin 代码,便于维护 |
misc | 其他所有内容,如构建支持等 |
每个补丁都力求小巧且自包含。作为经验法则,我们应该能够移除一个补丁并且应用仍然可以构建,尽管这并不总是可能的。
在 stgit 中,补丁名称使用双下划线分隔,例如 patches/misc/whatever.patch 在 stgit 中变为 misc__whatever。
贡献
欢迎贡献,但在实现新功能之前请先 ping 我进行讨论
要求:Node.js 20+,git,stg
pnpm install
pnpm run setup
这会将上游克隆到 worktree/ 并在其中设置 stgit,同时包含所有当前补丁。
然后,你只需在 Android Studio 中打开(而非导入!)worktree/ 即可开始开发。它应该能立即构建。
添加新补丁
stg new misc__my-patch -m 'my patch description' # to create a patch
# ...do whatever you need in worktree/...
stg refresh # to "commit" the worktree changes into the topmost patch
pnpm run export # to export stgit into patches/
修改现有补丁
# option 1: edit the patch in-place via stg refresh
# ...do whatever you need in worktree/...
stg refresh -p misc__my-patch # --index to only append staged changes
pnpm run export
# *pretty much* same as above, but manually
# ...do whatever you need in worktree/...
stg new tmp-patch
stg refresh
stg rebase -i # move tmp1 below the patch you want to edit, and replace "edit" with "s"
pnpm run export
# option 2: push the patch to the top of the stack
stg float misc__my-patch
# ...do whatever you need in worktree/...
stg refresh
pnpm run export
经验法则:优先选择前者,但如果你遇到大量合并冲突,请尝试使用 float。
审计补丁交互
pnpm run lint-patches
pnpm run lint-patches -- --check
审计报告会指出那些完全回滚先前补丁或删除由某个补丁最后修改的行的后续补丁。--check 在发现其中任一情况时以非零状态退出。
致谢
- 原始的 Telegram Android - 本分支的基础
- 许多功能移植自 Nekogram、NagramX、materialgram
src/res/drawable/icplaceholder.jpg是 Chobles 的这幅艺术作品 的模糊版本- Tabler 图标由 Tabler Team 提供
- Solar 图标包由 480 Design 提供
- AdGuard URL 跟踪过滤器由 AdGuard 提供
本项目由 LLM 辅助:许多代码和补丁(以及未来的)都是由 claude 编写的。这并不意味着它是“AI 垃圾”,我仍然亲自审查所有代码, 但我绝不是 Android 开发者,所以它可能并不完美。只要你在 PR 中披露,我们欢迎 AI 辅助的贡献。
如果你对此有异议 - 那就去创建你自己的分支。
许可证
说实话,废除版权法,但让我们就说该仓库采用 MIT 许可证