IM 即时通讯的 Android 客户端(Kotlin + Jetpack Compose)。
与 iOS(../IMProgram)、Web(../im-web)功能对齐,后端为 ../IMServer。
可用状态(2026-09-07):能登录、收发文字与图片、看会话列表/通讯录/群资料/资料页, 支持撤回·引用·置顶·免打扰·删除会话、已读双勾、在线态、正在输入。 未做:转发/多选/收藏/编辑/@提及/扫码/推送、发视频语音文件、群管理写操作、设置页。 完整清单见
current_task.md「已知坑 / 限制」。
./scripts/install-hooks.sh # 每个 clone 跑一次,装 pre-commit 门禁
./scripts/test.sh # 体量门禁 + 日志红线 + 编译 + 单测用 Android Studio 打开本目录即可(local.properties 里的 SDK 路径按本机生成,不入库)。
后端要一起起:
cd ../IMServer && ./scripts/dev.sh --no-tail模拟器经 10.0.2.2:8080 连宿主机的后端(127.0.0.1 在模拟器里指模拟器自己)。
| 项 | 选择 | 理由 |
|---|---|---|
| 语言 | Kotlin 2.0 | Google 官方首选;不用 Java |
| UI | Jetpack Compose + Material3 | 声明式,与 Web 的组件化思路同构 |
| 配色 | 项目自有语义令牌,非 Material You 动态取色 | 三端要同一套 Telegram 绿;让系统壁纸决定主色会当场与 iOS/Web 分叉 |
| 网络 | OkHttp WebSocket | 能设请求头,走 PROTOCOL §1 首选的 Authorization: Bearer |
| 序列化 | kotlinx.serialization | 协议是 snake_case,@SerialName 映射干净 |
| 图标 | lucide(ISC 许可,待接入) | 与 Web 同一套;iOS 用 SF Symbols,三端语义对齐 |
| 文档 | 管什么 |
|---|---|
| CLAUDE.md | 工作约定、完成的定义、构建命令 |
| CODING_STYLE.md | 命名、文件组织、防巨文件、交付前自审清单 |
| docs/UI_COLOR.md | 本端令牌落地方式与 Android 特有约束 |
| docs/LOGGING.md | 本端日志入口与字段约定 |
current_task.md |
活快照:当前焦点 / 下一步 / 已知坑 |
跨端契约(协议、聊天交互、令牌总表、对称路径登记表)都在 ../IMServer/docs/。