Thunderbird for Android 开源项目全解析从 K-9 Mail 继承到多应用模块化架构【免费下载链接】thunderbird-androidThunderbird for Android – Open Source Email App for Android (fka K-9 Mail)项目地址: https://gitcode.com/gh_mirrors/th/thunderbird-androidThunderbird for Android 是 Mozilla 旗下的开源 Android 邮件客户端本仓库是其完整源码同时产出 Thunderbird 与 K-9 Mail 两个应用。本文以仓库根目录 README.md 为骨架结合 settings.gradle.kts、SECURITY.md、docs/engineering 与 docs/architecture 等仓库资源系统讲解项目的定位、下载渠道、社区协作方式、工程流程、K-9 Mail 渊源以及最关键的Fork 改造 OAuth 客户端实战细节读完即可掌握该仓库的模块布局与二次开发入口。项目定位基于 K-9 Mail 的隐私优先邮件应用README 开门见山地给出项目定位Thunderbird for Android 是一款强大、隐私优先的邮件应用支持在一个应用中管理多个邮箱账户并提供统一收件箱Unified Inbox以提升生产力。它的技术底座是有着丰富开源邮件历史的 K-9 MailREADME 原话Thunderbird for Android is based on K-9 Mail, which comes with a rich history of success and functionality in open source email。关键的产品原则在 README 中表述为Thunderbird never treats your private data as a productThunderbird 从不把你的私人数据当作商品。这一隐私承诺落实在代码层面体现为仓库中对网络安全的重视所有网络连接强制使用 TLS 并做证书校验敏感凭据不落明文见 docs/architecture/README.md 的安全章节以及独立成模块的 OpenPGP 加密支持plugins/openpgp-api-lib。从构建配置看这是一个单仓库多产物工程settings.gradle.kts中同时 include 了:app-thunderbird与:app-k9mail两个应用模块共享:app-common公共代码根项目名为tfa启用了TYPESAFE_PROJECT_ACCESSORS特性预览并要求Java 21环境构建时会对JavaVersion.VERSION_21做兼容性检查否则直接报错提示安装 JDK 21。获取应用下载渠道与版本矩阵README 列出了 Thunderbird for Android 的全部官方获取渠道按版本区分正式版ThunderbirdGoogle Play、F-Droid 均有发布。Beta 版Thunderbird Beta同样覆盖 Google Play 与 F-Droid包名不同对应元数据目录 app-metadata/net.thunderbird.android.beta。使用 Beta 版可以提前体验当前开发中的新特性。GitHub Releases直接从发布页获取构建产物。FFUpdater一个 F-Droid 上的应用可安装来自 ftp.mozilla.org 的最新版本。Obtainium可在 Additional options 下的 Filter release title by regular expression 中填入Thunderbird过滤出对应版本。上述渠道在仓库中都能找到对应证据商店元数据按包名与应用分目录维护如 app-metadata/net.thunderbird.android、app-metadata/net.thunderbird.android.beta 与 app-metadata/com.fsck.k9内含title.txt、short_description.txt、full_description.txt及多语言changelogs/。各渠道的依赖与 badging 信息沉淀在 app-thunderbird/badgingfoss/full × Beta/Daily/Release 六个变体与 app-thunderbird/dependencies 中。README 还特别提醒签名证书的 SHA-256 指纹记录在 SECURITY.md。安装 APK 前可用以下命令核验证书apksigner verify -v --print-certs path-to-apk三个产物的指纹在 SECURITY.md 中均有记录其中 Thunderbird 正式版指纹为B6:52:47:79:B3:DB:BC:5A:C1:7A:5A:C2:71:DD:B2:9D:CF:BF:72:35:78:C2:38:E0:3C:3C:21:78:11:35:6D:D1Beta 版与 K-9 Mail 指纹各不相同——这也是下面Fork 时必须更换 OAuth 客户端的直接原因之一。安全背书CASA 评估与第三方审计仓库的 SECURITY.md 提供了两个安全事实可直接作为项目可信度的依据CASA 评估Tier 2Google 要求申请 Gmail 受限 scope 的应用每年接受 Cloud Application Security Assessment 审查。Thunderbird for Android 与 K-9 Mail 已由 ADA 认可的评估机构 NetSentries 完成 Tier 2 评估覆盖更广泛的 Gmail 功能访问。OSTIF / 7ASecurity 安全审计2023 上半年该代码库与开源技术改进基金OSTIF及 7ASecurity 合作完成了一次全面安全审计。这两项都是 README 之外、同样位于仓库内的官方事实SECURITY.md读者可将它们作为评估项目安全性的参考。遇到问题与参与讨论官方支持渠道README 明确区分了不同诉求对应的沟通路径应用行为异常、疑似 bug先查知识库与 FAQ确定是 bug 后到官方 issue 跟踪器提交 issue。功能建议不在 GitHub Issues 直接提新想法而是通过 Mozilla Connect 的 Ideas 专区提交并投票被接受并排期后维护者才会创建对应 GitHub issue这一点在 docs/CONTRIBUTING.md 中有更细的说明unconfirmed标签的 bug 暂不接受贡献tb-team标签为维护者保留。实时交流Thunderbird 社区使用 Matrix分为普通讨论频道#tb-android:mozilla.org、开发频道#tb-android-dev:mozilla.org与更广的社区空间。Roadmap 与工程流程RFC → Technical Design → ADRRoadmap 追踪README 指向项目 RoadmapGitHub Projects与核心团队的 sprint board。仓库内部工程流程的完整说明位于 docs/engineering/README.md其核心是三支柱模型Roadmap路线图用 Notion Epic 与 Notion Milestone 承载高层目标是维护者资源规划的主导输入。Public Delivery公开交付用 GitHub Milestone Issue、GitHub Feature Issue、GitHub Task Issue 跟踪交付什么、何时交付是交付工作的真相来源也是外部贡献者可见的层面。Proposals Decisions提案与决策以 RFC、ADR、Technical Design、User Journey 等仓库内文档沉淀为什么做、怎么做形成可长期检索的技术记录。贡献者视角的工程流程README 提到的三类文档在 docs/engineering 目录中均有实体docs/engineering/rfcs/README.mdRFC用于在实现前对齐技术方向尤其适合存在多种合理方案、影响面广或范围不清晰的情形。docs/engineering/technical-designs/README.mdTechnical Design描述已接受方向的实现细节schema、API 契约、迁移方案、构建工具链等。docs/engineering/adr/README.mdADR记录持久性的架构决策决策是什么、为什么、后果是什么。按 docs/engineering/README.md 的常见场景指引选择路径场景需要的制品流程小修复/小改进可选Task Issue PR直接写代码需要跟踪再建 issue标准功能/有限变更Milestone Issue Feature/Task Issues PR先定义交付结果再拆解实现复杂功能/重大变更Milestone Issue Technical Design Issues PRs先定目标再用 Task Issue 产出一份 Technical Design新技术方向/大影响RFC Technical Design Milestone Issue Issues PRs先用 RFC 达成共识根本性架构决策ADR RFC PR直接记录决策与后果路线图驱动工作Notion Epic Milestone Issue Issues PRs从高层目标对齐到公开交付外部贡献者的标准起点是从已有的 GitHub Bug/Feature/Task Issue 出发先阅读 docs/CONTRIBUTING.md 与 docs/contributing/contribution-workflow.md含分支、提交、PR 全流程再参考 docs/contributing/development-environment.md 搭建 Android Studio 开发环境。源码布局面向双应用与未来 Kotlin Multiplatform 的模块化架构虽然 README 本身不展开架构但仓库根目录的 settings.gradle.kts 与 docs/architecture/README.md 完整印证了它的技术骨架。整个工程按以下模块类型组织应用模块:app-thunderbird、:app-k9mail是两个应用的入口各自还有debug/daily/beta/release等构建变体源码目录如 app-thunderbird/src。公共应用模块:app-common两个应用共享的代码。功能模块feature:*如:feature:account:setup账户设置、:feature:mail:message:composer写信、:feature:notification:api/impl通知、:feature:widget:*桌面小部件等每个模块再细分api与internal子模块。核心模块core:*如:core:common、:core:featureflag功能开关、:core:logging:*日志体系、:core:configstore:*配置存储等被多个功能模块复用。邮件协议与后端:mail:protocols:imap|pop3|smtp协议实现与:backend:imap|pop3|jmap新架构下的后端抽象jmap模块的存在说明工程正面向 JMAP 协议演进。遗留模块legacy:*即从 K-9 Mail 继承的旧代码正在逐步迁移到新架构。库模块:library:html-cleaner、:library:pii-safePII 安全注解与编译器插件等。CLI 工具:cli:autodiscovery-cli、:cli:weblate-cli等服务于自动发现、翻译同步等工程化任务。架构文档docs/architecture/README.md进一步说明其设计原则面向未来 Kotlin Multiplatform 的兼容性设计、离线优先Offline-First本地数据库为单一真相来源、后台同步、操作队列、冲突解决、Clean Architecture 三层UI/Domain/Data与 API/Internal 分离、依赖倒置UI 采用 Jetpack Compose 改进版 MVI 模式依赖注入使用 Koin错误处理偏好 Outcome 模式与密封类而非异常。K-9 Mail 渊源同代码、双应用README 用一个专章说明 K-9 Mail 与本项目的关系2022 年 6 月K-9 Mail 加入 Thunderbird 家族成为 Thunderbird for Android 的基础。此后两个应用持续同步更新因此它们看起来几乎一样是刻意为之——它们基于同一套代码只有部分功能会针对 Thunderbird 选择性启用例如从 K-9 导入这类更适合 Thunderbird 的功能。仓库布局为这一事实提供了直接证据两个应用共享:app-common模块app-common并在settings.gradle.kts中由同一工程构建。共享功能模块通过feature:thundermail区分差异:feature:thundermail:api提供公共 API:feature:thundermail:thunderbird与:feature:thundermail:k9mail分别是两个应用的适配实现。主题系统同样双轨:core:ui:legacy:theme2:k9mail与:core:ui:legacy:theme2:thunderbird。若仍想继续使用 K-9 Mailrobot dogREADME 给出了其 Google Play、F-Droid、Obtainium 的获取方式。Fork 实战必须替换 OAuth 客户端配置README 的Forking章节是本仓库中最重要的二次开发实战指引原文指出如果要用本项目的 fork必须把 OAuth 客户端配置替换为你自己的 OAuth 客户端涉及两个文件app-k9mail/src/{debug,release}/kotlin/app/k9mail/auth/K9OAuthConfigurationFactory.kt app-thunderbird/src/{debug,daily,beta,release}/kotlin/net/thunderbird/android/auth/TbOAuthConfigurationFactory.kt原因在 README 中表述得很清楚防止与主应用在同一台设备上共存时产生冲突。若 fork 版沿用官方 OAuth 客户端凭据两个应用使用相同的redirectUri完成 OAuth 回调系统级意图解析与令牌归属都会出现歧义。仓库中这两类文件确实存在且覆盖了全部构建变体K-9 侧app-k9mail/src/debug/kotlin/app/k9mail/auth/K9OAuthConfigurationFactory.kt与app-k9mail/src/release/kotlin/app/k9mail/auth/K9OAuthConfigurationFactory.kt。Thunderbird 侧app-thunderbird/src/beta|daily|debug|release/kotlin/net/thunderbird/android/auth/TbOAuthConfigurationFactory.kt四个变体。Fork 时的操作清单如下注册自己的 OAuth 客户端在目标邮件服务商如 Google、Microsoft 等的开发者控制台创建 OAuth 2.0 客户端拿到自己的 client id/secret。替换配置工厂在上述两个 Factory 文件中填入自己的客户端凭据。更换redirectUri确保与主项目使用的 redirect URI 不同避免与官方应用在设备上互相干扰。按变体分别处理注意debug、beta、daily、release各变体是独立文件fork 时每个构建变体都要替换否则调试包与发布包会使用不同凭据导致行为不一致。OAuth 相关能力在功能模块中亦有完整实现可参考例如feature/account/oauthfeature/account/oauth模块承载 OAuth 授权流程feature:account:server:settings处理账户服务器配置配合 docs/architecture/README.md 的安全章节可知OAuth 令牌会通过安全凭据存储而非明文保存。参与贡献与翻译README 明确欢迎所有人贡献并给出几条路径开发懂一点 Kotlin 即可从 docs/CONTRIBUTING.md 的指引开始内含贡献工作流、开发环境搭建、工程流程、架构文档、开发/质量/测试指南的完整索引。翻译通过 Weblate 平台进行几分钟即可完成首次翻译仓库内 docs/contributing/translations.md 与 docs/contributing/managing-strings.md 分别说明翻译参与方式与字符串管理规范。财务支持Thunderbird 完全依靠用户捐赠维持运营README 提供了捐赠入口。需要留意的是所有贡献者都应遵守 Mozilla Community Participation Guidelines社区参与准则仓库内也有 CODE_OF_CONDUCT.md。许可证与安全报告许可证Thunderbird for Android 采用 Apache License, Version 2.0。安全漏洞报告通过 SECURITY.md 提供的漏洞报告表单提交官方鼓励社区帮助项目保持安全。总结Thunderbird for Android 不是一次从零开始的新邮件应用而是 K-9 Mail 二十余年开源积累之上、面向未来 Kotlin Multiplatform 与离线优先架构的现代化重写。本文梳理的下载渠道、工程流程RFC/ADR/Technical Design、双应用模块布局、OAuth fork 改造要点均以仓库根 README.md 为主线、以 settings.gradle.kts、SECURITY.md、docs/engineering 与 docs/architecture 为佐证。对于想要二次开发或 fork 的开发者最短路径是阅读 docs/CONTRIBUTING.md 了解协作规范 → 按 docs/contributing/development-environment.md 搭建环境 → 参考本仓库模块布局定位代码 → 按上文清单替换 OAuth 配置后构建自己的发行版。【免费下载链接】thunderbird-androidThunderbird for Android – Open Source Email App for Android (fka K-9 Mail)项目地址: https://gitcode.com/gh_mirrors/th/thunderbird-android创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考