Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DeepSeek Watch

Android 应用,监控 DeepSeek 平台账户余额与 Token 用量,支持桌面小组件。无需 API Key,WebView 登录即可获取全部数据。


功能

模块 功能
概览 账户余额(含充值入口)、当月消费、近 7 天消费曲线图(日金额标注)
用量 模型级用量拆分:请求数、Token、缓存命中率、消费金额
设置 WebView 登录 DeepSeek 平台,自动捕获 Token 和余额,可配自动刷新间隔
桌面小组件 余额 + 当月消费 + 当月 Token,无需打开 App

架构

┌───────────────────────────────────────────────┐
│                   UI Layer                    │
│  main.dart  (MultiProvider → 底部导航)          │
│  screens/  (Dashboard / UsageDetail / Settings)│
│  widgets/  (BalanceCard / ModelBreakdown)      │
└──────────────────┬────────────────────────────┘
                   │ Consumer / Provider.of
┌──────────────────▼────────────────────────────┐
│                State Layer                    │
│  providers/  (ConfigProvider / BalanceProvider │
│               / UsageProvider)                │
│  services/   (BalanceService / UsageService   │
│               / AuthService / WidgetService)  │
└──────────────────┬────────────────────────────┘
                   │ dio
┌──────────────────▼────────────────────────────┐
│                Data Layer                     │
│  models/  (Balance / Usage)                   │
│  utils/   (HttpClient / ApiConstants)         │
└───────────────────────────────────────────────┘

┌───────────────────────────────────────────────┐
│             Storage & Bridge                  │
│  flutter_secure_storage → Token + 余额持久化    │
│  SharedPreferences      → 小组件数据           │
│  MethodChannel          → 小组件实时更新        │
│  WebView JSChannel      → Token + 余额捕获      │
└───────────────────────────────────────────────┘

目录结构

lib/
├── main.dart                          # 入口、MultiProvider、底部导航
├── models/
│   ├── balance.dart                   # BalanceResult / BalanceInfo
│   └── usage.dart                     # UsageResult / UsageDaySummary / UsageModelSummary
├── providers/
│   ├── config_provider.dart           # Token + 余额安全存储
│   ├── balance_provider.dart          # 余额状态 + 小组件推送
│   └── usage_provider.dart            # 用量状态 + 小组件推送
├── screens/
│   ├── dashboard_screen.dart          # 概览:余额 + 消费 + 7天曲线图
│   ├── usage_detail_screen.dart       # 用量:模型级拆分明细
│   └── settings_screen.dart           # 设置:WebView 登录 / 自动刷新
├── services/
│   ├── balance_service.dart           # 余额 API(WebView JS 注入)
│   ├── usage_service.dart             # 用量 API(Platform 接口)
│   ├── auth_service.dart              # Token 验证
│   └── widget_service.dart            # 小组件数据推送(MethodChannel)
├── widgets/
│   ├── balance_card.dart              # 余额卡片(含充值按钮)
│   ├── model_breakdown.dart           # 模型拆分明细卡片
│   ├── usage_chart.dart               # 自定义图表 Painter
│   └── theme.dart                     # 主题配置
└── utils/
    ├── constants.dart                 # API 端点 / UA 常量
    └── http_client.dart               # Dio 封装

鉴权方式

仅需一次 WebView 登录,自动从 DeepSeek 平台网页中捕获:

  1. Token — 拦截 window.fetch / XMLHttpRequestAuthorization: Bearer xxx 请求头
  2. 余额 — 拦截平台页面自身 API 响应中的 total_balance 字段 + DOM 正则提取

Token 与余额均持久化到 flutter_secure_storage,App 重启后自动恢复。

API 端点

用途 方法 URL
账户余额 WebView JS 注入 页面响应拦截 + DOM 提取
Token 用量 GET platform.deepseek.com/api/v0/usage/amount?month=X&year=Y
消费金额 GET platform.deepseek.com/api/v0/usage/cost?month=X&year=Y

构建

环境

  • Flutter ≥ 3.38
  • JDK 21 / Android SDK 35

Debug

flutter pub get
flutter build apk --debug
# → build/app/outputs/flutter-apk/app-debug.apk

Release

# 首次:生成签名
keytool -genkey -v -keystore android/upload-keystore.jks \
  -keyalg RSA -keysize 2048 -validity 36500 -alias upload \
  -storepass <密码> -keypass <密码> -dname "CN=DeepSeek Watch"

# 配置签名
cat > android/key.properties << EOF
storePassword=<密码>
keyPassword=<密码>
keyAlias=upload
storeFile=upload-keystore.jks
EOF

# 构建(按架构分包 + 混淆 + 资源收缩)
flutter build apk --release \
  --split-per-abi \
  --obfuscate \
  --split-debug-info=build/symbols

# 输出
# build/app/outputs/flutter-apk/app-arm64-v8a-release.apk  (17.7MB)
# build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk  (15.1MB)
# build/app/outputs/flutter-apk/app-x86_64-release.apk        (19.2MB)

体积优化

手段 说明
--split-per-abi 按 CPU 架构分包,用户仅下载所需
--obfuscate Dart 混淆 + 符号剥离
R8 + ProGuard Java/Kotlin 收缩 / 优化 / 混淆
shrinkResources 移除未用资源
Tree-shake icons MaterialIcons 1645KB → 3.4KB

依赖

依赖 用途
dio HTTP 客户端
provider 状态管理
fl_chart 图表(折线/柱状)
flutter_secure_storage Token + 余额加密存储
webview_flutter 登录页面 + Token 捕获
home_widget 桌面小组件
url_launcher 跳转充值页面
shared_preferences 小组件数据缓存
intl 日期格式化

小组件数据流

Flutter (WidgetService)
  │ MethodChannel('com.deepseekmonitor/widget')
  │ invokeMethod('updateWidget', {balance, monthCost, totalTokens})
  ▼
MainActivity.kt
  │ SharedPreferences("widget_data") 写入
  │ AppWidgetManager.updateAppWidget() 立即刷新
  ▼
DeepSeekWidgetProvider.kt
  │ onUpdate → SharedPreferences 读取 → RemoteViews
  ▼
桌面显示

免责声明

非 DeepSeek 官方产品,仅用于学习研究。请遵守 DeepSeek 使用条款。Token 加密存储于设备安全区域。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages