# Migraine Log v1.0 — 交付说明（2026-10-28）

需求来源：`~/workspace/app-demand-shortlist-v1.md` 第 2 名「偏头痛发作记录（创意库 i247）」

## 需求复核结论（开工前快速复核，2026-10-28）

结论：**洼地判断未反转，照计划开工。** 复核证据（AppBrain 2026-10 数据）：

- 2025–2026 年持续有独立开发者新品进入这个类目且能拿到量：Cziko Apps《Migraine Tracker》（2025-07 上架，3.6k 安装，4.91★）、Companion App《Migraine Tracker & Diary》（2025-12，5.9k，4.48★）、Huki Labs《Simple Migraine Tracker》（2026-03，8.4k，4.40★）、Heroic Apps《Headache Hero》（2026-01，3.3k，4.49★）——说明需求真实、新进入者有活路。
- 头部产品（Migraine Buddy、MiG、Bearable）的共同问题仍是表单重、订阅墙、功能大而全；已有一条 1 星评论直指某竞品「不付费就没法用」。极简记录 + 报告导出的空位仍在。
- 需要如实标注的变化：类目在升温，小竞品比清单写作时更多了，同质化口径从「低」向「低偏中」漂移（与清单里对本条目的修正一致，不算反转）。差异化必须押在：发作中单手一键记录 + 给医生看的月度 PDF 报告，这两点已落实在第一版里。

## 产物

- APK：`~/workspace/your_files/MigraineLog-v1.0.apk`（15.6 MB，debug 签名，可直接安装）
- 源码：`~/workspace/migraine-log-android/`
- 包名：`com.migrainelog.app`
- 版本：versionCode 1 / versionName 1.0
- 系统要求：Android 7.0（minSdk 24）及以上，targetSdk 34
- 技术栈：Kotlin + Jetpack Compose 纯原生（无 WebView）；本地 SQLite 存储（SQLiteOpenHelper）；**零联网**（APK 未申请 INTERNET 权限，aapt 校验确认仅有 AndroidX 自动注入的内部权限）、无账号
- UI 语言：英文优先（全球 Play 定位）

## 已实现功能（第一版只做的 2 个功能，已全部落地）

**1. 发作一键记录（为发作中单手操作设计）**

- 首页大按钮「Log an attack — it just started」：点一次即以当前时间建档，不用先填任何表单
- 发作进行中，首页置顶大卡片：显示开始时间、可直接点选 1–10 强度（10 个大触控按钮）、64dp 高的「It ended now」大按钮一键结束、「Add details」补录入口
- 详情编辑页：开始/结束时间（日期 + 时间选择器，可补录过去的发作）、强度 1–10、疼痛部位（8 个预设多选 + 自定义）、诱因标签（16 个预设多选 + 自定义）、用药记录（自由文本，一行一条，如 "Sumatriptan 50 mg"）、备注
- 历史列表：每次发作的时间、时长、强度、部位、诱因一览，点开可改可删（删除有确认框）
- 配色用柔和低眩光的紫色系，避免发作时打开 App 被刺眼白光刺激

**2. 诱因标签 + 按月汇总 + 医生报告（PDF）**

- 报告页按月切换（左右箭头）：本月发作次数、发作天数、平均强度、总时长、平均时长
- 诱因频次统计（用户自己标注的诱因按次数排序）、用药频次统计（按记录原文汇总）
- 本月每次发作的明细卡片
- 一键导出 PDF 报告并调起系统分享：含月度汇总、诱因频次、用药频次、逐次发作明细（起止、时长、强度、部位、诱因、用药、备注），内容过长自动分页，页脚带记录工具声明

**设置页（支撑功能）**

- 免责声明卡片（原文）："Migraine Log is a personal record-keeping tool only. It does not provide medical advice, diagnosis, or treatment, and it cannot tell you what causes your attacks. If you have concerns about your health, please talk to a medical professional."
- 数据说明：全部记录只存本机、无账号、无联网、不外传（除非用户自己导出分享）
- 一键删除全部记录（带确认框）

## 医疗红线执行情况

- 全 App（含 PDF 报告）文案只描述「记录」本身：诱因一律写作 "Possible triggers"（用户标注的可能诱因），报告页脚注明 "does not provide medical advice"
- 无任何诊断、治疗建议、疗效宣称类表述；强度、诱因均为用户自填数据的原样呈现
- 上架前置（未做，属上架阶段）：Play 健康应用声明、健康数据隐私政策页面

## 未做事项（按第一版范围主动砍掉）

- 订阅/付费墙（需求文档的变现——报告导出付费——是后续版本的事，第一版报告免费导出）
- 云同步、账号、提醒通知、桌面小部件
- 图表可视化（趋势曲线等）、数据 CSV 导出、备份/恢复
- 多语言 UI、release 正式签名包（上架前需生成签名并出 AAB）

## 已知问题

- 未做真机/模拟器实测（构建环境无模拟器），已通过完整编译打包与 APK 结构/权限校验；首次真机建议验一遍：首页一键记录 → 结束发作 → 报告页导出 PDF → 分享
- 用药频次按整行原文汇总：同一药物写法不一致（如 "Sumatriptan 50mg" 与 "Sumatriptan 50 mg"）会算作两条——第一版按「如实呈现用户记录」处理，不做自动归一
- 进行中的发作时长只显示「ongoing」，不做实时走字计时
- 构建过程中曾出现一次 Kotlin 增量编译误报（ReportDoc 参数名），clean 后完整构建一次通过，与代码无关

## 重新构建

```bash
cd ~/workspace/migraine-log-android
# 需先确保代理 shim 在跑：python3 ~/workspace/android-sdk/proxy-shim.py（监听 127.0.0.1:18888）
JAVA_HOME=~/workspace/jdk-17 GRADLE_USER_HOME=/home/hatch/.gradle \
_JAVA_OPTIONS=-Djava.net.preferIPv4Stack=true ./gradlew assembleDebug
```
