Releases: jilin0105/WorkBuddy2API-Android
Release list
最新构建(latest-build)
自动构建产出的 debug APK。
| 项 | 值 |
|---|---|
| 提交 | fdd6d2cc3f1e6367eee3284da6f5c60090e5fbd0 |
| 分支 | main |
| APK 大小 | 16M |
| compileSdk | android-36(CI 覆盖,仓库默认 37.0,见 build.gradle.kts) |
使用 debug 签名。本仓库为本地自用网关工具,不发布应用商店。
安装前请先卸载设备上的旧版本,或确认签名一致。
v1.2.3 · 修正收起方向
修正:球现在是真的躲到屏幕边缘
上一版的收起方向搞错了 —— 球不是躲到屏幕边缘,反而像往屏幕里缩了一下。
原因
上一版只偏移了绘制内容,没有把窗口贴到屏幕边缘:
球在右半屏(screenW=1080, ball=156):
窗口还在 x=916(距边 8dp)
绘制球移到 [994, 1150]
→ 窗口右边 1072 距屏幕边只有 8px
→ 溢出的部分全在屏幕外,可见的 [994,1072] 仍是完整一颗球
→ 观感:球整体还在屏内贴着边,甚至像往里缩
修正
改成两步,缺一不可:
- 窗口先真正贴死到屏幕边缘(
targetX = screenW - ballSizePx或0,不留边距) - 再偏移绘制内容,让球有一半被屏幕边缘裁掉
右半屏:窗口 [924,1080],绘制球 [1002,1158]
屏幕裁剪到 1080 → 可见 [1002,1080] = 78px ← 正好一半
左半屏:窗口 [0,156],绘制球 [-78,78]
屏幕裁剪从 0 → 可见 [0,78] = 78px ← 正好一半
窗口本身始终完整留在屏内,所以触摸热区不受影响,依然好点。
另:展开时会补回 8dp 边距,避免球黏死在屏幕边上。
安装包为 debug 签名版,仅供测试。
v1.2.2 · 贴边半藏悬浮球
收起方式改为「贴边半藏」
上一版的收起把球缩到只剩一条 14dp 的细弧,视觉上几乎看不见——
用户会以为球丢了,反而要费力去找,这不是隐藏而是消失。
现在改为常见悬浮球的做法:贴到屏幕边缘,只露半个球。
| 参数 | 上一版 | 现在 |
|---|---|---|
| 可见宽度 | 14dp(约 27%) | 50%(半个球) |
| 收起缩放 | 0.9 | 1.0(不缩小) |
| 收起透明度 | 0.55(太淡) | 0.88 |
| 内部图标 | 收起时隐藏 | 正常绘制 |
| 状态点位置 | 易被边缘裁掉 | 移到朝向屏幕内侧一边 |
效果上:一眼就能看出是躲在边上,既不挡内容,又随点随到。
完整交互
| 操作 | 行为 |
|---|---|
| 按住拖动 | 拖到屏幕任意位置,边界夹紧防丢失 |
| 松手 | 自动吸附到最近边缘 |
| 3 秒不碰 | 贴边半藏,只露半个球 |
| 点击 | 立即展开,重置倒计时 |
安装包为 debug 签名版,仅供测试。
v1.2.1 · 可拖动悬浮球
悬浮窗改为可拖动球形
原来是一个矩形小窗,显示难看且遮挡内容。现在改成圆形悬浮球。
交互
| 操作 | 行为 |
|---|---|
| 按住拖动 | 可拖到屏幕任意位置,边界自动夹紧(不会拖丢) |
| 松手 | 自动吸附到最近的屏幕边缘 |
| 3 秒不碰 | 缩成一道半透明细弧躲到边上,不碍事 |
| 点击球体 | 立即展开,重置倒计时 |
| 状态指示 | 绿点=运行中,红点=已停止 |
一个关键的实现选择
收起时只偏移绘制内容(canvas.translate),窗口本身仍留在屏内。
为什么不直接把窗口移出屏幕:那样露出的 14dp 就是全部触摸区域,用户几乎点不中,
只能看到球却摸不到。保持窗口在屏内,触摸热区就是完整的 52dp 球体 ——
视觉上躲起来了,操作上依然好点。
顺带修复的问题
- Paint 复用污染 alpha:状态点用同一个 Paint 画描边和实心,导致其越画越透明
- 动画并发写同一份 LayoutParams:快速连点会让位置互相覆盖、球在抖。
改为单个 ValueAnimator 统一驱动「位置 + 缩放 + 透明度 + 偏移」四项,开新动画前先 cancel 旧的 - 拖动与动画互相覆盖:确认拖动后立即终止缩放动画,否则球跟不上手指
- 废弃 API:
defaultDisplay换成WindowMetrics,修正折叠屏/分屏下球定位偏移
能力边界(未改变)
悬浮球提升进程到 VISIBLE,能降低内存不足被回收的概率,
但挡不住系统的一键清理/强力清理(走白名单机制)。默认关闭。
安装包为 debug 签名版,仅供测试。
v1.2.0 · 悬浮窗保活
新增:悬浮窗保活(可选)
在屏幕上常驻一个状态小窗,把进程提升到 VISIBLE 优先级。
⚠️ 先说清楚它的能力边界
这个功能不是保活银弹,宣传时必须诚实:
| 它能做到的 | 它做不到的 |
|---|---|
提高 oom_adj 优先级,内存不足(LMK)回收时排在后台服务之后 |
❌ 挡不住系统「一键清理」「强力清理」——那类操作走白名单机制,不在白名单里窗口再多也照杀 |
| 部分 ROM 判定「速冻」时会参考是否有可见窗口,可降低被速冻概率 | ❌ 无法绕过电池优化、自启动等厂商管控 |
默认关闭,属于以观感换存活率的辅助手段(屏幕上会多一个图标)。
真正的保命线仍是:电池优化白名单 + 自启动 + 后台运行 + 回收后自动重启。
实现细节
- 新增
FloatingWindowKeeper:权限查询/申请、窗口创建销毁、状态文案 - 服务
onCreate显示、onDestroy移除,与生命周期绑定 - 设置页新增开关 + 权限引导 + 实时状态说明(区分未启用/缺权限/运行中)
- Activity
onResume自查补窗口(系统授权页返回无回调) - 进程内二次校验窗口是否真的 attached,避免残留引用
完整保活体系
| 机制 | 作用 |
|---|---|
| 前台服务 + 常驻通知 | 提升优先级 |
| WakeLock 循环续期 | 防 CPU 休眠不调度 |
| 开机自启 | 重启/OTA 后自动恢复 |
| 精确闹钟兜底 | 划掉任务后重启(绕过 Android 12+ 限制) |
| 看门狗 | 冻结恢复后补锁 |
| 悬浮窗(新增·可选) | 提升到 VISIBLE,降低内存回收概率 |
安装包为 debug 签名版,仅供测试。
v1.1.0 · 首个开源版本
WorkBuddy2API Android 原生版 v1.1.0
首个开源版本。把 WorkBuddy/CodeBuddy 额度封装为本地 OpenAI/Anthropic 兼容 API,无需 Python/Docker,装到手机即用。
特性
- 三协议兼容 — OpenAI Chat
/v1/chat/completions、Anthropic Messages/v1/messages、OpenAI Responses/v1/responses,均支持流式与非流式 - 纯原生实现 — Kotlin 编写,不打包 Python 运行时,APK 仅约 1.7 MB
- 多账号轮换 — 加权随机选号(余额/到期/成功率/闲置多因子),失败冷却与自动重试
- 自动签到 — 每日定时签到领额度
- 用量记录 — SQLite 存储输入/输出/思考链,支持筛选与统计
- 应用 Key 管理 — AES-GCM 加密,密钥存 AndroidKeyStore
- 保活加固 — 前台服务 + WakeLock + 开机自启 + 精确闹钟兜底 + 看门狗,应对国产 ROM 后台限制
- 存储治理 — 入库截断 + 每日自动清理 + WebView 缓存回收 + 占用实测明细
环境要求
- Android 7.0(API 24)及以上
- 编译需 JDK 17+ 与 Android SDK(compileSdk 36)
安装
下载 WorkBuddy2API-v1.1.0-debug.apk 直接安装。首次使用需在应用内添加账号并创建应用 Key。
完整说明见 README
免责声明
仅供学习与技术研究,禁止商业用途。使用者须自行遵守上游服务条款。