Files
DadaoTask/android/README.md
T
Steven 0c53aa7062 feat(m0): 后端骨架 + Web/安卓前端骨架 + 设计文档
- backend: FastAPI 应用工厂、统一错误信封、JWT、短信登录、工作区/成员/邀请、幂等中间件
- alembic 0001: workspace/member/invitation/audit_log/app_user + RLS 策略 + 双角色 GRANT
- tests: 认证/工作区/租户隔离/幂等 四组用例(尚未在本机执行)
- web: React18+Vite 骨架(登录、工作区、邀请落地页)
- android: Compose 骨架(登录、工作区列表)
- 2.Design: PRODUCT-PLAN / ROADMAP-M0-M1 / NAMING / DEVELOPMENT
2026-10-28 02:38:53 +08:00

37 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 安卓端(M0 骨架)
Kotlin + Jetpack Compose。当前只做了 M0 的骨架:登录、工作区列表、新建工作区、生成邀请码。
任务/工单/知识(M1 起)在 `ui/` 下按同样结构扩展。
## 打开与运行
1. Android Studio 打开 `android/` 目录(它会把缺失的 Gradle Wrapper 补齐)。
2. 在 `android/local.properties` 里指定后端地址(模拟器访问宿主机用 `10.0.2.2`):
```
dadao.apiBase=http://10.0.2.2:8100
```
3. 运行 `app` 配置。后端需先在本机 8100 端口起来。
> 仓库里**没有提交 `gradle/wrapper/gradle-wrapper.jar`**(二进制,且 M0 阶段由 Android Studio 生成更稳)。
> 等 M5 正式做安卓时把 wrapper 一起提交,保证构建可复现。
## 结构
```
app/src/main/java/com/dadao/task/
├── MainActivity.kt 入口 + 极简三态路由(Splash/Login/Home)
├── data/
│ ├── Api.kt OkHttp + kotlinx.serialization;信封解包、业务码抛 ApiException
│ └── TokenStore.kt 令牌本地存储(M5 换 EncryptedSharedPreferences)
└── ui/
├── Theme.kt 与 Web 一致的墨青 + 陶土色板
├── LoginScreen.kt 手机号 + 验证码(开发环境后端回显验证码)
└── HomeScreen.kt 工作区列表 / 新建 / 生成邀请码
```
## 已知待办
- 明文令牌存储(`TokenStore` 里已标 TODO),M5 换 Keystore 加密。
- 无离线缓存,弱网直接报错——与产品 D7「在线优先」一致。
- 邀请链接 `https://dadaotask.com/join/<wsId>/<code>` 已在 Manifest 注册,但落地处理尚未实现。