CleanYourTV 的包名过滤本质上是一层范围控制:哪些包允许被清理,哪些包必须原样保留。电视上的系统桌面(launcher)和设置(settings)恰恰最容易被一起勾掉——它们通常不是第三方应用,包名看上去也不像“关键服务”,只按黑名单思路配置,就容易被顺带处理。稳妥的做法是:先在仓库配置示例里确认过滤字段的准确写法,再用 adb 查出本机桌面包名和设置包名,写进排除项,最后用只读扫描验证白名单确实生效、用一个无关测试包验证黑名单规则确实在跑。
适用场景:用配置文件控制 CleanYourTV 清理范围、担心把桌面或设置误清的用户。操作动作:以仓库里的配置示例为准确认字段名,用 pm list packages 取出本机真实的桌面包名和设置包名,写进 exclude 或 whitelist;同时保留少量黑名单规则。验证方式:先跑只读扫描或 dry-run,确认待处理列表里没有白名单包;再选一个无关紧要的测试包加入黑名单,跑一次看它是否被处理、桌面包是否仍在。风险边界:不同版本或分支的字段名与优先级实现不一致,必须以仓库示例和实际输出为准,不要在看扫描结果之前直接执行清理。
打开 CleanYourTV 配置文件找到包名过滤字段
先回到项目仓库,而不是凭印象写字段。配置文件通常是仓库根目录的 config.yaml,也可能带一份 config.example.yaml 或 docs 目录下的配置说明。要确认三件事:过滤规则写在哪个层级、字段叫什么、优先级怎么写。常见命名有两类,一类是 blacklist / whitelist,另一类是 include / exclude,个别项目会写成 packages.include 这类点分结构。
字段写错时,多数实现只是把未知字段忽略掉而不会报错,所以“配置没生效”往往不是工具问题,而是名字对不上。下面是一个通用骨架,实际字段名请替换成仓库示例里的写法:
# 仅示意结构,字段名与层级以 CleanYourTV 仓库中的 config 示例为准
clean:
# 允许被清理的包,空表示不限制
include: []
# 一律跳过的包,通常优先级高于 include / blacklist
exclude:
- com.google.android.tvlauncher
- com.android.tv.settings
# 有些版本用另一套命名:
whitelist:
- com.google.android.tvlauncher
- com.android.tv.settings
如果仓库里两种命名都出现,优先使用示例文件里实际被读取的那一组,而不是自己混着写。确认方法很简单:把示例文件复制一份改名,先只填一两个包名,跑只读模式看输出里有没有“skip”“excluded”这类日志行。
用 pm list packages 查出桌面和设置的准确包名
白名单失效最常见的原因是包名抄错一个字母。不同厂商的桌面包名差异很大,公共 AOSP 上常见 com.android.tv.settings 和 com.google.android.tvlauncher,但品牌电视往往会换成自家桌面,形如 com.xxx.tvhome,必须实机查询。
adb connect 192.168.1.50:5555
adb shell pm list packages | grep -i launcher
adb shell pm list packages | grep -i settings
输出形如 package:com.google.android.tvlauncher,去掉 package: 前缀后剩下的才是要写进配置的包名。如果 grep launcher 查不到,可以先看当前默认桌面是哪个包,较新的 Android 版本支持这条命令,执行失败就退回上面的 grep:
adb shell cmd package resolve-activity `--brief` -c android.intent.category.HOME
查到的包名先记下来,两处都要确认:一是桌面,二是设置。部分电视把设置拆成多个包(如 com.android.tv.settings 与厂商自定义设置面板),建议把 grep 结果里看起来是入口类的包一并加进白名单,再逐步收紧,不要反过来先放开再补。
配置白名单优先于黑名单的验证方式
同时在配置里写 include / exclude,然后先看工具怎么处理冲突,不要直接执行清理。多数清理工具提供 dry-run 或只读扫描参数,参数名以 `--help` 输出为准,例如:
./cleanyourtv `--config` ./config.yaml `--dry-run`
./cleanyourtv `--config` ./config.yaml `--dry-run` | grep -iE 'launcher|settings'
判断标准只有一条:待处理列表里不应出现已加入白名单的桌面包和设置包。第二条命令输出为空,说明这两个包被排除了;如果它们仍出现在待处理列表里,说明当前版本的 exclude 优先级低于 include,或者字段名没被读到,这时需要回到配置示例核对,必要时把白名单包从 include 里彻底移除,只用黑名单驱动清理范围。
如果工具没有 dry-run,可以先把配置里的清理动作关掉、只保留扫描或日志输出,观察日志里的 skip 记录;也可以临时把白名单只留一个包做对照,看输出差异是否与配置一一对应。
用一条测试包验证过滤规则是否生效
白名单验证的是“不该删的没删”,还需要一条反向验证:黑名单里的包确实会被处理。选一个自己装的、无关紧要的测试包(比如某个小游戏),把它加进黑名单,跑一遍,再检查状态。
adb shell pm list packages | grep -i 测试包关键字
./cleanyourtv `--config` ./config.yaml
adb shell pm list packages | grep -i 测试包关键字 # 期望:无输出
adb shell pm list packages | grep -i launcher # 期望:桌面包仍在
两次检查必须同时做。如果测试包被处理、桌面包仍在,说明过滤规则按预期工作;如果测试包没动,说明黑名单字段没被读到,先修配置;如果测试包被清掉、桌面包却消失,说明白名单没有真正拦住,应立即停用当前配置并恢复。
把配置纳入版本管理并记录变更
配置文件一旦加入真实包名,就变成了跟具体设备绑定的一份数据,随手改很容易忘了原来排除了什么。建议在本地建一个 git 仓库专门放这份配置,每次改动写明加了哪些包名:
mkdir -p ~/tv-clean-config && cp config.yaml ~/tv-clean-config/
cd ~/tv-clean-config && git init && git add config.yaml
git commit -m "clean: 将 launcher 与 settings 加入 exclude"
# 之后查看本次改动具体动了哪些包名
git diff HEAD~1 -- config.yaml
提交信息里直接写清包名和原因(例如“新增 com.android.tv.settings,避免清理时连带入口应用”),回滚时就能直接定位到是哪次改动把桌面放出白名单的。换设备或换固件后,先按新设备的 pm list packages 输出更新包名,再用 dry-run 复验一遍,不要沿用旧配置直接跑清理。