Skip to main content

How to Replace the Google TV Launcher Without Root

Installing a launcher is not enough on Google TV — the Home button stays wired to the stock one. Here is the reversible ADB method (set-home-activity plus an accessibility service) that actually works, with the per-remote gotchas.

Part 2 of a three-part series on taking back two Google TV sets over ADB, with an AI doing the driving. Part 1 removed the ads from the stock home screen; this one replaces the home screen entirely.

The short answer

Installing a third-party launcher on Google TV isn’t enough — the system keeps the stock launcher as the real HOME, and the remote’s Home button is hard-wired to it (on some remotes it doesn’t even send KEYCODE_HOME). You fix it in two parts over ADB, no root: set your launcher as the home activity with cmd package set-home-activity, then run a small accessibility service that intercepts the Home key and opens your launcher instead. It’s reversible, and it fails on at least one TV I tried — I’ll tell you which.

2 stepsset HOME + catch the key
3 TVs2 clean, 1 failed
0root required

What you’ll learn

  • Why “install launcher, set as default” silently doesn’t work on Google TV
  • The exact set-home-activity command and how to verify it stuck
  • The accessibility-service trick that actually recaptures the Home button
  • Per-brand gotchas: Xiaomi remotes sending the wrong keycode, a Hisense set where the button died, Sony’s layout
  • How to put the stock launcher back

Where this comes from

Based on a real job on my own Google TV sets in October 2026 — a Xiaomi Mi TV and a Sony Bravia, with a Hisense set as a third test. The commands and the per-device behaviour below were captured from the live ADB session. Home IPs are generalised to 192.0.2.x. The launcher I used is one I built myself; the technique is identical for any third-party launcher (Projectivy, FLauncher and Wolf Launcher are the usual off-the-shelf choices), so I’ve written it so you can substitute your own.

The symptom

I’d installed a replacement launcher and set it as the default home app the obvious way, through the UI. Google TV said fine. Then I pressed the Home button on the remote and landed straight back on Google’s launcher, sponsored row and all. Setting it “again” did nothing. The replacement would open if I launched it as an app, but the Home button — the one control that matters on a TV — refused to go to it.

Advertisement

The environment

TV 1 Xiaomi Mi TV (MiTV-AFMU1), Google TV
TV 2 Sony Bravia, Google TV
TV 3 Hisense (Android TV 10) — the one this didn’t fully work on
Access ADB over the network (port 5555)
Root none
Replacement launcher a minimal one I built; method is the same for Projectivy / FLauncher / Wolf
Who did the work Claude (an AI) drove the ADB session and worked out the per-remote keycode differences

The AI angle is worth being precise about, because it’s the thread of this series: the valuable part here wasn’t typing set-home-activity — it was discovering why it wasn’t enough, and that different remotes send different keycodes for the same button. I had Claude dump the key events from each remote (logcat while pressing Home) and compare them. That’s how the Xiaomi “wrong keycode” problem below got found rather than guessed. (AI also helped draft this article; the work and evidence are from the real sets.)

What I first suspected

That Google TV simply needed the default-home choice “confirmed”. It doesn’t — the choice was already made. The real problem is two separate things wearing one costume:

  1. Google TV keeps the stock launcher as the resolved HOME. Even after you set a new home activity, the launcher that resolves for category.HOME can revert, and the system launcher stays privileged.
  2. The remote’s Home button bypasses the home-app setting entirely. It’s wired to the system launcher at a lower level — and on some remotes it doesn’t even emit KEYCODE_HOME. The Xiaomi remote sends KEYCODE_ALL_APPS.

So you have to both set the home activity and intercept the button.

The fix

1. Install your launcher and find its home activity

Install the launcher APK (adb install launcher.apk), then ask the system which activities answer the HOME intent so you have the exact component name:

adb -s 192.0.2.11:5555 shell cmd package query-activities --brief \
  -a android.intent.action.MAIN -c android.intent.category.HOME

You’ll get something like com.your.launcher/.MainActivity. In my case it was com.gathin.tvhome/.MainActivity — substitute your own launcher’s component throughout.

2. Set it as the home activity

adb -s 192.0.2.11:5555 shell cmd package set-home-activity --user 0 com.gathin.tvhome/.MainActivity

3. Verify it actually resolves

Don’t trust the command’s silence — check what the system now resolves as HOME:

adb -s 192.0.2.11:5555 shell cmd package resolve-activity --brief \
  -a android.intent.action.MAIN -c android.intent.category.HOME
# -> should print your launcher's package, not com.google.android.apps.tv.launcherx

If it still shows Google’s launcherx, your launcher may be missing the LEANBACK_LAUNCHER/HOME intent category in its manifest — which is the sort of thing you hit with a self-built launcher and not with Projectivy.

4. Recapture the Home button with an accessibility service

This is the step every “just set the default” guide misses. The launcher ships a tiny accessibility service whose only job is to catch the Home key and open the launcher. Enable it over ADB:

adb -s 192.0.2.11:5555 shell settings put secure enabled_accessibility_services com.gathin.tvhome/.InputKeyService
adb -s 192.0.2.11:5555 shell settings put secure accessibility_enabled 1

Preserve other accessibility services. If you already run one, don’t overwrite the list — append with a colon separator (existing/.Service:com.gathin.tvhome/.InputKeyService). Blindly setting the single value will disable whatever was there before.

Any real launcher that offers “set as default launcher” help on Android TV (Projectivy does) exposes an equivalent accessibility toggle — this is the ADB way to switch on the same thing without a mouse.

5. Let it start on boot

adb -s 192.0.2.11:5555 shell cmd appops set com.gathin.tvhome AUTO_START allow

6. Test the button, not just the launcher

adb -s 192.0.2.11:5555 shell input keyevent KEYCODE_HOME
# the screen should land on your launcher

Then physically press Home on the remote. The input keyevent test and the physical button can behave differently — which is the whole point of the next section.

Per-brand gotchas (the part that saved me hours)

This is where identical commands produced three different outcomes.

Sony Bravia — clean. set-home-activity plus the accessibility service was enough; the physical Home button returned to the new launcher. The only extra consideration was the remote’s dedicated TV button and CH+/CH- behaviour, which I let pass through.

Xiaomi Mi TV — the remote sends the wrong keycode. On the Xiaomi, the Home button emits KEYCODE_ALL_APPS, not KEYCODE_HOME. An accessibility service listening only for Home will never fire. The fix is to have the service also catch KEYCODE_ALL_APPS (in my build that’s a flag; in an off-the-shelf launcher, look for an “Android TV / which button” option). You can confirm what your remote sends by watching the log while you press it:

adb -s 192.0.2.12:5555 shell "logcat -v brief | grep -i -E 'keycode|KeyEvent'"

Hisense (Android TV 10) — it didn’t work, and I’ll say so. On the Hisense set, once the stock launcher was out of the way the Home button did nothing at all, even with the accessibility service enabled. The key event wasn’t reaching anything my service could catch. I reverted that TV. If you have a Hisense on an older Android TV build, set your expectations accordingly — this technique is not universal, and anyone claiming it always works hasn’t tried enough hardware.

How to undo it

Point HOME back at the stock Google TV launcher and switch the accessibility service off:

adb -s 192.0.2.11:5555 shell cmd package set-home-activity --user 0 com.google.android.apps.tv.launcherx/.MainActivity
adb -s 192.0.2.11:5555 shell settings put secure enabled_accessibility_services ''
adb -s 192.0.2.11:5555 shell settings put secure accessibility_enabled 0

(If you appended to an existing accessibility list in step 4, restore that list rather than clearing it.) Because nothing was rooted or deleted, a factory reset also returns the TV to stock.

Don’t disable the stock launcher until the above works. It’s tempting to pm disable-user the Google TV launcher for good measure. Don’t — not until your replacement reliably owns the Home button on that specific set. If you remove the stock launcher first and the button doesn’t transfer (see Hisense), you’re left with a TV whose Home key goes nowhere, and recovering that over ADB is a bad evening.

When it won’t work

  • Older Android TV builds (my Hisense on Android TV 10) can swallow the Home key so your service never sees it. No reliable no-root fix there that I found.
  • Remotes with a non-standard Home keycode (Xiaomi’s ALL_APPS) need the service to catch that keycode too — a launcher that only handles KEYCODE_HOME won’t cut it.
  • Launchers missing the HOME intent category in their manifest won’t resolve as home at all; off-the-shelf ones are fine, self-built ones need the manifest right.

Reusable checklist

  1. Install the launcher; find its HOME component with cmd package query-activities … category.HOME.
  2. cmd package set-home-activity --user 0 <launcher>/.MainActivity.
  3. Verify with resolve-activity — don’t trust silence.
  4. Enable the launcher’s accessibility service (append, don’t overwrite the list).
  5. cmd appops set <launcher> AUTO_START allow.
  6. logcat | grep keycode while pressing Home — confirm which keycode your remote actually sends, and catch that one.
  7. Test input keyevent KEYCODE_HOME and the physical button.
  8. Only consider disabling the stock launcher once the button reliably transfers.
  9. Keep the revert commands to hand.

The takeaway: replacing a Google TV launcher without root is two jobs, not one — own the HOME resolution and intercept the Home key — and the second job varies by remote and by firmware. Get it working as a reversible overlay first; leave the stock launcher installed until you’re sure. Part 3 goes after the ad and telemetry services behind the scenes.

Your turn

Advertisement

Would you replace your TV’s launcher, or just live with the stock one?

Swapping the launcher gives you a home screen with genuinely no sponsored space — but it’s two fiddly steps and it didn’t work on every set I tried. Worth it?

Follow the conversation on XEach answer opens a post on X that you can edit before sending.

Tell me on X @mustafa_homelab — especially which launcher and TV combination worked (or didn’t) for you.

Share this article
Written by MustafaEngineer running a 24/7 homelab since 2022. Every guide here is built and tested on my own hardware. No paid placements.

Keep reading