Skip to content

Releases: jilin0105/WorkBuddy2API-Android

最新构建(latest-build)

Choose a tag to compare

@github-actions github-actions released this 25 Sep 04:48

自动构建产出的 debug APK。

项 值
提交 fdd6d2cc3f1e6367eee3284da6f5c60090e5fbd0
分支 main
APK 大小 16M
compileSdk android-36(CI 覆盖,仓库默认 37.0,见 build.gradle.kts)

使用 debug 签名。本仓库为本地自用网关工具,不发布应用商店。
安装前请先卸载设备上的旧版本,或确认签名一致。

v1.2.3 · 修正收起方向

Choose a tag to compare

@jilin0105 jilin0105 released this 14 Sep 16:31

修正:球现在是真的躲到屏幕边缘

上一版的收起方向搞错了 —— 球不是躲到屏幕边缘,反而像往屏幕里缩了一下。

原因

上一版只偏移了绘制内容,没有把窗口贴到屏幕边缘:

球在右半屏(screenW=1080, ball=156):
  窗口还在 x=916(距边 8dp)
  绘制球移到 [994, 1150]
  → 窗口右边 1072 距屏幕边只有 8px
  → 溢出的部分全在屏幕外,可见的 [994,1072] 仍是完整一颗球
  → 观感:球整体还在屏内贴着边,甚至像往里缩

修正

改成两步,缺一不可:

  1. 窗口先真正贴死到屏幕边缘(targetX = screenW - ballSizePx 或 0,不留边距)
  2. 再偏移绘制内容,让球有一半被屏幕边缘裁掉
右半屏:窗口 [924,1080],绘制球 [1002,1158]
        屏幕裁剪到 1080 → 可见 [1002,1080] = 78px  ← 正好一半
左半屏:窗口 [0,156],绘制球 [-78,78]
        屏幕裁剪从 0    → 可见 [0,78]     = 78px  ← 正好一半

窗口本身始终完整留在屏内,所以触摸热区不受影响,依然好点。

另:展开时会补回 8dp 边距,避免球黏死在屏幕边上。

安装包为 debug 签名版,仅供测试。

v1.2.2 · 贴边半藏悬浮球

Choose a tag to compare

@jilin0105 jilin0105 released this 14 Sep 16:10

收起方式改为「贴边半藏」

上一版的收起把球缩到只剩一条 14dp 的细弧,视觉上几乎看不见——
用户会以为球丢了,反而要费力去找,这不是隐藏而是消失。

现在改为常见悬浮球的做法:贴到屏幕边缘,只露半个球。

参数 上一版 现在
可见宽度 14dp(约 27%) 50%(半个球)
收起缩放 0.9 1.0(不缩小)
收起透明度 0.55(太淡) 0.88
内部图标 收起时隐藏 正常绘制
状态点位置 易被边缘裁掉 移到朝向屏幕内侧一边

效果上:一眼就能看出是躲在边上,既不挡内容,又随点随到。

完整交互

操作 行为
按住拖动 拖到屏幕任意位置,边界夹紧防丢失
松手 自动吸附到最近边缘
3 秒不碰 贴边半藏,只露半个球
点击 立即展开,重置倒计时

安装包为 debug 签名版,仅供测试。

v1.2.1 · 可拖动悬浮球

Choose a tag to compare

@jilin0105 jilin0105 released this 14 Sep 15:29

悬浮窗改为可拖动球形

原来是一个矩形小窗,显示难看且遮挡内容。现在改成圆形悬浮球。

交互

操作 行为
按住拖动 可拖到屏幕任意位置,边界自动夹紧(不会拖丢)
松手 自动吸附到最近的屏幕边缘
3 秒不碰 缩成一道半透明细弧躲到边上,不碍事
点击球体 立即展开,重置倒计时
状态指示 绿点=运行中,红点=已停止

一个关键的实现选择

收起时只偏移绘制内容(canvas.translate),窗口本身仍留在屏内。

为什么不直接把窗口移出屏幕:那样露出的 14dp 就是全部触摸区域,用户几乎点不中,
只能看到球却摸不到。保持窗口在屏内,触摸热区就是完整的 52dp 球体 ——
视觉上躲起来了,操作上依然好点。

顺带修复的问题

  • Paint 复用污染 alpha:状态点用同一个 Paint 画描边和实心,导致其越画越透明
  • 动画并发写同一份 LayoutParams:快速连点会让位置互相覆盖、球在抖。
    改为单个 ValueAnimator 统一驱动「位置 + 缩放 + 透明度 + 偏移」四项,开新动画前先 cancel 旧的
  • 拖动与动画互相覆盖:确认拖动后立即终止缩放动画,否则球跟不上手指
  • 废弃 API:defaultDisplay 换成 WindowMetrics,修正折叠屏/分屏下球定位偏移

能力边界(未改变)

悬浮球提升进程到 VISIBLE,能降低内存不足被回收的概率,
但挡不住系统的一键清理/强力清理(走白名单机制)。默认关闭。

安装包为 debug 签名版,仅供测试。

v1.2.0 · 悬浮窗保活

Choose a tag to compare

@jilin0105 jilin0105 released this 14 Sep 15:06

新增:悬浮窗保活(可选)

在屏幕上常驻一个状态小窗,把进程提升到 VISIBLE 优先级。

⚠️ 先说清楚它的能力边界

这个功能不是保活银弹,宣传时必须诚实:

它能做到的 它做不到的
提高 oom_adj 优先级,内存不足(LMK)回收时排在后台服务之后 ❌ 挡不住系统「一键清理」「强力清理」——那类操作走白名单机制,不在白名单里窗口再多也照杀
部分 ROM 判定「速冻」时会参考是否有可见窗口,可降低被速冻概率 ❌ 无法绕过电池优化、自启动等厂商管控

默认关闭,属于以观感换存活率的辅助手段(屏幕上会多一个图标)。
真正的保命线仍是:电池优化白名单 + 自启动 + 后台运行 + 回收后自动重启。

实现细节

  • 新增 FloatingWindowKeeper:权限查询/申请、窗口创建销毁、状态文案
  • 服务 onCreate 显示、onDestroy 移除,与生命周期绑定
  • 设置页新增开关 + 权限引导 + 实时状态说明(区分未启用/缺权限/运行中)
  • Activity onResume 自查补窗口(系统授权页返回无回调)
  • 进程内二次校验窗口是否真的 attached,避免残留引用

完整保活体系

机制 作用
前台服务 + 常驻通知 提升优先级
WakeLock 循环续期 防 CPU 休眠不调度
开机自启 重启/OTA 后自动恢复
精确闹钟兜底 划掉任务后重启(绕过 Android 12+ 限制)
看门狗 冻结恢复后补锁
悬浮窗(新增·可选) 提升到 VISIBLE,降低内存回收概率

安装包为 debug 签名版,仅供测试。

v1.1.0 · 首个开源版本

Choose a tag to compare

@jilin0105 jilin0105 released this 14 Sep 14:15

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

免责声明

仅供学习与技术研究,禁止商业用途。使用者须自行遵守上游服务条款。