A lightweight Python remote control for Android TV using ADB over network.
Works on desktop and mobile (Pydroid3).
- 📡 ADB over WiFi (no USB required)
- 🎮 Full D-Pad control (navigation + OK)
- 🔊 Volume & Power controls
- 🏠 System buttons (Home, Back, Menu)
- ⌨️ Send text input to the device
- 🧵 Async ADB calls (non-blocking UI)
- 📱 Responsive UI (auto scaling)
- ⌨️ Keyboard shortcuts support
- 📝 Logging system (remote.log)
- Python 3.8+
- ADB installed and accessible in PATH (PC only)
pipx install adbtvremote
adbtvremoteWhy pipx? Keeps the app isolated in its own virtual environment, avoiding dependency conflicts with other Python projects.
pip install adbtvremote
adbtvremotegit clone https://github.com/DanVerseDev/android-tv-remote.git
cd android-tv-remote
pip install -r requirements.txt
python main.pyNote: On Pydroid3, this app uses a pure Python ADB implementation (
adb-shell), so no ADB binary is required.
- Install the package via pip in Pydroid3:
pip install adbtvremote- Create a new Python script (e.g.,
run.py) with the following content:
from adbtvremote.app import main
import tkinter
main()- Run the script in Pydroid3.
Note: Make sure
customtkinteris installed and the ADB binary is available on your Android device (manual setup may be required).
-
Enable developer options on your Android TV
-
Enable:
- USB debugging
- Wireless debugging (if available)
-
Connect once via USB (optional but recommended):
adb tcpip 5555- Get device IP and connect:
adb connect 192.168.x.x:5555After installation, simply run:
adbtvremoteOr if running from source:
python main.py- Enter IP:
192.168.x.x:#### - Click Connect
- UI buttons for navigation and system actions
- Keyboard:
- Arrow keys → Navigation
- Enter → OK
- Backspace → Back
- Escape → Home
- Click Send Text
- Input text and send directly to device
- Uses
adb shell input keyeventfor buttons - Uses
adb shell input textfor text input - Runs ADB commands in background threads
- Logs all activity for debugging to
remote.log
.
├── main.py
├── remote.log (generated)
└── README.md
The app automatically selects the best ADB method:
- 💻 PC → Uses system
adbbinary (fast, full compatibility) - 📱 Pydroid3 → Uses pure Python
adb-shell(no ADB required)
No configuration needed.
- Device and host must be on the same network
- Some TVs may require pairing for wireless ADB
- Text input replaces spaces with
%s(ADB limitation)
All ADB calls and errors are logged in remote.log
MIT License - Copyright (c) 2026 Daniel Martí
Built with ❤️ by Daniel Martí aka DanVerse