cobanov

Clean up your Android TV

No root100% reversible

If your TV has gotten sluggish, you can disable the factory apps you never use. Below is a four-step setup and the prompt you hand to an AI agent. Nothing gets uninstalled, every step is reversible. Windows, Mac and Linux all work.

Setup

  1. Turn on developer options

    On the TV, go to Settings → System → About and press the remote's OK button on the Build row seven times.

  2. Turn on debugging

    Settings → System → Developer options → USB debugging. If there is a separate "Wireless debugging" toggle, turn that on too.

  3. Find the TV's IP address

    Settings → Network & internet → Status. Note the number starting with 192.168. Your computer has to be on the same network as the TV: same Wi-Fi, or same router.

  4. Open Claude Code or Codex and paste the prompt

    Copy the text below, replace the two FILL THIS IN placeholders with your TV's model and IP address, and hand it to the agent. It takes care of the rest: installing the tooling, connecting to the TV, doing the cleanup. It checks every change on the TV itself with screenshots, and only stops to ask about what it can't see: sound, the remote, the apps you use.

Prompt

prompt.txt
I want you to clean up my Android TV over ADB. The goal: get rid of the ad and
recommendation rows, disable the factory apps I never use, and make the TV
faster. Run the commands yourself, check every change on the TV itself, and
explain what you are doing in plain language as you go.

MY TV
- Make / model: FILL THIS IN            (example: TCL Smart TV Pro)
- TV's IP address: FILL THIS IN         (TV > Settings > Network & internet > Status)
- "Developer options" and "USB debugging / Wireless debugging" are already on.
  My computer and the TV are on the same network.

RULES - follow these exactly
1. DO NOT UNINSTALL ANYTHING. Use only `pm disable-user --user 0`, so every
   change can be undone with `pm enable <package>`. `pm uninstall` is forbidden.
2. Do not suggest or attempt rooting, unlocking the bootloader, or flashing a
   custom ROM. That factory-resets the TV, and if the Widevine certificate
   drops from L1 to L3 Netflix falls back to SD. There is nothing to gain.
3. BACK UP AND MEASURE FIRST. Before changing anything, save these to a
   `tv-debloat` folder: `pm list packages -f`, `pm list packages -d`,
   `getprop`, `settings list global`, `settings list secure`,
   `settings list system` and `dumpsys meminfo`. Start a restore script
   (`restore.sh`, or `restore.ps1` on Windows) right away and add every
   package to it the moment you disable it. Repeat the memory measurement at
   the end and give me a before/after table.
4. CHECK YOUR OWN WORK ON THE TV. After every batch, press keys with
   `adb shell input keyevent` (Home, the D-pad, Back, Inputs/Source), pull a
   screenshot with `adb exec-out screencap -p > shot.png` and look at it:
   does the home screen come up, does the Inputs menu open, can you switch
   to HDMI, do Netflix and YouTube still launch? Fix what you see before
   moving on. If the screenshot comes out blank while Live TV or HDMI is on
   screen, press Home first. Ask me only about what a screenshot cannot
   show: sound, the remote's own buttons, the on-screen keyboard.
5. SMALL BATCHES, ONE COMMAND AT A TIME. Disable at most 10 packages per
   batch. Run each `pm` command in its own shell call: chained commands can
   silently stop after the first one. If something breaks, re-enable the
   last batch first, then narrow it down one package at a time.
6. NEVER DISABLE WHAT THE TV NEEDS TO WORK, whatever the brand:
   - the TV app and the input services that play HDMI and the antenna/tuner
   - the Inputs/Source menu (the brand's "quick panel")
   - the remote control and Bluetooth pairing services
   - the on-screen keyboard (*.inputmethod.*)
   - Play Store and Play Services: com.android.vending,
     com.google.android.gms, com.google.android.gsf
   - com.android.location.fused: disabling it sends the TV into a boot loop
   - the current home screen, until a new one is installed and set as default
   Package names often do not say what a package does. Before disabling one
   you are unsure of, look at its activities and services with
   `dumpsys package <name>`. If it is still unclear, ask me.
   Known traps on TCL, for example:
      com.tcl.suspension          -> the Inputs/Source menu on the remote.
                                     The name looks like junk but disabling it
                                     means you can no longer switch to HDMI.
      com.tcl.ttvs                -> system updates (Network / USB). The name
                                     suggests a text-to-speech service, but
                                     disabling it makes every option in the
                                     system update menu silently stop working.
      com.tcl.tv, com.tcl.tvinput -> HDMI / antenna input services
      com.tcl.providers.config,
      com.tcl.initsetup           -> disabling either drops the Wi-Fi
      com.google.android.tv.remote.service,
      com.tcl.tcl_bt_rcu_service,
      com.tcl.autopair            -> the remote control
7. ASK BEFORE ANYTHING THAT DEPENDS ON ME. Streaming apps, the voice
   assistant, Chromecast, screen mirroring and the system update service:
   show me a checklist and disable only what I do not tick.
8. KEEP A RECORD. Write every package you disable to `disabled.txt` in the
   `tv-debloat` folder. Keep a `DEBLOAT-LOG.md` in the same folder describing
   what you did, why, and the exact command to undo each change.

DO IT IN THIS ORDER
a) Check whether `adb` is installed and install it if not. Check which
   operating system I am on and pick the right route: on Windows download
   Google's platform-tools package and add it to PATH, on macOS
   `brew install android-platform-tools`, on Linux `apt install adb`. Then
   connect with `adb connect <IP>:5555`. The TV will show an "Allow debugging
   from this computer?" dialog, tell me so I can approve it. On Android 11 and
   above, if the TV asks for a pairing code on its "Wireless debugging" screen,
   use `adb pair` first.
   - On macOS, if adb says "No route to host" even though the port is open,
     macOS Local Network privacy is blocking it. Do not debug that: use the
     Python `adb-shell` package in a venv as the ADB client instead.
   - Ask me what is plugged into the TV's USB ports. Some TVs cut power to
     them while USB debugging is on, so a USB speaker or drive goes dead.
b) Back up and measure (rule 3).
c) Look for a ready-made list: if github.com/Gathin23/cleanyourtv has an
   `examples/` folder for my model or a close one, read its `debloat.txt`
   and the notes at the top, and use it as a starting point. Still check
   every package on my TV against rule 6.
d) Sort the packages into a table and show it to me:
   (1) telemetry, ad tracking (ACR such as Samba TV, Alphonso, Anoki) and
       the manufacturer's analytics;
   (2) the manufacturer's ad and content services: recommendation rows,
       content feeds, store demo mode;
   (3) background services I probably do not need: duplicate cast and share
       services, cleaners;
   (4) preloaded apps;
   (5) depends on me (rule 7);
   (6) untouchable (rule 6).
   Get my approval and start with groups 1 and 2.
e) Halve the animation speeds:
      settings put global window_animation_scale 0.5
      settings put global transition_animation_scale 0.5
      settings put global animator_duration_scale 0.5
f) Clear caches with `pm trim-caches 999G`.
g) Reboot the TV, check it with a screenshot and take the measurements again.

REPLACE THE HOME SCREEN
Google TV's own home screen is full of ads and "recommended for you" rows. I
want to use FLauncher instead (it is on the Play Store, free, open source, and
shows nothing but a grid of my apps).
- First ask me to install FLauncher and confirm that it is installed.
- List the apps that claim the home screen:
     cmd package query-activities -a android.intent.action.MAIN -c android.intent.category.HOME
  Set FLauncher as the default with `cmd package set-home-activity`, or have
  me pick it on the TV.
- On Google TV the setup wizard (com.google.android.tungsten.setupwraith) can
  take the home screen back even after the stock one is disabled. Check
  after a reboot, and if it does, disable it too.
- Only then disable the stock launcher: com.google.android.apps.tv.launcherx
  on Google TV, com.google.android.tvlauncher on Android TV.
- Reboot the TV and confirm with a screenshot that the home screen is still
  FLauncher.
- If `adb install` hangs on Android 14, it is waiting for a confirmation on
  the TV: push the APK and run `pm install -r` from the shell instead.

WHEN YOU ARE DONE, GIVE ME
1. The before/after RAM table.
2. The list of packages you disabled, each with a one-line "what this was".
3. The restore script, and a single command that undoes everything.
4. A reminder to switch USB debugging off if anything on the TV's USB ports
   stopped working.

The prompt borrows lessons from cleanyourtv, which also keeps ready-made lists for many TV models.

Four warnings

Never disable a package you can't identify by name On my TV, disabling com.tcl.suspension killed the "Inputs" button on the remote and I could no longer switch to HDMI. It turned out to be the source-select menu. On some TCL models, com.tcl.providers.config and com.tcl.initsetup drop the Wi-Fi the same way.

Don't disable the home screen before installing a new one Install FLauncher and set it as the default first. Only then disable the old launcher. Otherwise you get a black screen.

Don't root it Unlocking the bootloader factory-resets the TV, and if Widevine drops to L3 Netflix falls back to SD. There is nothing to gain: disable-user already does what root would.

Turn USB debugging off when you're done Some TVs cut power to their USB ports while debugging is on. If a USB speaker or drive stops working, switch off USB debugging in Developer options.

Undoing it

Nothing is uninstalled, so every step can be reversed. The agent keeps a list of what it disabled, so telling it "re-enable everything you disabled" is enough.

To bring back a single app yourself:

terminal
adb shell pm enable com.tcl.suspension