Repository navigation
Releases
v0.49.0 · 同一供应商的额度账号排在一起
Token 额度页、看板和额度小组件现在使用同一套供应商与账号权重。Gemini 的多个账号归在同一组;刷新、额度变化和数据过期不会把账号顺序打乱。
- 优先采用服务端共享权重;旧接口或缺少字段时使用一致的默认顺序。
- 支持独立的扩展账号列表,保留原来的接口数组和账号 ID;同一账号重复出现只展示一次。
- 双列额度小组件把同供应商的账号放在一起,单账号之后也不会把下一组拆到两行对角。
- 默认顺序为 OpenAI、Claude、Grok、Cursor、TodayAI、Gemini;同供应商内按账号权重排列。
- 保留已安装版本中的颂钵、番茄钟和云剪贴板正文功能。
验证与限制:共享排序的 JVM 回归覆盖顺序变化、权重冲突、非法或新版元数据、扩展列表去重和小组件排序。当前两台验证手机都没有在线 ADB 连接,本轮未完成新版本真机安装或真实账号视觉验收。
验证:GitHub Actions 自动构建(https://github.com/robbywang25/robby-console-android/actions/runs/41750108005)。335 项 JVM 测试、Debug/Release 构建与 lint 通过;签名证书 SHA-256 与正式证书一致,Release 附件下载回读后校验通过。
附 APK 与 SHA256SUMS,Android 11 及以上,可覆盖旧版。
v0.46.0 · 看板额度多了十格余量条
看板的 Token 额度卡片在每个账号名称下面加了一排十格余量条,一眼看出哪个账号快用完了。详情页和桌面小组件不变。
- 一格代表 10%:只要还有余量就至少亮 1 格,满额才亮满 10 格。
- 颜色与小组件一致:余量 ≥50% 绿、20%~50% 琥珀、<20% 红;读数不是最新时灰色。
- Claude 的 5 小时和每周额度各一排,左侧标注,两排格子对齐,调大字号也不错位。
- 读取时先画一排未亮的格子,读到数字后卡片不会突然变高。
验证:311 项 JVM 测试通过(新增亮格数的边界测试),Debug/Release 构建和 lint 通过,lint 0 错误。Find X9 Ultra 上预览版检查了浅色、深色、大字体下的看板;正式签名包覆盖安装到 Find,安装文件与构建产物 SHA256 一致,启动无崩溃日志。
未验证:读取占位那一帧;登录后的真实看板需本人查看。
验证:GitHub Actions 自动构建(https://github.com/robbywang25/robby-console-android/actions/runs/40719760161)。311 项 JVM 测试、Debug/Release 构建与 lint 通过;签名证书 SHA-256 与正式证书一致,Release 附件下载回读后校验通过。
附 APK 与 SHA256SUMS,Android 11 及以上,可覆盖旧版。
v0.45.0 · 米家灯在你的每台手机上都能用
0.44.0 的米家灯只存在设置它的那台手机上。现在灯的名称、地址和 token 会和心力球的 Key 一样同步到你的 God 账号,登录同一账号的其他安卓手机打开「米家灯光」就能直接控制。
- 同步方式:沿用心力球的
account/app-secrets文档,新增可选字段mijiaLight。God 网关用 AES-256-GCM 封存后存入账号,账号服务只保存密文;需要god.mobile.profile.write,没有新增权限。 - 兼容旧版:只有请求
?version=2的新版才读写灯,0.44.0 及更早的版本仍只看到五个 Key,它们保存时会保留账号里的灯。网关还没升级时,新版自动退回旧接口,灯先留在本机,等网关升级后自动补传。 - 已有的灯:升级后第一次同步会自动上传,不用重新填写;如果别的手机存过更新的 Key,会先合并再上传。
- 修改与移除:在一台手机上修改或移除,其他手机下次同步时跟着变,页面会用新设置重新读灯。
- 灯和 Key 各自记录有没有改动,上传时只送出本机改过的那部分,在新手机上设置灯不会清掉账号里心力球的 Key,反之亦然。
- 什么时候同步:打开米家灯光页、保存或移除灯之后,以及打开 God 时(开着心力球或设置了灯,最多每 10 分钟一次)。
- 「连接」卡片新增「同步」一行,没有同步到账号时写明原因。
- 灯的名称最多 40 个字;0.44.0 存下的更长名称同步时自动截短。离线时的修改或移除,下次打开 God 会自动补发。
验证:310 项 JVM 测试通过(AppSecretsSyncTest 新增灯的上传、合并判断、文档校验、带版本号的写入放行和名称整形),Debug/Release 构建和 lint 通过,lint 0 错误。正式签名包覆盖安装到小米 MIX Flip,灯的状态照常读到,在旧网关下「同步」显示「仅本机」,没有崩溃日志。网关改动的单元测试 19 项通过。
验证:GitHub Actions 自动构建(https://github.com/robbywang25/robby-console-android/actions/runs/40711220569)。310 项 JVM 测试、Debug/Release 构建与 lint 通过;签名证书 SHA-256 与正式证书一致,Release 附件下载回读后校验通过。
附 APK 与 SHA256SUMS,Android 11 及以上,可覆盖旧版。
v0.44.0 · 在 God 里开关米家灯
「功能 → 工具」新增「米家灯光」:God 在家里的 Wi-Fi 下直接用 miIO 协议控制一盏米家 Wi-Fi 灯,可以开关、调亮度和色温。和米家 App 在局域网里的做法一样,指令直接发给灯,不经过小米云,也不经过 God 服务器。
- 协议:先向灯的 UDP 54321 发 hello,拿到设备 ID 和时钟;之后每条指令是 AES-128-CBC 加密的 JSON(key = md5(token),iv = md5(key + token)),包头带 MD5 校验,和 python-miio 的封包一致。单元测试用 openssl 独立加密的测试向量逐字节比对。
- 读写:按 MIoT 灯光服务(siid 2)的属性
get_properties/set_properties。先用miIO.info读出型号,再按型号在 miot-spec.org 的定义选亮度、色温的 piid 和色温范围;默认是 lamp22(显示器挂灯1S)的布局:开关 p1、亮度 p2、色温 p3(2700–6500K)。属性对不上时提示布局不同,不会乱发指令。 - 设置:本人填灯的局域网地址和 32 位 token。地址只接受 10、172.16–31、192.168 网段的 IPv4;token 用 Android Keystore 加密,存在本机私有的
mijia-light里,不同步、不备份。God 不登录米家账号,token 要本人自己获取。 - 失败提示:握手没回应时提示检查 Wi-Fi、地址和电源;握手通了但指令没回应时提示 token 多半不对;灯拒绝指令时给出错误码。
- 所有网络操作在后台线程,下拉刷新会重新读取。改了设置后,还在路上的旧请求结果会被丢弃,并立即用新设置重读;每条指令只接受属于自己的回复(握手必须是 32 字节包头,指令回复必须能用当前 token 解开且请求编号一致),迟到的旧回复会被跳过。
- 滑杆拖动时松手发送;TalkBack 的调节和键盘方向键停 0.5 秒后发送一次。
验证:303 项 JVM 测试通过(新增 MiioLightTest 14 项:hello、测试向量、校验和与错误 token、末尾的空字符、只认当前请求的回复、型号布局、读写参数、回复解析、地址校验),Debug/Release 构建和 lint 通过,lint 0 错误。真机用小米 MIX Flip(HyperOS / Android 16,和灯在同一个 Wi-Fi):预览版在浅色、深色、1.6 倍字体下检查了页面和设置弹窗;用 preview_real_light 连真实的灯,握手成功,假 token 的指令被灯忽略,页面给出 token 提示。正式签名包覆盖安装到 Flip,安装文件 SHA256 与构建一致,启动后没有崩溃日志。本人用自己取到的真实 token 在 Flip 的正式版里设置了这盏灯,确认开关、亮度和色温都能正常控制。键盘调滑杆在预览版上验证过(方向键把亮度从 80% 调到 95%)。
限制与未验证:本人真机控制用的是评审修复前的构建(062d424),之后的三处修复(丢弃旧设置的结果、键盘与 TalkBack 发送、只认当前请求的回复)只有单元测试和预览版验证;只支持一盏灯;手机不在家里 Wi-Fi 时无法控制;Find X9 Ultra 当天不在线,没有安装。仍为预览版。
验证:GitHub Actions 自动构建(https://github.com/robbywang25/robby-console-android/actions/runs/40702533070)。303 项 JVM 测试、Debug/Release 构建与 lint 通过;签名证书 SHA-256 与正式证书一致,Release 附件下载回读后校验通过。
附 APK 与 SHA256SUMS,Android 11 及以上,可覆盖旧版。
v0.43.1 · Token 额度小组件不再留白
Token 额度桌面小组件的各行改成均分标题下方的高度,拉高时行距跟着变大,底部不再空出一块;尺寸档补到 560dp 高。God 更新后 ColorOS 会把小组件退回初始布局,现在初始布局带名称和「待更新」,后台检查也会把它重新画出来。
widget_tokens.xml:六行wt_row1…6改为layout_height=0dp+layout_weight=1+gravity=center_vertical。显示出来的行平分剩余高度,隐藏的行不占位。所以格子比所选尺寸档高时,多出的高度也会分到各行,不会堆在底部。GodWidgets.tokens:去掉原来补在行距上的spare(每行最多补 12dp,补不完的部分就成了底部空白),各行只保留原来的固定上边距。GodWidgets.SIZES:两种宽度都补上 400 / 480 / 560dp 三档,一共 16 档(RemoteViews尺寸映射的上限)。正常字号下 330dp 已经能排满 6 行,新档位主要让调大字号后、拉高的小组件多排几行;其他四个数字小组件沿用同一套档位,画法不变。- 初始布局:Token 额度、重置日历、运行状态、微信消息改用新的
widget_waiting_*.xml:同样的卡片,God 图标、名称、琥珀色「待更新」和居中的「打开 God 更新」,不含任何账号数据。原来的initialLayout是没填内容的数据布局,退回时只剩一行「打开 God」和大片空白。God 小组件和时区时钟的初始布局本来就能正常显示,没有改。 - 后台检查(约 2 分钟一次):
GodWidgets.read里只要有一条接口因为刚读过被跳过或读取失败,就再调用一次refreshAll和GodWidget.refresh。这样即使没有新读数,被 ColorOS 退回初始布局的小组件也会在下一次检查时重新画出来,不用打开 App。 - 没有改动:小组件显示的数据和脱敏规则、认证、
FLAG_SECURE。
验证:289 项 JVM 测试、Debug/Release 构建与 lint 通过(lint 0 错误)。正式签名包覆盖安装到 Find(PMA110),versionCode 70,安装文件 SHA256 与构建一致(d2ca72c7…835151b6),签名为正式证书。桌面上已放的 Token 额度小组件(约 4×2)截图:9 个账号排成两列 5 行,行距均匀,底部没有空白。在后台覆盖安装、之后回到桌面的场景复现了两次:日志里都有 ColorOS 的 forceUpdateAppWidget … remoteViews is null;God 没有被打开,小组件分别在 22:57:32 和 22:59(装完后紧接着的后台检查)重新画出来。
未验证:两次都没拍到占位布局本身(第一次退回桌面时人在应用抽屉,第二次检查比截图先到);新增的「跳过时也重画」这条路径只靠代码保证,两次恢复走的都是原有的读取后重画。4×4 及更高的摆放和 1.6 倍字体也没有在桌面上验证。
验证:GitHub Actions 自动构建(https://github.com/robbywang25/robby-console-android/actions/runs/40105419116)。289 项 JVM 测试、Debug/Release 构建与 lint 通过;签名证书 SHA-256 与正式证书一致,Release 附件下载回读后校验通过。
附 APK 与 SHA256SUMS,Android 11 及以上,可覆盖旧版。
v0.43.0 · 接入 UU 远程,一键远控电脑
「功能 → 工具」新增「UU 远程」,按网易 UU 远程开源的接入协议(netease-uuyc/uuremote-integration-guide,MIT)把它的远控能力接进 God:在 UU 远程里选一台 Windows 或 Mac 电脑绑定,之后在 God 里一键全屏或小窗远控。只是本机两个 App 互相拉起,不经过 God 服务器。
- 绑定:打开
uuremote://external/device/authorize,UU 远程回调<applicationId>://uuremote/bind并带回加密的anonymous_device_id。每次请求带一个随机 nonce,回调的 nonce 对不上或超过 30 分钟就丢弃。 - 远控:打开
uuremote://external/device/control,「远控」是全屏(window_type=0,协议规定不回调);点一台电脑可以选「小窗远控」(window_type=1),结果回调到…/control。回调 URL 自带本机设备编号和 nonce,status=failure时按reason给出说明:device_not_found提供「重新绑定」,pip_unsupported提供「改用全屏」,其他可重试;未知 reason 按connect_failed处理。 - 拉起 UU 远程的 Intent 固定
setPackage("com.netease.uuremote"),设备标识不会被其他声明同一 scheme 的 App 截走。预览版和正式版各用自己的包名作回调 scheme,互不干扰。 - 检测 UU 远程是否已安装、是否不低于 4.42.0(manifest 新增
<queries>);没装或版本过低时给出「安装 / 更新 UU 远程」,跳应用商店。 - 电脑可以重命名、解除绑定、重新绑定(成功后沿用原名)。设备标识只存在本机私有 SharedPreferences
uu-remote,不随账号同步,也不随系统备份(沿用 App 的备份排除规则)。
验证:289 项 JVM 测试通过(新增 UURemoteTest 10 项:URL 编码、nonce 校验、错误码与未知 reason、版本比较、设备序列化、重新绑定的合并、功能目录与搜索);Debug/Release 构建和 lint 通过,lint 0 错误。真机用小米 MIX Flip(HyperOS / Android 16,UU 远程 4.42.0):预览版在浅色、深色、1.6 倍字体下检查了页面和菜单;用 preview_real_uu 跑了真实协议,绑定了本人账号下的一台电脑,回调正确,nonce 用后清除;全屏远控,本人确认能看到电脑画面;小窗远控在授予 UU 远程悬浮窗权限后,1 秒内回调 status=success。正式签名包覆盖安装到 Flip,安装文件 SHA256 与构建一致,启动后没有崩溃日志。
限制与未验证:第一次小窗远控时 UU 远程跳去申请悬浮窗权限,那次请求没有回调 God,这是 UU 远程那边的行为,God 只能当成没有结果;HyperOS 第一次互相拉起时会弹「关联启动」确认,要本人允许;失败回调(离线、忙碌、未允许被控)只有单元测试覆盖,没在真机上复现;Find X9 Ultra 当天不在线,没有安装;正式版登录后截不了图,正式版里的真实绑定由本人验证。仍为预览版。
验证:GitHub Actions 自动构建(https://github.com/robbywang25/robby-console-android/actions/runs/40102576813)。289 项 JVM 测试、Debug/Release 构建与 lint 通过;签名证书 SHA-256 与正式证书一致,Release 附件下载回读后校验通过。
附 APK 与 SHA256SUMS,Android 11 及以上,可覆盖旧版。
v0.42.0 · 心力球看板,功能分区按最近使用
心力球新增看板,设置收进右上角齿轮;「功能」的三个分区也按最近打开排序。录音、转写、整理流程和数据只在本机的边界不变。
- 心力球页顶部新增「看板 / 记录」切换,默认看板:录音开关与状态;今天的录音分钟、关键事项、未完成待办、摘要和最近 3 条关键事项;近 7 天未完成的待办(可直接勾选,最多 8 条);近 7 天录音时长、录音天数、待办完成数和每日录音柱状图。
- 「记录」是原来的按天切换、时间线和录音原文。
- DeepSeek / 转写服务的 Key 与服务、录音通知、多台手机同步、说明和「清除全部录音与记录」移到标题栏齿轮打开的「心力球设置」子页,返回回到心力球。
- 洞察、资产、工具三个分区按各自最近打开的功能排序,都没打开过时保持目录顺序;分区内的排序不变。
- 看板只读这台手机最近 7 天的记录文件,不新增任何网络请求。
真机验收(小米 MIX Flip,HyperOS / Android 16,展开内屏):预览版在浅色、深色、1.6 倍字体下检查了看板、记录、心力球设置和返回、功能分区排序;验收中修掉了大字体下数字列和坐标轴折行的问题。正式签名包用 adb 覆盖安装 0.41.0,安装文件 SHA256 与构建一致,启动后无崩溃日志。
限制与未验证:Find X9 Ultra 当天不在线,没有在 Find 上安装;Flip 上没开录音,看板上的真实录音数据没有验证;登录后页面截不了图。仍为预览版。
验证:本机在发布提交 2f77bdc 上构建(GitHub Actions 发版因 release 环境的签名密码为空而失败,改为手动发布)。279 项 JVM 测试、Debug/Release 构建与 lint 通过;签名证书 SHA-256 与正式证书一致;附件 APK 与 Flip 上安装的文件 SHA256 一致。
附 APK 与 SHA256SUMS,Android 11 及以上,可覆盖旧版。
v0.41.0 · 行情波动提醒,录音通知可隐藏
市场看板新增行情波动提醒;心力球的录音通知可以在系统设置里单独关掉,划掉后本次录音不再弹回。
- 行情波动提醒(默认关闭):每个关注资产的现价,与市场接口
history里最近 N 个本地日(1–7,默认 3)的每日收盘价最高、最低价比较;从低点涨过或从高点跌过提醒线(2/3/5/8/10/15/20%,默认 5%)时通知,点开进入市场看板。 - 同一资产同一方向只提醒一次:回到提醒线一半以内后重新计算,或比上次再多涨跌一个提醒线时再提醒;两个方向都达到时只说较大的一个。开启后第一次检查只记录不提醒。
- 行情随每 2 分钟的后台检查读取,最多每 10 分钟一次;新通知类别「行情波动提醒」(
god-market-v1),增强 / 持续提醒照常适用,锁屏只显示「God · 行情波动提醒」。 - 开关和两项设置在市场看板页底部,也在「我 → 通知 → 市场」(第 6 组);
marketDays、marketLine与noticeKinds里的market随账号同步。本机只记资产代码、已提醒的涨跌幅和时间,14 天未出现自动删除。 - 心力球:Android 不允许 App 去掉麦克风前台服务的通知(Find 上 God 以 MIN 创建的检查类别被系统提到 LOW)。录音通知改到单独的类别「心力球录音中」(
mindball-recording-v1),原mindball-v1改名「心力球提醒」只发暂停提醒;心力球页新增「录音通知」一行直达该类别的系统设置;通知带 deleteIntent,划掉后本次录音不再重新发出。 - 认证、接口合同、FLAG_SECURE 和录音参数没有变。
验证:274 项 JVM 测试(新增 MarketNoticeTest 7 项)、Debug/Release 构建与 lint 通过(0 错误,3 条原有警告),正式证书签名。正式版用 adb 覆盖安装到 OPPO Find X9 Ultra 与小米 MIX Flip,安装文件与本附件 SHA256 一致;Find 安装后下一次后台检查正常完成,无崩溃日志。
未验证:Find 全程锁屏,预览版的新卡片与设置页没有截图;真实行情下的提醒要本人开启后才会触发,目前只有单元测试覆盖;关掉「心力球录音中」后录音是否照常、ColorOS / HyperOS 是否另有后台运行提示、能否划掉麦克风前台服务通知,待心力球开启时确认。仍为预览版。
附 APK 与 SHA256SUMS,Android 11 及以上,可覆盖旧版。
v0.40.1 · 心力球更可靠,后台少连网
心力球更可靠,后台少连网:前一天没整理完的录音第二天会补上,残留的半段录音会清理,Key 同步不再频繁连服务器;录音参数和唤醒锁不变。
- 跨天补整理:每轮按新到旧检查今天、刚转写进去的日子和最近有记录的 3 天(
MindBall.summaryDays)。前一天最后一次整点整理之后录的内容,第二天会补进那天的时间线,不会再一直显示「尚未整理」。遇到网络或账号错误时,这一轮停下,不再逐天重试。 - 残留录音:更新、重启或被 ColorOS 停止时没录完的
recording-*.m4a,以前没有任何地方会删除。现在服务会记下正在写的文件名,purge每轮删除其余的半段录音。 - 清除全部:也会删除正在录的这一段,并在锁内把
epoch加 1,正在跑的转写或整理不会再把内容写回来。 - 被拒的一段不再卡住队列:被服务拒绝(400/413/415/422)的段先跳过,也不再每轮重新上传;下一段用同样的设置转写成功后就删除它。连续两段被拒就停下来,不删除任何录音。
- Key 同步节流(
MindBallSync.runIfDue):转写轮次最多每 30 分钟同步一次;回到 God 时只在心力球开启时同步,最多每 10 分钟一次;打开心力球页面时 1 分钟内去重。有未上传的改动、保存 Key 或设置、点「多台手机同步」时仍然立即同步。 - 录音通知改为在主线程刷新,停止录音后不会再留下「正在录音」的通知。
- 0.40.0 的更新记录日期改为它实际发布的 2026-10-24。
验证:267 项 JVM 测试、Debug/Release 构建与 lint 通过(lint 0 错误),新增 4 项心力球测试。签名构建用的源码与发布提交相同,签名证书与正式证书一致。已用 adb 覆盖安装到 Find X9 Ultra(PMA110,install -r 保留数据),启动后主页面正常在前台,没有崩溃日志;安装包与 Find 上安装文件的 SHA256 一致。
限制与未验证:安装时 Find 上的心力球没有开启,所以跨天补整理、残留录音清理和同步频率都还没在真机上看到。是否可以去掉 God 自己的唤醒锁,还要先在 Find 上用 dumpsys power 确认,这一版没有改。仍为预览版。
附 APK 与 SHA256SUMS,Android 11 及以上,可覆盖旧版。
v0.40.0 · 常亮展示与防烧屏屏保
「我 → 外观」新增常亮展示:God 在前台时屏幕不熄灭,一段时间没有操作就切到纯黑屏保,避免 OLED 烧屏。
- 常亮(
AlwaysOn):开关存在本机alwaysOn。打开后,只要 God 处于前台(resumed),窗口就带FLAG_KEEP_SCREEN_ON;退到后台、按电源键,或被系统权限对话框这类半透明页面盖住时,照常按系统时间熄屏锁屏。 - 屏保(
alwaysOnSaver):可选 30 秒、1/2/5/10/15/30 分钟和 1 小时,默认 5 分钟,没有「从不」。到时间后用一个全屏Dialog盖住页面和已打开的弹窗:纯黑#000,亮度设为BRIGHTNESS_OVERRIDE_OFF,盖住开孔,隐藏状态栏和导航条,并先收起软键盘;开启动画时 1.2 秒淡入。 - 恢复与计时:轻触(这次触摸不会传到页面)、返回键或读屏双击即恢复。页面上的触摸和按键、读屏用户的点按 / 长按 / 移动焦点都会重新计时;用软键盘打字时推迟一轮。屏保之后才弹出的对话框会被立即重新盖住。
- 省流量:屏保期间总览卡片、运行状态和 Token 额度页暂停自动读取,恢复后按各自节奏重排,已到期的马上读。
- 两个设置都列入
PreferenceSync.LOCAL_ONLY,只存在这台手机,不同步到账号。隐私说明、PRIVACY.md 和 README 写明常亮时系统不会自动锁屏,离开时要自己按电源键。认证、接口、FLAG_SECURE和后台清除都没有改。
验证:263 项 JVM 测试、Debug/Release 构建与 lint 通过(lint 0 错误)。用 v0.40.0 tag 所在的提交(e04fbbe)在本机做了签名构建,签名证书与正式证书一致。已用 adb 覆盖安装到 Find X9 Ultra(PMA110,install -r 保留数据),启动后主页面正常在前台,没有崩溃日志;安装包与 Find 上安装文件的 SHA256 一致。
限制与未验证:真机上只确认了安装和启动。登录后开启了 FLAG_SECURE,截不了图,所以常亮、屏保出现时间、淡入、最低亮度、开孔和导航条区域是否全黑、轻触恢复、屏保期间暂停刷新、TalkBack 操作都还没有在真机上看过;ColorOS 是否额外限制 BRIGHTNESS_OVERRIDE_OFF 也未知。仍为预览版。
附 APK 与 SHA256SUMS,Android 11 及以上,可覆盖旧版。