Skip to content
Phạm Nam

Search

Type a keyword to search the posts.

Go back
en

CleanYourTV: Clean Android TV Ads Without Root

CleanYourTV debloats Android TV and Google TV over Wi-Fi ADB — no root, no app removal, one-command restore. Check your model and install its clean launcher.

12 min read—

Illustration: CleanYourTV: Clean Android TV Ads Without Root

A new TV full of ads: the familiar Android TV frustration

In the evening, you switch on the Xiaomi TV in your living room just to continue a show. The home screen shows recommendations you never watch, ad banners squeezed between apps, and a row of preinstalled apps you have never opened. You hunt for your streaming app among the icons, tap the wrong ad-driven app by mistake, go back, and search again.

Deleting apps one by one with the remote does not fix this. Many system apps cannot be removed the usual way, an app disabled today can return after a firmware update, and disabling the wrong system package can break HDMI, Wi-Fi, or the remote. This article presents a method that meets three requirements: no root, no app removed from the TV, and a one-command rollback. The tool is CleanYourTV, an open-source toolkit that runs from a computer over Wi-Fi ADB, with its own launcher replacing the default home screen.

One caveat up front: this method fully applies only to Android TV and Google TV. Samsung Tizen, LG webOS, Roku, Vizio, and Hisense VIDAA have no ADB, so they cannot use it. Fire TV gets only partial cleanup, because Fire OS will not hand Home control to a third-party launcher — and the 2015 Fire TV Box cannot even do that part.

What CleanYourTV is and what problem it solves

CleanYourTV: an open-source (MIT) Android TV debloat toolkit

CleanYourTV is a project by Gathin23 on GitHub, with its official site at cleanyour.tv, released as v3.3.0 on 2026-11-01. At check time, the repo had about 51,382 stars and 6,497 forks, and was created on 2026-10-17. The project publishes debloat lists for 427 models from 111 brands, including 81 lists for TCL, 47 for Sony, and 42 for Xiaomi. These are project-published figures, not independently verified; what matters to you is not the totals, but whether your own model is on the list.

The toolkit has three parts: per-model debloat lists, deterministic scripts to probe, disable, check, and restore, and a lightweight native launcher of about 572 KB that replaces the default home screen with a minimal, Apple TV-style interface. The mechanism is straightforward: back up packages and settings before any change, then use pm disable-user --user 0 to disable each package in the list. Nothing is uninstalled from the TV, nothing is flashed, and there is no root. The new launcher is installed and set as the default Home, and only then is the stock launcher disabled.

Who should use it — and who should not

The tool suits Android TV or Google TV owners, especially Xiaomi, TCL, and Sony sets that ship with many preinstalled apps and recommendation rows. Homelab users and sysadmins managing a few TVs in an office or meeting room can use it too, as long as they accept working through each TV one at a time over ADB.

By contrast, if your TV runs Samsung Tizen, LG webOS, Roku, Vizio, or Hisense VIDAA, stop here and use the remote-based tracking-off guide the project points to at cleanyour.tv/not-android. If you do not want to enable ADB even temporarily, or you expect apps to be fully removed to free storage, CleanYourTV will not meet that need, because it only disables, not uninstalls.

Another approach already covered on this blog is using an AI prompt to debloat a TV, in Reviving a slow, laggy TV with AI. That method is flexible because the AI reviews each case on the fly, but it is not exactly repeatable and has no dedicated launcher or structured restore record. This article goes the opposite way: model-verified lists and deterministic scripts.

Architecture and how CleanYourTV works

The article’s single architecture diagram

flowchart TB
    PC["Computer\nAssistant or manual scripts\nPython venv + Android SDK 34"]
    ADB["ADB over Wi-Fi\nSame LAN"]
    PM["TV Package Manager\npm disable-user --user 0\nDisable only, never uninstall"]
    STOCK["Stock Launcher\nAd-heavy default launcher"]
    NEW["CleanYourTV Launcher\n~572 KB, new default Home"]
    LIST["debloat.txt\nPer-model TV list"]
    RECORD["~/.cleanyourtv/\nChange record"]
    CHECK["tools/check.py\nDrift check after firmware"]
    RESTORE["tools/restore.sh\nReplay record to restore"]
    GATE["tools/adb-closed.py\nVerify ADB is closed"]
    PC --> ADB --> PM
    LIST --> PM
    PM --> STOCK
    PM --> NEW
    NEW -. "Answers HOME intent first" .-> STOCK
    PM --> RECORD --> RESTORE
    CHECK -. "--fix reapplies after firmware" .-> PM
    GATE -. "Close the session" .-> ADB

The computer connects to the TV over Wi-Fi ADB, PackageManager disables packages from the list, the new launcher takes over Home, every change is recorded for rollback, and the drift-check cycle handles firmware updates undoing the cleanup.

Key components: per-model lists, scripts, launcher

The per-model list is the part worth reading most carefully. Before running any command, look up your model at cleanyour.tv/tvs or in the repo’s examples/ folder. If your model has no list, you must review packages yourself, and the risk of disabling the wrong one rises sharply. Do not blindly run another model’s list: system packages differ by brand and firmware build. The main scripts are tools/tv.py --probe, tools/disable.sh, tools/restore.sh, tools/check.py, and tools/theme.sh themes/aurora. The launcher is built with launcher/build-and-install.sh, which rolls back automatically if Home does not land on the new launcher.

Control flow: backup → disable → replace Home → verify → restore

The order of operations is part of the safety. First, back up the current packages and settings. Then disable in small batches from the list, rather than disabling everything at once and checking later. The new launcher is installed and confirmed to answer the HOME intent before the stock launcher is disabled, so the script never leaves the TV without a Home app. Finally, run check.py to confirm the state and close ADB after the session.

Technical dependencies and limits

On the computer, you need Python 3, JDK 17–22, and Android SDK platform 34 with build-tools 34. JDK 23 and later are incompatible with the Gradle 8.9 the project uses. On macOS, the documentation installs with brew install openjdk@17 android-commandlinetools, then uses sdkmanager to fetch platform and build-tools 34. If the machine has only Docker, the project offers a build path via tools/docker-build.sh with JDK 17 and SDK 34, installed with SKIP_BUILD=1. On the TV, enable Developer options via Settings, Device Preferences, About, pressing OK on Build 7 times, then turn on USB debugging and Network debugging if shown. The TV must stay on and on the same Wi-Fi network as the computer throughout the session. The project estimates about 15 minutes for the whole process, but that is the project’s estimate, not a measurement on a specific model.

Deploying CleanYourTV step by step

Prerequisites and model check before you start

Confirm the TV runs Android TV or Google TV and find the exact per-model list. Prepare a computer on the same Wi-Fi network as the TV, note the TV’s IP address, and make sure you know how to get back to Settings with the remote for a manual rollback. The restore record is only useful if created before any change, so do not skip the backup step.

Method 1 — AI assistant with PROMPT.md (fastest)

git clone https://github.com/Gathin23/cleanyourtv

Open the cloned folder in Claude Code, Codex, Gemini CLI, or Antigravity CLI, paste the contents of PROMPT.md together with your TV model, and the assistant will run the probe, disable, and launcher-install steps itself. This is fast, but you will not see each command unless you ask the assistant to explain before running. If this is your first time touching ADB, choose the manual method below so you understand each step.

Method 2 — Manual commands (full control at each step)

Create the Python environment, install requirements, and set the TV’s real IP address (not the example address from the documentation):

python3 -m venv tools/venv && tools/venv/bin/pip install -r tools/requirements.txt
export TV_HOST=<real-TV-IP>
tools/venv/bin/python -I tools/tv.py --probe
tools/venv/bin/python -I tools/tv.py 'pm list packages'

If --probe cannot connect, stop and work through the troubleshooting section; do not run disable.sh until you are sure you are talking to the right TV. Once the connection is solid, apply the correct model’s list (for example, Xiaomi Mi TV 4A), then install the launcher and change the theme:

tools/disable.sh examples/xiaomi-mi-tv-4a/debloat.txt
TV_HOST=<real-TV-IP> launcher/build-and-install.sh
tools/theme.sh themes/aurora

Post-deployment checks and expected output

tools/venv/bin/python -I tools/check.py examples/<your-model>/debloat.txt

Expected result: the listed packages are disabled, the new launcher is the default Home, and HDMI, Wi-Fi, and the remote still work. Also check by hand: restart the TV and confirm the home screen is the new launcher, open an app you use often, and switch to an HDMI input. The final step — the easiest to forget — is to turn off ADB debugging on the TV and verify the port is closed with tools/adb-closed.py.

Common errors and fixes

ADB connection failures are usually caused by a wrong IP, the TV and computer on different Wi-Fi networks, Network debugging not enabled, or the TV being asleep. Check each in that order, then rerun --probe. If the stock launcher still appears, Home has not moved to the new launcher: do not disable the stock launcher by hand, or you may break the script’s safety latch; rerun build-and-install.sh and let its rollback logic handle it. Google TV has a specific gotcha: after the stock launcher is disabled, the setup wizard com.google.android.tungsten.setupwraith can crash-loop Home. The fix is to disable that package too, but check Wi-Fi ownership first, because disabling it can delete a Wi-Fi network saved during setup. After a firmware update, cleanup losing effect is normal: packages return, Home reverts to the stock launcher, and new preloads appear. Run check.py --fix to reapply the list, rather than blindly rerunning disable.sh from scratch. If the TV breaks a feature after cleanup, stop and run restore instead of disabling more packages to “fix” it.

Technical assessment: strengths, weaknesses, security

Strengths of CleanYourTV

The biggest strength is repeatability and reversibility. The same verified list can be applied to multiple TVs of the same model, and the record in ~/.cleanyourtv/ lets you return to the previous state with one command. Disabling instead of uninstalling keeps the risk lower than rooting or flashing, and the MIT-licensed launcher is lightweight and tied to no account or service. The post-firmware drift check is a real differentiator over one-off ADB commands.

Weaknesses and practical limits

The biggest weakness sits inside the strength: it only disables, it does not uninstall, so do not expect storage to be freed the way a real uninstall would. “Clean” here means a clean experience — ads, telemetry, and a cluttered home screen — not freed memory. Next, the tool’s value depends on the per-model list; a model without a list means you take responsibility for the review yourself. Finally, each TV still needs its own ADB session, with no centralized management or bulk deployment — fine for a few TVs, not for a large fleet.

Security: ADB is the biggest attack surface, not the launcher

Enable Wi-Fi ADB only during the session, turn it off immediately afterwards, and verify with tools/adb-closed.py. An open ADB port on the LAN is a real attack surface: any machine on the same network could send commands to the TV. Do not leave ADB on overnight or enable it on public or untrusted Wi-Fi. Take code and links only from cleanyour.tv and the official Gathin23/cleanyourtv repo. The domains cleanyourtv.com and clean-your-tv.net do not belong to the project, and the project publishes no official app in any store. Work in small batches, keep the restore record, and never disable packages outside a verified list.

Performance and scalability: only speak when there is data

This section is not based on hands-on testing, only on documentation review, so this article gives no speed or RAM figures. A lighter home screen may make the TV feel faster, but that is inference, not a measured result, and real-world effect depends on the model, RAM, and firmware build. Likewise, you work TV by TV with no centralized management, so do not plan a rollout of dozens of TVs as if this were a fleet-management system.

Comparing CleanYourTV with alternatives in the same space

Comparison criteria: whether it replaces the launcher, uninstalls or only disables, has per-model lists, offers one-command restore, checks drift after firmware, needs root, and which platforms it supports.

OptionReplaces launcherUninstall or disablePer-model listOne-command restoreDrift checkNeeds root
CleanYourTVYesDisable onlyYesYesYes, —fixNo
Prompt-only cobanov/tv articleNoDisable onlyReference onlyNoNoNo
Manual ADBNoDisable onlySelf-reviewedSelf-recordedNoNo
Independent community appsNoDisable onlySharedDepends on appNoNo
Third-party launcherYesNo system-app cleanupNoHome switch onlyNoNo

In my view, CleanYourTV wins on repeatability, restore, and its integrated launcher, and loses on platform scope and on not truly uninstalling apps. The prompt-only article is more flexible for one-off cases, manual ADB gives maximum per-command control, community apps are convenient without a laptop, and a third-party launcher only fixes the home screen.

Real-world use cases

Family and homelab: one ad-free living-room TV

The most common case is a Xiaomi, TCL, or Sony TV used daily in the living room. After cleanup, family members switch the TV on and immediately see the apps they need, with no recommendation rows in the way. Keep the restore record on a home computer, so that when a firmware update undoes the cleanup, you only need check.py --fix.

IT admins and offices: a few presentation TVs, simple signage

With a few TVs of the same model in meeting rooms or lobbies, the same verified list keeps their state consistent. The limit to remember: each TV still needs its own ADB session, and ADB must be turned off afterwards, so this fits a small scale, not a centralized device-management solution.

Power users: a TV as a secondary screen for AI/DevOps workflows

A minimal, low-distraction home screen that opens the right app quickly also has value for users who keep a TV as a secondary screen. But be clear: this is client-side cleanup, not turning the TV into a server or AI infrastructure.

Conclusion: who should use it, who should not, next steps

CleanYourTV fits best with Android TV or Google TV owners whose model is on the list, who want a clean home screen, and who accept an ADB workflow with rollback. It does not fit Samsung, LG, Roku, Vizio, or Hisense VIDAA TVs, Fire TV users who want to replace the launcher, or anyone who wants apps fully uninstalled to reclaim storage. Next steps: check your model at cleanyour.tv/tvs, clone the official repo, run --probe before changing anything, work in small batches, and finally turn off ADB and verify with adb-closed.py. If your model has no list, treat that as a stop signal, not a reason to run another model’s list.

Lessons learned

  1. Verify the model before running any command, because a wrong-model list is the biggest risk source, not the ADB command itself.
  2. Disable is not uninstall: firmware updates will undo the cleanup, so the check.py --fix cycle matters as much as the first cleanup.
  3. The Home-app safety latch matters more than cleanup speed: the new launcher must answer HOME before the stock launcher is disabled, or the TV can end up with no home screen.
  4. An open ADB port is the biggest risk in the whole process, bigger than any package you disable, so close and verify it right after the session.
  5. The per-model list is CleanYourTV’s core value, not the ADB command: anyone can type a command, but the verified list and the restore record are what make cleanup safely repeatable.

Verification scope

Checked: 2026-11-04. Verified directly against the official README and repo: the install and probe commands, the JDK 17–22 and SDK platform 34 requirements, the backup and restore mechanism via ~/.cleanyourtv/, the setupwraith gotcha on Google TV, and the list of unsupported platforms. Default behavior includes disabling with pm disable-user and keeping the launcher after restore; theme changes and the Docker build are opt-in choices; model, brand, language, and press figures are project-published numbers, not independently verified. Configuration numbers such as the 572 KB launcher and SDK 34 are not benchmarks. Not tested: this article did not install, run, or benchmark anything on a real TV, so RAM and speed effects on any specific model remain unverified.

References


Bình luận

Bình luận được duyệt trước khi hiển thị.

Đang tải bình luận…

Để lại bình luận