sansheng-tv-adb

用 ADB 给安卓电视(含 Fire TV、Google TV、老款海信/TCL/小米/创维/索尼等)去开机广告、停用预装应用、腾内存,不卸载不 root、每一步可还原。只要用户提到电视卡、电视有广告、清理/精简电视、电视 ADB、停用电视预装应用、开发者模式怎么开、电视调试,就用这个 skill——哪怕他没说「ADB」三个字。也用于判断某台电视值不值得做、找某品牌/系列的开发者模式入口、以及清理

SKILL.md

GitHub

sansheng-tv-adb · 电视 ADB 清理

这个 skill 让你替一个不会敲命令的人清理家里的电视:他拿遥控器开门,你连上去备份、分批停用、真重启验证,出了岔子先还原再排查。全程只做可还原的动作,每停一个包就写一行还原命令。

数据真源在 data/brands/*.json(22 个品牌、81 个系列,含入口步骤、证据等级、禁停/垃圾包名);scripts/tvadb.py 是阶段机的命令行;references/ 里是提示词兜底、坑、沟通范例。先读完本文再动手,遇到具体品牌再读 entry 命令的输出,不要凭记忆写入口步骤。

先想清楚三件事(读者第一性原理)

  1. 他最怕的不是难,是折腾半天发现自己的电视不支持。 所以第一步永远是判断「能不能、值不值」,30 秒内给结论;不适用就说清为什么、还能做什么,别往下走。
  2. 他最需要的是安全感。 每一步都告诉他:现在做什么、影响多大、怎么退回;出岔子第一句先说「电视没坏,系统在运行」。「停 / 恢复 / 跳过」三个词写在开场白里。
  3. 改坏了没有借口。 十二道安全闸写在脚本里,你不能绕;脚本层拒绝的事别用别的命令绕过去做。

用法路径

  • 装了本 skill:按下面的阶段机走,命令都是 python3 <skill 目录>/scripts/tvadb.py <子命令>。找不到 skill 目录就 ls ~/.claude/skills ~/.agents/skills ~/.codex/skills ~/.gemini/config/skills 2>/dev/null | grep tv-adb。
  • 用户只给了网址(sanshengai.top/tools/tv-adb)或只贴了提示词:读 references/prompt-zh.md(英文用户读 prompt-en.md),按同样的阶段机做,安全闸降级成你自己的纪律,并如实告诉用户「脚本没装,我按手工流程做,每一步都会给你看命令」。

阶段机(每一步停下来等用户回话,不一口气跑完)

阶段 你做什么 命令 停下来问什么
0 认机型 问品牌、遥控器有没有数字键、「设置 → 关于」里系统叫什么 / 安卓版本 identify --brand X [--version 9] [--system 名] 「你的电视是这几个系列里的哪一个?」把候选系列的「怎么认」念给他
1 开门 把这个系列的开发者模式入口步骤(含前提、风险)说给他,等他开好、给 IP entry --brand X --series N 「开好了吗?IP 是多少?」
2 连接 连上、等授权、读身份、判资格、建工作目录 probe <IP> [--wait 90] 授权框在电视上,让他勾「一律允许」;把资格结论念给他
3 备份 四类清单 + 内存 + 设置 + 全量包信息,sha256 清单 backup 告诉他备份目录在哪
4 预演 拿一个广告包「停 → 验 → 还原 → 验」,测出这台机能用哪条命令 dryrun 告诉他结果:这台机能用什么方式、能不能还原
5 分组 禁停 / 可停 / 需问 / 未知 四组;排成 ≤10 个一批 plan [--confirm-guessed] [--include a,b] 把「按包名猜的」和「看你用不用」两组列给他勾;他勾完再重跑 plan
6 停一批 只停这一批,每包一行还原命令 batch --n 1 「请测四样:信号源键切 HDMI、音量、进一次图像设置、播一个片。都正常回我一声」
7 真重启验证 adb reboot → 回连 → 画面 / 桌面 / 内存 / 停用状态是否保持 verify 念结果(可用内存变化);通过才进下一批
8 岔子 黑屏 / 无响应 / 命令被拒 status → recover → 必要时 restore --all 第一句:「电视没坏,系统在运行,我先把这一批还原再真重启」
9 收尾 报告 + 结果卡 report --card 给三样:备份在哪、一句话全还原、开发者模式留着不碍事;邀请他投稿机型

每个阶段的固定说法见 references/communication.md;照着说,别自己发明。

十二道安全闸(脚本层强制,不许绕)

# 闸 在哪实现
G1 资格 Android < 5 或非安卓 → 停在阶段 2,给「连得上改不了 / 不适用」结论与替代动作 probe 的 eligibility
G2 备份 没有 backup/ 目录不许 plan,更不许 batch plan 前置断言
G3 回滚预演 没跑 dryrun 不许 batch;预演包必须停完再还原干净 batch 前置断言
G4 禁停硬名单 桌面 / 信号源 / 输入法 / 安装器 / 设置 / 遥控蓝牙 / 工厂重置 OTA / 电视核心服务 / WebView / 无障碍 / CEC / DRM + 品牌名单,脚本层跳过 data/generic-rules.json + 品牌 must_keep
G5 命令降级 disable-user → hide → uninstall -k --user 0;uninstall 必须 --allow-uninstall 单独预演过才可用 dryrun / batch
G6 小批量 一批 ≤10;批与批之间必须收到用户「测过没问题」 batch 拒绝 >10;你负责等回话
G7 真重启 每批后 verify:先等系统把停用状态写盘(改完 20 秒内不重启),再 adb reboot,用 uptime 变小证明真的重启过;告诉用户遥控器关机是待机不是重启 verify
G7b 复查 重启后检查停用状态有没有被系统悄悄恢复(酷开的 hide 会) verify 的 came_back
G8 异常固定顺序 查状态 → 还原最近一批 → 真重启 → 不行再全还原 → 再重启;不许让用户拔电源当第一反应 recover
G9 熔断 同一批两次异常、或用户说「停」→ restore --all,出报告结束 你执行
G10 状态文件 state.json + rollback.sh 每停一包即写;断了用 resume 接上 全程
G11 临时项 禁停名单里的包若处于停用状态(且不是出厂就停的),status 会警告,批末必须恢复 status

四类分类怎么跟用户说

  • 可停(有来源):品牌数据里标了广告 / 购物 / 上报 / 演示的,直接排进批次,说一句「这些不管谁家都不会用」。
  • 按包名猜的:脚本只会猜,不会自动停。列给用户,得到确认后 plan --confirm-guessed。
  • 看你用不用:语音助手、投屏、应用商店、账号、第三方影音。逐项问,他勾了哪些就 plan --include a,b,c。默认一个都不勾(稳妥模式)。
  • 未知:默认不碰。用户点名要停某个未知包,先查它是什么,查不到就不停。

出岔子时的判断顺序

  1. 命令被拒(SecurityException / unknown command):这是正常现象,dryrun 已经替你找到能用的方法;如果 usable 为空,这台机就是「连得上改不了」,告诉用户并结束,别去找 root。
  2. 黑屏、桌面空白:先 status 证明系统在运行,再 recover。09-14 的实证是:全部还原再真重启就回来了,之后逐组藏包每组真重启都正常——黑屏多半是第一次停用触发的一次性系统重启,不是某个包的常驻问题。
  3. 重启后没回连:等一分钟再 verify;电视重新弹授权框就让他再点一次「一律允许」。
  4. verify 报 came_back:这台机的 hide 会被系统恢复,问用户是否允许 dryrun --allow-uninstall,预演通过再继续。
  5. 任何你拿不准的:restore --all,比继续猜安全。

红线

  • 不 root、不解锁 bootloader、不刷机、不讨论怎么做;用户问起就说结论:没收益,而且会让 Netflix 等只能放标清。
  • 不用 pm uninstall 卸系统应用(没有 --user 0 的那种);不用 rm、不碰 /system。
  • 老电视(Android ≤ 9、内存 ≤ 2 GB)不换桌面:现代 launcher 装不上,原桌面又绑着信号源和设置。
  • 给用户看的截图里,序列号、MAC 地址要打码;report 不打印它们。
  • 不承诺「能挡系统更新」:Fire TV 等机型的 OTA 包受保护,停不掉。

什么时候读哪个文件

  • 某品牌/系列的入口步骤、坑、命令能力 → 只用 entry 命令输出,不要自己翻 JSON 复述。
  • 没装脚本的手工流程 → references/prompt-zh.md / prompt-en.md。
  • 每阶段怎么开口 → references/communication.md。
  • 实测踩过的坑(待机≠重启、黑屏、hide 被恢复、误标包名、老联想)→ references/pitfalls.md。
  • 用户想投稿自己机型的入口 → .github/ISSUE_TEMPLATE/new-tv-entry.yml 的字段,让他照着填,或直接给他 GitHub issue 链接。

完成的标准

用户手里有:备份目录路径、一句话全还原命令、前后内存数字、停用清单(每条带还原命令)、一张结果卡;电视经过至少一次真重启验证通过;禁停名单里没有任何包处于我们造成的停用状态。缺一样都不算完成。