小米电视 CleanYourTV 净化部署
把小米电视(HyperOS / MIUI TV / Android TV)的广告桌面换成 Gathin23/cleanyourtv 的 Apple TV 风格干净桌面,并去除系统广告。只停用(pm disable-user)、不卸载、不 root、全程可逆。
适用:编码代理在与电视同一局域网的电脑上执行。已在小米电视 S Pro Mini LED 65(MiTV-MFFU0,HyperOS 3,Android 14)完整实测,通用 Android TV 机型同样适用(跳过白名单章节)。
红线(先读)
- 只用
pm disable-user --user 0,永不 uninstall,一个包一条命令。 - 永不禁用
com.android.*/com.google.android.*核心包、com.android.tv.settings、com.android.systemui、providers(详见 cleanyourtv 仓库 AGENTS.md,tools/disable.sh会拒绝这类清单)。 - 不禁用:电视/输入切换服务(HDMI/信号源)、蓝牙遥控、输入法、应用商店、电视管家(小爱"打开应用"依赖它的 provider)、系统更新。
- 不启动名字含 factory/test/fac 的包(会触发工厂模式,部分机型无法撤销)。
- 改动前必须备份;分批禁用、批间截图验证。
- 完成后建议关闭 ADB(
ro.adb.secure=0时局域网内任何设备可免授权连接)。
1. 连接电视
电视端:设置 → 关于 → 连按"产品型号"7 次(开启开发者模式)→ 账号与安全 → ADB 调试 → 允许。
adb connect <TV_IP>:5555 # HyperOS 弹"允许 USB 调试"时勾选"一律允许"
adb devices # 确认 device
坑:
- 该固件每次重启后 ADB 自动关闭,需重开;待机只断连不关授权,重连即可。
- 待机连不上时可发 WoL 魔术包唤醒(WiFi MAC,见 references 实测案例)。
- ping 不通不代表电视离线(小米电视常禁 ICMP),以 adb connect 的 refused/timeout 区分:refused=电视在线端口关,timeout=可能待机。
2. 备份(任何改动之前)
git clone https://github.com/Gathin23/cleanyourtv && cd cleanyourtv
python -m venv tools/venv && tools/venv/Scripts/pip install -r tools/requirements.txt # Windows
export TV_HOST=<TV_IP> MSYS_NO_PATHCONV=1
tools/venv/Scripts/python.exe tools/tv.py 'pm list packages' > backup/packages-all.txt
tools/venv/Scripts/python.exe tools/tv.py 'pm list packages -d' > backup/packages-disabled.txt
tools/venv/Scripts/python.exe tools/tv.py getprop > backup/getprop.txt
tools/venv/Scripts/python.exe tools/tv.py 'settings list global' > backup/settings-global.txt
tools/venv/Scripts/python.exe tools/tv.py 'settings list secure' > backup/settings-secure.txt
tools/venv/Scripts/python.exe tools/tv.py 'settings list system' > backup/settings-system.txt
tools/venv/Scripts/python.exe tools/tv.py 'dumpsys tv_input' > backup/tvinput.txt
3. HyperOS 桌面白名单(关键机制)
HyperOS 3 只允许系统应用或云控白名单内的包名成为桌面:
- 普通第三方启动器装上后 cmd package set-home-activity 打印 Success 但不生效;停用 PatchWall 后 Home 落到 FallbackHome 黑屏。
- 白名单在开机日志可见,需要 flags 含 4(511 含):
tools/tv.py 'logcat -d | grep "MitvConfigParser: \[White\]"'
# 选一个 flags&4 且 pm path 为空的包名,如 com.thunderstone.idun.dev / com.ts.launcher
解法:以白名单包名构建启动器(不改代码、不改签名校验,只改 applicationId):
cd launcher
./gradlew assembleRelease -PlauncherApplicationId=<白名单包名>
安装并验证(三重):pm install -r → 启动 → 截图确认渲染 → pm disable-user --user 0 com.mitv.tvhome(必须停用原桌面,否则 Home 出选择器)→ cmd package resolve-activity -c HOME 指向新包 + dumpsys activity activities | grep mFocusedApp。
4. 构建环境(国内网络)
- JDK 17+、Android SDK(
cmdline-tools→sdkmanager "platforms;android-34" "build-tools;34.0.0",需先--licenses)。 - Gradle 官方源可能被断:用腾讯镜像
https://mirrors.cloud.tencent.com/gradle/gradle-8.9-bin.zip,SHA256 见gradle/wrapper/gradle-wrapper.properties。
5. 精简系统
用仓库清单作模板(examples/<机型>/debloat.txt,有同机型直接抄),按类别分 2-3 批:
bash tools/disable.sh ../work/batch1.txt # 遥测/云控
tools/tv.py --screenshot shots/01.png # 批间截图验证
bash tools/disable.sh ../work/batch2.txt # 广告/购物/推广
bash tools/disable.sh ../work/batch3.txt # 偏好类,先问机主!
- 禁用前用
dumpsys package <名>确认用途;流媒体/语音助手/投屏/系统更新先列清单问机主再动。 - HyperOS 待机广告 =
com.xiaomi.mitv.hyper.screensaver(普通 Activity 非 DreamService),禁用即断广告。 - 完成后
pm list packages -d复核;重启一次对比,防固件回滚。
6. 定制(改 launcher/.../values/config.xml 后重新构建安装)
dock_apps:底栏 4-7 个应用(注意改名重打包应用的真实包名,用query-activities反查)。input_action+input_sources:小米 CN 固件 HDMI 切换需com.xiaomi.mitv.tvplayer.EXTSRC_PLAY+ 端口号(HDMI1/2/3=23/24/25,AV=2;dumpsys tv_input核实,幽灵端口用-屏蔽)。app_banners:无横幅应用的磁贴美化,包名=banner_xxx(drawable 放res/drawable-nodpi/,res/raw/keep.xml已有tools:keep="@drawable/banner_*"防 R8 删除)。PatchWall 风格做法:从 APK(pm path→adb pull→ aapt badging 找 icon)提取官方图标,取图标底色平铺磁贴、图形去底放大居中。prefer_vendor_settings(见本仓库 fork 的 SystemSettings.java):让"设置"按钮直达小米完整设置而非 AOSP 设置。- 壁纸:推
config.json+wallpapers/到/sdcard/Android/data/<启动器包名>/files/,重启启动器生效;ambient_glow:false可关掉聚焦染色。
7. 还原
bash tools/restore.sh <清单> com.mitv.tvhome # 恢复禁用包 + 原桌面
tools/tv.py 'pm enable <包名>' # 单个恢复
固件更新可能恢复部分包,重跑清单即可。完整实测参数(白名单条目、HDMI 端口映射、13 包精简清单、坑位清单)见 references/xiaomi-s-pro-finch.md。