📥 点击直接下载最新 Android 安装包 (v1.0.22 APK)
📦 Google Play 上架专供包 (v1.0.22 AAB)
极简时间打卡 App,基于 Expo (React Native) + SQLite,支持高德/系统(Google)双兼容定位,数据全本地存储。
modules/amap-location,目前尚未提供 iOS 原生桥接层,请勿直接在 iOS 环境下构建运行。modules/amap-location)⚠️ 本应用含自定义原生模块(高德定位 SDK),不能运行在 Expo Go 里,需用开发构建(development build)。
npm install
npm run android # 等价 npx expo run:android
首次运行会 prebuild 生成 android/ 并编译原生模块,需本地已配置 Android SDK。
# 测试包(preview profile,internal 分发 APK)
eas build --platform android --profile preview
# 一键发版(升版本 → EAS 构建 → 下载 → GitHub Release + 上传 APK)
# 需环境变量 EXPO_TOKEN、GH_TOKEN
npm run release -- --commit --push
在「我的 → 位置调试」里配置(均仅存本机,不上传):
| Key | 用途 | 说明 |
|---|---|---|
| 高德定位 Key | 定位 SDK 获取坐标 + 逆地理 | 需在高德开放平台绑定当前构建的包名 + 签名 SHA1 |
| 高德地图 Key(Web 服务) | 反查地名兜底 | SDK 已自带逆地理,此 Key 仅作兜底 |
react-native-maps 把某次行程的打卡点连成轨迹(连点成线,不做路径规划,不调 Directions API)app.json 的 android.config.googleMaps.apiKey 配置(构建前替换为真实 key)├── App.js # 底部三 Tab(打卡 / 洞察 / 我的)
├── index.js # App 入口 + 注册桌面小组件 task handler
├── modules/amap-location/ # 高德定位 Expo 原生模块(Kotlin)
├── privacy.html # 隐私政策公开页(托管 GitHub Pages)
├── widget/ # 桌面小组件(react-native-android-widget)
│ ├── Widget.js # widget 视图(FlexWidget/TextWidget 渲染)
│ ├── widgetData.js # widget 展示数据构建(headless 与 App 共用)
│ ├── widgetStrings.js # widget 最小语言字典 + 主题解析
│ └── widgetTaskHandler.js # widget 事件处理:添加/更新/点击打卡
├── src/
│ ├── screens/
│ │ ├── HomeScreen.js # 主界面:时间轴 + 一键打卡
│ │ ├── InsightsScreen.js # 洞察:统计 / 历史 切换
│ │ ├── ProfileScreen.js # 我的:设置 / 数据管理 / 位置调试 / 小组件说明
│ │ └── PrivacyAgreement.js # 隐私协议
│ ├── components/
│ │ ├── Timeline.js # 时间轴(线段化位移呈现 + 终点形态区分)
│ │ ├── HistoryView.js # 历史行程视图(搜索 / 9 类方式筛选 / 展开)
│ │ ├── CheckInButton.js # 打卡大按钮(全宽居中,轻按打卡 · 长按一步结程)
│ │ ├── TransportPicker.js # 出行方式选择(平滑水平滚动胶囊栏,9 种方式 + 自动居中聚焦)
│ │ ├── ModeIcon.js # 出行方式图标(9 种方式矢量映射)
│ │ └── charts/BarChart.js # 手绘 SVG 柱状图
│ ├── storage/
│ │ ├── store.js # 打卡记录 SQLite 读写
│ │ └── profile.js # 昵称等偏好
│ ├── backup/
│ │ ├── crypto.js # 加密:PBKDF2 + AES-256-CBC + HMAC-SHA256
│ │ ├── schema.js # 备份明文结构与收集/校验
│ │ ├── backup.js # 本地备份生成 / 分享 / 恢复
│ │ ├── webdav.js # WebDAV 云同步(上传 / 下载 / 测试)
│ │ └── schedule.js # 自动备份节流(开关 / 口令 / 上次时间)
│ ├── utils/
│ │ ├── location.js # 双兼容定位 + 地名反查 + 定位排查
│ │ ├── amapLocation.js # 高德定位封装
│ │ ├── withTimeout.js # 带超时的 Promise 竞速
│ │ ├── analytics.js # A→B 查询 / 历史行程分组
│ │ ├── stats.js # 中位数 / 地点聚类 / 格式化
│ │ ├── widgetRefresh.js # App 内主动刷新桌面小组件
│ │ └── updater.js # 版本检查
│ ├── config.js # 高德 Key 管理(读写 AsyncStorage)
│ ├── i18n/ # 多语言(zh / en)
│ ├── theme.js # 设计令牌:浅/深色配色、圆角、阴影
│ └── theme/ThemeContext.js # 主题上下文(system/light/dark)
└── scripts/release.js # 一键发版脚本
timeflow.db),无需服务器、无需账号privacy.html(与 app 内 PrivacyAgreement.js 内容一致){n},强化模态框 Chip 键名唯一性 (Q-1, Q-2, Q-5)。