上一轮只是"能编译"。这一轮在模拟器上真装了、真登录、真点了,才发现两个问题:
1. workspaces() / members() 直接按 List 解析,但服务端列表接口返回的是
{"items": [...]}。表现就是登录成功后首页红字「响应格式异常(HTTP 200)」,
而且工作区永远显示为空。新增 WorkspacePage / MemberPage 容器类型。
2. 之前 Api.kt 的请求体全是没加 @Serializable 的普通 data class(上一提交已修),
这次把成员/工作区的解析也按同样思路收口。
环境侧(写进 android/README + 新增 android/scripts/emulator.ps1):
- sdkmanager 拉不到远端索引,系统镜像是直连 dl.google.com 手动装的;
压缩包里多一层 x86_64/,要把内容提上一层,否则 AGP 找不到 system.img
- AVD 放工程内(~/.android 受限不可写),建 AVD 与启动都靠 ANDROID_USER_HOME / ANDROID_AVD_HOME
- 无头启动要 -no-window -gpu swiftshader_indirect
- 点按坐标要拿 uiautomator dump 的 bounds,别拿降采样截图猜
- adb shell input text 打不了中文(NPE),中文数据走接口或直接写库
验证(模拟器 API 35,连 fnsvr-01 的真库):
登录 → 建工作区 ShipFast → 任务列表显示 4 条中文任务(状态、截止日都对)
→ 勾选完成,条目从「进行中」消失(乐观锁生效)→ 工单页、知识页均正常渲染。
截图放进 2.Design/screens/android-{login,tasks}.png。
This commit is contained in:
@@ -9,6 +9,18 @@ BUILD SUCCESSFUL in 38s
|
||||
app/build/outputs/apk/debug/app-debug.apk 9.94 MB
|
||||
```
|
||||
|
||||
而且**真的在模拟器上跑通了**:登录 → 建工作区 → 任务列表(中文标题、状态、截止日、勾选完成)→ 工单列表 → 知识列表,全部打到真实后端。
|
||||
|
||||
| 登录 | 任务列表 |
|
||||
|---|---|
|
||||
|  |  |
|
||||
|
||||
一键起模拟器 + 装包(环境变量都替你设好了):
|
||||
|
||||
```bash
|
||||
pwsh -File android/scripts/emulator.ps1 -Install
|
||||
```
|
||||
|
||||
本机从零把编译链搭起来踩过的坑都固化在仓库里了,别再走一遍:
|
||||
|
||||
| 现象 | 原因 | 仓库里的解法 |
|
||||
@@ -68,8 +80,30 @@ app/src/main/java/com/dadao/task/
|
||||
└── KnowledgeScreen.kt 知识四态 tab、手记、按状态给动作(发布需 owner/admin)
|
||||
```
|
||||
|
||||
## 模拟器(本机搭建记录,别重复踩)
|
||||
|
||||
`sdkmanager` 在这台机器上拉不到远端仓库索引(`Failed to download any source lists!`,但直连
|
||||
`dl.google.com` 的 zip 是通的),所以系统镜像是**手动装的**:
|
||||
|
||||
1. 下 `https://dl.google.com/android/repository/sys-img/google_apis/x86_64-35_r09.zip`(1.66 GB),
|
||||
解压到 `%LOCALAPPDATA%\Android\Sdk\system-images\android-35\google_apis\x86_64`
|
||||
—— 注意压缩包里还有一层 `x86_64/`,要**把内容提上一层**,否则 AGP 找不到 `system.img`。
|
||||
2. 建 AVD 时把用户目录指到工程内(`~/.android` 在受限用户下不可写):
|
||||
```powershell
|
||||
$env:ANDROID_USER_HOME="$repo\.local\android-user"
|
||||
$env:ANDROID_AVD_HOME="$repo\.local\android-avd"
|
||||
avdmanager create avd -n dadao -k "system-images;android-35;google_apis;x86_64" -d pixel_6 --force
|
||||
```
|
||||
3. 启动必须带 `-no-window -gpu swiftshader_indirect`(无头环境下 GL 走软件渲染);
|
||||
`emulator -accel-check` 应显示 `WHPX ... installed and usable`。
|
||||
|
||||
驱动模拟器点按不要凭截图猜坐标——`adb shell input tap` 用的是**物理像素**,而截图常被降采样。
|
||||
用 `adb shell uiautomator dump` 拿 `bounds` 最稳。另外 `adb shell input text` 打不了中文(会 NPE),
|
||||
中文数据走接口造。
|
||||
|
||||
## 已知待办
|
||||
|
||||
|
||||
- 工单页还没做(Web 已有):需要"我指派的 / 我发起的"两栏 + 接收/开工/提交/验收按钮;
|
||||
接口在 `Api.kt` 里已经齐了(`tickets` / `ticketAction` / `verifyTicket` / `promote`)。
|
||||
- 明文令牌存储(`TokenStore` 里已标 TODO)。
|
||||
|
||||
Reference in New Issue
Block a user