DEV Community

Cover image for How to Remove Ads from Google TV (and Make It Faster): a Free ADB Guide
ILIA KARPENKO
ILIA KARPENKO

Posted on Originally published at Medium

How to Remove Ads from Google TV (and Make It Faster): a Free ADB Guide

No root. Every step can be undone. The full command list, plus the two traps that turn a TV into a black screen.

You turn the TV on to watch one thing. First you get a row of ads and "recommended for you". The menu lags a second behind the remote. Apps open slowly. You search for a fix and find forum threads with a list of adb commands, no explanation, and no way back if one of them kills your Wi-Fi.

This guide shows how to remove ads from the Google TV home screen and free memory using ADB, step by step, with the undo command for each change. You need a computer and the TV on the same network.

Why your TV shows ads and slows down

Out of the box an Android TV or Google TV set runs a dozen vendor services in the background: telemetry, content stores, recommendation rows, a second cast receiver, a demo mode. The home screen itself is an ad surface. All of it shares 1–3 GB of RAM with the apps you open.

The picture and sound get the same treatment. Motion smoothing, noise reduction and "enhancers" are on by default. On one CHiQ set I tuned, the stock equaliser boosted 5 kHz by +41.

The quick fix, and why it isn't enough

Google TV has an Apps-only mode (Settings → Accounts & Sign In → your account → Apps only mode). It hides most recommendations. The stock home screen stays, the vendor services keep running, and the lag stays with them.

An ad-blocking DNS (Settings → Network → Private DNS, for example dns.adguard-dns.com) blocks some ad requests on Android 9 and newer. It does not block YouTube ads.

To fix the cause you have to switch off the services themselves. That takes ADB.

Step 1. Turn on developer options and debugging

  1. Open Settings → System → About (on older Android TV: Settings → Device Preferences → About).
  2. Press OK on Build (or Android TV OS build) seven times. You'll see "You are now a developer".
  3. Go back to Developer options. Turn on USB debugging, and Network debugging if it is listed.

On a computer, install Android SDK platform-tools, which contain adb.

Step 2. Connect over the network

Find the TV's IP address in Settings → Network. Then:

adb connect 192.168.1.50:5555
Enter fullscreen mode Exit fullscreen mode

A prompt "Allow USB debugging?" appears on the TV. Tick Always allow from this computer and press OK. Without the tick, the prompt comes back every time you reconnect.

If the connection is refused, your TV may only offer Wireless debugging (common on Google TV 12+). Open it, choose Pair device with pairing code, then on the computer:

adb pair 192.168.1.50:<pairing-port>     # enter the code shown on the TV
adb connect 192.168.1.50:<port-shown-on-tv>
adb tcpip 5555
Enter fullscreen mode Exit fullscreen mode

If nothing answers at all, not even your router, a VPN on the computer is capturing the local network. Exclude your home subnet from the tunnel.

Step 3. Save what you have before changing anything

adb shell pm list packages -s > packages-system.txt
adb shell pm list packages -3 > packages-3rdparty.txt
adb shell pm list packages -d > disabled-before.txt
adb shell "grep -E 'MemTotal|MemAvailable' /proc/meminfo"
Enter fullscreen mode Exit fullscreen mode

Write down MemAvailable. You'll compare it at the end.

Now the first trap. Check which app owns your saved Wi-Fi network:

adb shell "dumpsys wifi | grep -o 'cname=[^ ]*'"
Enter fullscreen mode Exit fullscreen mode

When you disable the app that saved a network, Android deletes that network. The TV drops off Wi-Fi, and your ADB session drops with it. Never disable the package this command names. On Google TV it is often the setup wizard, and that matters in step 6.

Step 4. Decide what to disable

Open packages-system.txt and sort the vendor packages into groups:

  • vendor telemetry and analytics;
  • vendor stores, recommendation rows and content providers;
  • background services you don't use: a second cast receiver, cleaners, demo modes, print;
  • preinstalled apps you never open.

When a package name says nothing, read it without starting it:

adb shell "dumpsys package <package> | grep -E 'versionName|sharedUser|permission\.'"
Enter fullscreen mode Exit fullscreen mode

BIND_TV_INPUT means an input or remote service: keep it. Firebase or c2dm together with a boot receiver usually means push and telemetry.

Never disable these. Each one can stop the TV from booting, showing a picture or taking input:

  • Android core: android, com.android.systemui, com.android.shell, com.android.settings, com.android.tv.settings, the permission controller, the package installer, and com.android.providers.*.
  • What the TV needs to work: the TV app and HDMI/tuner input services, the input menu, com.android.bluetooth and the remote pairing service, the on-screen keyboard, Play Store, Play Services, the Android TV Remote service.
  • Any package with factory, fac or AT in its name. Don't disable them, and don't even open them. On some Haier and CVTE boards, opening one flips a factory flag: the Input key and HDMI-CEC stop working, and the next boot disables Play Services.
  • The Wi-Fi owner from step 3.

An original Mi TV Stick never booted again after a debloat list took six of the core packages. Check each package yourself instead of trusting a list.

Step 5. Disable in small batches

Disable, don't uninstall. disable-user is reversible. uninstall on a system package is much harder to undo.

adb shell pm disable-user --user 0 <package>
Enter fullscreen mode Exit fullscreen mode

Do four or five packages at a time. After each batch, press Home on the TV and check that the picture, the remote and the network still work. If something breaks, you know which batch did it.

Check the result by listing, not by the exit code:

adb shell pm list packages -d
Enter fullscreen mode Exit fullscreen mode

Some firmware (Fire OS and a few others) prints success and changes nothing, or refuses with SecurityException. If every package is refused, your TV doesn't allow this. Use the TV's own privacy toggles and the DNS from above instead.

Undo one package:

adb shell pm enable <package>
Enter fullscreen mode Exit fullscreen mode

Step 6. Replace the ad-filled home screen

Install a launcher first. Any Android TV launcher works for this step. Then try to make it the Home app:

adb shell cmd package set-home-activity <launcher.package>/<.MainActivity>
Enter fullscreen mode Exit fullscreen mode

On most Google TV sets this prints Success and changes nothing. The stock launcher, com.google.android.apps.tv.launcherx, has Home priority 2. The setup wizard's RecoveryActivity has priority 1. A third-party launcher is capped at priority 0. The system picks the highest priority, whatever you set as preferred.

So you have to disable the stock launcher, and that hides the second trap. If you disable only launcherx, the setup wizard's RecoveryActivity takes over Home, tries to re-enable launcherx, fails, and loops on a black screen. You have to disable the wizard too, com.google.android.tungsten.setupwraith. The wizard often owns the Wi-Fi network from first setup. Do it in this order:

  1. Run the Wi-Fi check from step 3. If it names setupwraith, go to Settings → Network, forget your network and join it again. The TV may get a new IP: reconnect ADB.
  2. Run the check again. The owner should now be com.android.tv.settings or a system uid.
  3. Disable both:
adb shell pm disable-user --user 0 com.google.android.tungsten.setupwraith
adb shell pm disable-user --user 0 com.google.android.apps.tv.launcherx
Enter fullscreen mode Exit fullscreen mode
  1. Press Home and check who holds the screen:
adb shell "dumpsys activity activities | grep mFocusedApp"
Enter fullscreen mode Exit fullscreen mode

If you see a black screen at any point:

adb shell pm enable com.google.android.apps.tv.launcherx
Enter fullscreen mode Exit fullscreen mode

Then press Home.

One cost to know about: on Google TV the stock launcher also handles the gear (dashboard) button on the remote. After the swap that button stops working, and no third-party app can take it over. The Input button keeps working.

Step 7. Make it faster

Halve the animations so menus respond quicker:

adb shell settings put global window_animation_scale 0.5
adb shell settings put global transition_animation_scale 0.5
adb shell settings put global animator_duration_scale 0.5
Enter fullscreen mode Exit fullscreen mode

Stop background Wi-Fi and Bluetooth scanning, which a TV doesn't need:

adb shell settings put global wifi_scan_always_enabled 0
adb shell settings put global ble_scan_always_enabled 0
Enter fullscreen mode Exit fullscreen mode

On Android 11 and newer, freeze cached apps so they use no CPU in the background (reboot to apply):

adb shell settings put global cached_apps_freezer enabled
Enter fullscreen mode Exit fullscreen mode

Before you change a setting, read its old value with settings get global <key> and write it down. That is your undo.

Now measure MemAvailable again and compare it with step 3.

Step 8. Turn off the picture "enhancers"

Open the picture menu (on Google TV: Settings → Display & Sound → Picture) and switch off motion smoothing, noise reduction and dynamic contrast. Pick a Movie or Cinema mode with a warm colour temperature. Picture settings are usually per input, so repeat this for each HDMI port you use.

Step 9. Close the door behind you

Network debugging on port 5555 is plaintext and gives a shell to any authorised computer on your network. When you're done:

  1. In Developer options, switch off USB debugging and network debugging.
  2. Tap Revoke USB debugging authorisations.
  3. Reboot the TV.

Why I stopped doing this by hand

I've done the steps above on several TVs. Four things kept slowing me down:

  • Vendor package names say nothing. Every brand calls its telemetry something different, and you have to read each one.
  • The Wi-Fi owner trap and the setup wizard loop give no warning. You learn about them from a black screen.
  • Factory packages differ by board, and one wrong tap can break the Input key for good.
  • To undo everything you need a log of every package and every setting you changed, with the old values.

So I wrote CleanTV, a free, open-source skill for Claude Code. You turn on debugging and say "Set up my TV". It does the steps in this article on your real TV:

  • You turn on debugging, say "Set up my TV" and answer 10–15 questions about how you use the TV.
  • Claude finds the TV on your network, picks the packages, runs every adb command, and checks each step with a screenshot from the TV.

It backs up the TV before the first change. It refuses core, factory and Wi-Fi owner packages. It disables the stock launcher and the wizard in the right order. It installs its own launcher: a pitch-black home screen with a dock of your apps, a clock and an HDMI inputs menu. It calibrates picture and sound for your room, and at the end it closes network debugging and checks that the port is shut. One command, restore.py, undoes all of it.

Measured on two TVs:

  • CHiQ, 2.8 GB RAM: free memory went from 1.42 GB to 1.77 GB.
  • Harper, 1.8 GB RAM: free memory went from 721 MB to 888 MB.
  • Home screen: ads and recommendations replaced by your apps on black.

It works on Android TV and Google TV: Xiaomi, TCL, Hisense, Sony, Philips, CHiQ/Changhong, Haier, Harper, Nvidia Shield and others. It doesn't work on Samsung Tizen, LG webOS or Fire TV.

If YouTube is throttled where you live

In some countries, Russia among them, the ISP slows YouTube down with deep packet inspection. Videos stall while everything else works.

CleanTV can install ByeByeDPI, an open-source app, on the TV itself. It runs locally as a VPN: no external server, no account. Only YouTube's traffic goes through it, every other app keeps the direct route. The CleanTV launcher starts the bypass when you open YouTube and stops it when you return Home.

To set it up by hand: install the APK for your TV's CPU (adb shell getprop ro.product.cpu.abi), set the DNS to Google (8.8.8.8), turn on the app whitelist with only com.google.android.youtube.tv, and run the built-in strategy test. The test takes 10–15 minutes; don't touch the remote while it runs.

FAQ

Can you remove ads from Google TV without root?
Yes. Everything in this guide works over ADB debugging, which you turn on in Developer options. No root, no unlocked bootloader.

Is it safe?
Disabling is reversible: pm enable <package> brings a package back. The risk is in what you disable. Stick to the never-disable list in step 4, work in small batches, and check the Wi-Fi owner first.

Will it remove YouTube ads?
No. This removes ads from the home screen and switches off vendor services. YouTube serves its own ads, and neither a launcher nor DNS can remove them.

Does it work on Fire TV?
No. Fire OS refuses pm disable-user, and Fire TV doesn't use the Google TV launcher.

Will a system update undo it?
Some firmware re-enables its own packages on every boot (TCL on Android 9 does this). After a reboot, compare pm list packages -d with your list.


If you'd rather not spend the evening on it, CleanTV is on GitHub. Install it in Claude Code and say "Set up my TV".

If it saved you that evening, a ⭐ on the repo helps other owners find it, and a coffee pays for the next module: remote buttons and Bluetooth remotes.

Top comments (0)