TCL 电视应用升级
这个技能解决什么
一条命令拿到电视上的第三方应用清单和版本;对着公开渠道的 APK,用脚本内建的
门禁判断能不能干净覆盖升级;装完复核版本号真的动了、应用能打开,然后把安装包
删掉。所有踩过的坑(pm install 被禁、monkey 失灵、渠道包名冒充、macOS 本地
网络权限、Aerial 桌面残留导致的 SecurityException)都已经固化进脚本和参考文档,
不需要再逐条现场排查。
用户规则(不可违反)
- 只做能干净覆盖升级的。包名必须在装之前从 APK 自己的
AndroidManifest.xml里读出来,且该机上的版本必须更低。adb install -r对
机上不存在的包名照样返回Success——那是在电视上多塞一个没人要的应用。 - 不能升级的、打不开的,不要管。签名不一致(
INSTALL_FAILED_UPDATE_INCOMPATIBLE)、
厂商停更、缺类崩溃、渠道包名不匹配 → 报一句结论就停,不要卸载用户原有应用,
不要反编译排查,不要连着试第五个下载源。 - 安装包用完即删。升级成功或确认失败后删掉本机 APK,同时清
/data/local/tmp/*.apk;从设备上 pull 下来的 base.apk 备份同样不留。 - 唯一允许的补救动作是一次
adb reboot(清 TCL PMS 内存态里的
app.orchard.tv残留)。不做第二次,不做恢复出厂。
标准流程
脚本都在 scripts/,用 bash 调(不要在 zsh 里跑)。电视地址在 tv.txt
(TV=内网IP:5555,技能根目录),TV_ADDR 环境变量优先级更高;首次使用先改这一行。
S=~/.qoder-cn/skills/tcl-tv-upgrade/scripts
# 1) 盘点:第三方包 + versionCode/versionName/minSdk/targetSdk/lastUpdate + 启动入口
bash $S/scan.sh # 同时落盘 /tmp/tv-upgrade/inventory.tsv
# 2) 找一个候选应用的公开 APK(来源与镜像规则见 references/sources.md)
bash $S/fetch_apk.sh "<apk直链>" ["<页面url>"]
bash $S/fetch_apk.sh --shafa <沙发网页面slug>
# -> 打印 <file> <package> <versionName> <versionCode> <minSdk> <targetSdk> <bytes>
# 3) 升级(内置两道门禁 + 装后复核版本 + 启动自检 + 删安装包)
bash $S/upgrade.sh /tmp/tv-upgrade/<name>.apk
# 4) 需要时复核这轮改动后的应用能不能打开(会把应用逐个切到前台)
bash $S/verify.sh com.cibn.tv com.ktcp.video
# 5) 收尾:清空本机与设备上的安装包
bash $S/clean.sh
upgrade.sh 输出的第一词就是结论,照着它决定下一步:
OK upgraded: <pkg> 1.8.8 -> 1.8.9 launch=Status: ok—— 完成,安装包已删。SKIP already_latest—— 已是最新,安装包已删,换下一个应用。SKIP not_installed—— 包名和机上对不上(渠道包),安装包已删,放弃这个包。FAIL install/FAIL version_unchanged/FAIL bad_apk—— 失败原因已打印,
安装包已删,放弃,不要重试第三个源。
判断"值不值得试"
先查 inventory.tsv,只对满足这些条件的应用去取包:
- 有
launcher入口(-的是后台件,升级了也看不见摸不着); - 不是
references/troubleshooting.md系统件白名单里的 TCL/欢网预装件; - 公开渠道确实有比机上
versionCode更高的 TV 版包。
搜不到更高版本就写"无可用升级",不要为了升级而升级。
自检
改动 scripts/ 后跑一次离线自测(假 adb,不动真电视),验证四条门禁与安装包
清理都在位:
bash $S/selftest.sh <任意一个本机.apk>
五条 PASS 才算可以交付。真机联调用 scan.sh + verify.sh <单个包>。
参考文档
references/sources.md—— 当贝/沙发网取包路径、镜像主机、渠道包名陷阱表、
versionCode 比较原则。找不到下载地址时先读它。references/troubleshooting.md—— 连接(macOS 本地网络权限、nodaemon server -a)、
安装(pm install被禁)、验证(monkey失灵,用query-activities+am start -W)、
app.orchard.tvSecurityException 残留与重启、系统件白名单、shell 坑。
任何一步报错先读它,再决定放弃还是补救。
已实测环境
TCL 电视,Android 8.0 / Mstar sugarcane / user+dev-keys,局域网网络 ADB(IP 填在
tv.txt)。本机 adb 二进制在 ~/tools/adb(脚本会自动探测常见位置)。机上 17 个
第三方包全部盘点过,其中 5 个(CIBN 酷喵、云视听、KTV 点歌、网易云音乐 TV、海康存储
TV)用本流程覆盖升级成功并实测可正常打开,其余无干净的可用升级。