Skip to main content
lindroids export builds a program’s app on the phone in milliseconds (A program’s own app). Installing it normally takes Android’s installer and the user’s taps: with Termux from Google Play, which may not open the installer, the app goes to Download and the user taps it in the file manager, then Install, sometimes Play Protect’s questions too. ADB is the other way in. The shell user installs apps with no installer at all, and Android 11+ can run adbd on the phone itself, Wireless debugging, which pairs with a six-digit code. Termux’s own adb (package android-tools) pairs with it once, like a computer would, and from then on:

Setting it up, once

  1. It offers pkg install android-tools if Termux has no adb (about 7 MB).
  2. It opens Developer options. Turn them on first if needed (Settings → About → Software information → tap Build number 7 times).
  3. Wireless debugging → On (needs Wi-Fi) → Pair device with pairing code.
  4. Keep the code on screen, with Termux beside Settings (split screen or a pop-up window), and type it into Termux: leaving the code’s dialog cancels it.
Lindroids finds the pairing port itself, pairs, finds Wireless debugging’s own port, checks that it reaches the phone’s shell, and remembers it. lindroids adb pair <code> <port> takes both from the dialog without asking.

What happens on export

While Wireless debugging is on, export (and lindroids app install) installs with adb install -r over 127.0.0.1 and disconnects. When it is off, which happens when Wi-Fi goes and after a restart, the export says so and falls back to Android’s installer as before. Its Quick Settings tile (Developer options → Quick settings developer tiles → Wireless debugging) turns it on again; the pairing stays. The ports are found on the phone only:
  • mDNS: Android advertises _adb-tls-pairing._tcp and _adb-tls-connect._tcp; Lindroids asks with a unicast-answer query. Other phones on the Wi-Fi may answer, so a port counts only if it answers on 127.0.0.1.
  • 127.0.0.1’s ports: 5555 and the kernel’s range for port 0 (ip_local_port_range, normally 32768–60999), in parallel, each asked with an ADB CNXN: Wireless debugging’s adbd answers STLS, adb tcpip answers AUTH, an adbd without keys answers CNXN, and the pairing server (TLS) answers with a TLS alert. A scan takes about 5 s; the port found is remembered, so later exports ask it first.
adb tcpip 5555, done once from a computer, works too: the phone then asks once to allow Termux’s key (“Allow USB debugging?”).

Why ADB

  • No taps, on every Termux: the Google Play build cannot open Android’s installer at all.
  • No Play Protect dialogs in the way of the installer’s (assumed; to be checked on the tablet: Play may still scan apps installed over ADB, silently).
  • Google’s developer verification (2026–2027) is meant to leave ADB installs alone, while installs of apps signed by an unregistered key through the installer will need the user’s one-time “advanced flow”.
What it costs: Developer options on, and Wireless debugging on while exporting. Any program in Termux can then use Termux’s paired key to get the phone’s shell (the same as a paired computer). lindroids adb forget and removing Termux under Paired devices undo it.

Tested

Lab VM b15 (Bliss OS, Android 12L, x86_64, Termux 0.118 from F-Droid, 2026-11-02). It has no Wi-Fi, so no Wireless debugging; its adbd listens on 5555 with no keys, which tests the rest: Still to test, on the tablet (Android 16, Termux from Google Play): android-tools in Play Termux’s repository; Wireless debugging’s adbd on 127.0.0.1; mDNS answers from Termux; pairing in split screen; Play Protect on ADB installs; Wireless debugging off → the installer fallback.