A KernelSU / Magisk module that brings back Android 9-style 2-button navigation (back + home) on the Google Pixel 9a running Android 17.
Important
Pixel 9a (tegu) only. Only tested on a Pixel 9a. Each release works on one exact
Android build. Pick the release for your build in the table below.
| Action | Result |
|---|---|
| Tap home | Home |
| Long-press home | Assistant / Circle to Search |
| Tap back | Back |
| Swipe up from the bar | Recents |
| Swipe sideways along the bar | Switch to the previous / next app |
Note
No prebuilt zips. The module contains a patched copy of Google's Pixel Launcher, which can't be redistributed here. You build the module zip yourself (a few minutes, see Build the module), from your own phone or from Google's OTA.
- Pixel 9a on one of the Android builds listed below.
- Root with KernelSU (tested) or Magisk (untested).
- overlayfs support for modules:
- KernelSU: install the meta-overlayfs metamodule (from the KernelSU project) first, and reboot. Without a metamodule, KernelSU installs this module but can't mount its files, so nothing changes. If you installed this module before meta-overlayfs, install it again afterwards.
- Magisk: nothing extra; Magisk mounts module files itself.
- A PC to build the module: Python 3.10+, Java 17+, apktool 3.x, Android SDK build-tools, and adb (platform-tools).
Find your build in Settings → About phone → Build number (and Android version → Android security update), then use the matching release from Releases.
| Release | Android | Build number | Security patch | Stock launcher SHA-256 |
|---|---|---|---|---|
v3.2-CP4A.261105.040.A1 |
Android 17 | CP4A.261105.040.A1 |
November 2026 (2026-11-05) |
bb41ffda… |
v3.2-CP3A.261005.005 |
Android 17 | CP3A.261005.005 |
October 2026 (2026-10-05) |
9806f0ca… |
Your build isn't listed? It hasn't been tested. The builder may still work: if Google changed the launcher code, it stops without making a zip.
- Download the Source code (zip) of your release and unzip it.
- Download apktool 3.x and save it as
tools/apktool.jar. - Build it, either way:
- From your phone (easiest): turn on USB debugging, connect the phone and run
Root isn't needed for this step.
python build_module.py
- From Google's full OTA for your build
(developers.google.com/android/ota#tegu,
also needs 7-Zip):
python build_module.py --ota tegu-ota-<build>-<hash>.zip
--build-tools <sdk>/build-tools/<version>. - From your phone (easiest): turn on USB debugging, connect the phone and run
- Check that the printed
stock launcherSHA-256 matches your release (table above). The module is inout/TwoButtonNav-tegu-<build>-<version>.zip.
The first build creates a signing key in keystore/. Keep it, and use the same key for later
builds (see BUILDING.md).
- Meet the prerequisites (KernelSU: meta-overlayfs first, then reboot).
- KernelSU / Magisk → Modules → Install → choose the zip you built.
- Reboot. About 30 seconds after boot the module:
- switches the phone to 2-button navigation (first boot only),
- compiles the patched launcher once, which may reload the home screen.
Switch modes any time in Settings → System → Navigation mode, or with the module's Action button (2-button ↔ gestures).
An OTA removes root and changes the Pixel Launcher. When the module sees a launcher it wasn't built for, it turns its launcher patch off by itself and switches you to gestures, so nothing breaks. After re-rooting, build and install the module again for your new build.
- Nothing changed after reboot (KernelSU): meta-overlayfs is missing, or was installed after this module. Install meta-overlayfs, reboot, reinstall this module, reboot.
- Back to gestures: Settings → System → Navigation mode, or
adb shell cmd overlay enable-exclusive --category com.android.internal.systemui.navbar.gestural - Uninstall: remove the module in KernelSU / Magisk and reboot; navigation returns to gestures.
- Logs:
/data/adb/modules/two_button_navigation_launcher/guard.logandtwobutton.log
Since Android 16/17 the phone navigation bar is drawn by the Pixel Launcher's taskbar code, not SystemUI, and it only creates buttons in 3-button mode. A framework overlay alone therefore only gives a pill with no back button.
The module contains the framework's 2-button overlay plus a patched copy of the Pixel Launcher from the matching Android build:
| # | Change |
|---|---|
| P1 | The taskbar draws back + home in 2-button mode |
| P2 | Taps on the bar reach the buttons; only a real swipe becomes a gesture |
| P3 | The Recents button is hidden (and stays hidden across lock/unlock) |
| P4 | Swipe up opens recents; a sideways swipe with nowhere to go springs back |
| P5 | Gestures start immediately (gesture mode's touch threshold instead of 3×) |
The installer and a boot-time check both verify the stock launcher's SHA-256, so the patched launcher only ever runs on the exact build it was made from. Android keeps the launcher's data (your home screen layout) even though its signature changes.
Maintainers: see BUILDING.md to build a release for a new Android build, and CHANGELOG.md for changes.
- The 2-button navigation overlay comes from rwilco12's Android 12/13 module, repackaged with a newer signature.
- apktool for decoding and rebuilding the launcher.
MIT, for this project's scripts and patches. The Pixel Launcher belongs to Google and is never included here; the bundled 2-button overlay keeps its original authors' terms.
Modifying system apps can break things. Use at your own risk, and keep a way to recover (USB debugging, or KernelSU/Magisk safe mode).