FareBot:适用于 Android、iOS 与 Web 的开源 NFC 公共交通阅读器
FareBot 是什么?
FareBot (github.com/codebutler/farebot) 是一款开源的 Kotlin 多平台应用,让你可以读取并检查无接触公共交通智能卡上存储的数据。它使用纯 Kotlin 和 Compose Multiplatform 编写,并可在以下平台运行:
- Android – 原生 NFC API
- iOS – CoreNFC
- macOS – PC/SC 或 PN533 USB 读卡器(实验性)
- Web – WebAssembly + WebUSB(实验性)
该应用支持多种卡标准(ISO 7816、CEPAS、FeliCa、DESFire、MIFARE Classic、MIFARE Ultralight、NFC‑V),并可读取亚洲、欧洲、北美等地区 80+ 个交通系统的卡片。
对开发者为何重要
- 现代工具链 – 使用 Gradle KTS、Kotlin 2.3.0、Compose、Koin DI、Kotlin x serialization 等。
- 全栈文档 – 仓库包含活跃的 README、代码注释以及由 Claude Code 驱动的 dev‑container,可用于沙盒实验。
- 友好的贡献模式 – 所有代码均为 MIT/GPL‑free,PR 流程简洁。
关键功能
| 功能 | 描述 |
|---|---|
| 卡片发现 | 扫描 NFC 标签并列出可用卡类型。 |
| 完整卡片转储 | 读取所有 EF 文件,显示原始数据、时间戳和余额。 |
| 多平台 UI | 基于 Compose 的 UI,移动、macOS 与 Web 共享。 |
| 可扩展系统注册表 | 在单个 “registry” 文件中添加新交通系统。 |
| WebAssembly 示例 | 实验性网页构建,支持通过 PN533 USB 读卡器在 Chrome/Edge 上读取卡片。 |
| Dev‑container | 基于 Docker 的环境,预装 Java 21、Gradle 与 Claude Code。 |
支持的卡片(亮点示例)
- 日本 – Suica、Pasmo、Octopus、Edy
- 新加坡 – EZ‑Link、NETS FlashPay、Octopus
- 德国 – VDV‑Bus、VVS
- 英国 – Oyster、TfL 卡(有限的 MIFARE 支持)
- 美国 – Clipper、Ventra、ORCA(DESFire)
完整列表已记录在 README;仓库甚至处理了诸如 MIFARE Classic 加密密钥等特定卡片的细节。
快速入门
- 克隆仓库
git clone https://github.com/codebutler/farebot.git cd farebot - 构建并运行(Android)
make android-install # 通过 ADB 安装到已连接的设备 - 构建并运行(iOS)
make ios-install # 安装到实体 iPhone - 构建并启动网页
make web-run - 运行测试
make test
提示: dev‑container(
.devcontainer/)为你提供沙盒编辑器,可安全运行 Claude Code 或实验仓库而不受风险。
贡献流程
- Fork 仓库。
- 创建功能分支。
- 添加/修改代码;运行
make test。 - 提交拉取请求。
所有贡献者会在 Contributors 部分得到认可。仓库拥有 30+ 位贡献者和 1 k+ 星标,展现了活跃的社区。
许可证与社区
FareBot 采用 GPL‑3.0 许可证发布 – 免费使用、修改和再分发,只要衍生作品保持相同许可证。项目欢迎通过 GitHub PR、issue 或添加新交通系统适配器进行贡献。
启示: 如果你正在构建 NFC‑支持的交通应用,或仅仅想了解生产级 Kotlin Multiplatform 代码库的结构,FareBot 是必读之作。它将真实卡片支持、实验性网页功能和完整文档结合,为开源参考树立了标杆。
原创文章:
查看原文