timeflow

TimeFlow · 时光流

GitHub Release Platform

📥 点击直接下载最新 Android 安装包 (v1.0.22 APK)
📦 Google Play 上架专供包 (v1.0.22 AAB)

极简时间打卡 App,基于 Expo (React Native) + SQLite,支持高德/系统(Google)双兼容定位,数据全本地存储。

功能特性

平台支持

技术栈

快速开始

⚠️ 本应用含自定义原生模块(高德定位 SDK),不能运行在 Expo Go 里,需用开发构建(development build)。

1. 安装依赖

npm install

2. 运行 Android 开发构建

npm run android        # 等价 npx expo run:android

首次运行会 prebuild 生成 android/ 并编译原生模块,需本地已配置 Android SDK。

3. 打包

# 测试包(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 用途 说明
高德定位 Key 定位 SDK 获取坐标 + 逆地理 需在高德开放平台绑定当前构建的包名 + 签名 SHA1
高德地图 Key(Web 服务) 反查地名兜底 SDK 已自带逆地理,此 Key 仅作兜底

定位说明

线路轨迹地图(Google Maps)

项目结构

├── 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            # 一键发版脚本

数据说明

隐私政策

版本记录

v1.0.22 (2026-09-07)

v1.0.21 (2026-09-04)

v1.0.20 (2026-09-04)