# Testing on a physical Android device The fastest inner loop for this app is building the debug APK and installing it straight onto a real device over USB (an Android phone, or an Android-based DAP like the FiiO M33). This is quicker than `nix run .#emulate` and tests real networking to your MPD server. ## One-time device setup 1. **Enable Developer Options**: Settings → About phone → tap **Build number** seven times. 2. **Enable USB debugging**: Settings → System → Developer options → **USB debugging**. 3. **Use a data-capable USB cable** and plug the device directly into the machine. Many cables are charge-only — if the device never appears in `lsusb`, suspect the cable or the USB mode first. 4. **Unlock the device screen.** The *"Allow USB debugging?"* authorization dialog only appears while unlocked — this is the usual reason "no popup shows up". Tap **Allow** and check **Always allow from this computer**. ### NixOS note (this machine) `adb` is provided by the dev shell (`nix develop`). On this NixOS host it talks to devices **without** needing `programs.adb.enable`, custom udev rules, or an `adbusers` group: a plugged-in, authorized device shows up directly as `device`. If a device instead shows as: - `unauthorized` → you haven't accepted the on-device prompt yet (unlock the screen and tap Allow). - `no permissions` → *then* you'd need udev rules; add `programs.adb.enable = true;` and your user to the `adbusers` group in the NixOS config, `nixos-rebuild switch`, re-login, and `adb kill-server`. (Not currently needed here.) ## Verify the device is connected ```sh adb devices -l # should list the device as `device` (not unauthorized) adb shell getprop ro.product.model ``` If `adb devices` is empty, check `lsusb` for the device (Pixels show as `Google Inc. …` / vendor `18d1`), then re-check the cable and USB debugging. ## Build, install, launch From the repo root, inside `nix develop`: ```sh ./gradlew assembleDebug adb install -r app/build/outputs/apk/debug/app-debug.apk adb shell am start -n ca.ksamad.musicremote/.MainActivity # optional auto-launch ``` `-r` reinstalls over the existing app **keeping its data** (so persisted connection settings survive). To simulate a clean first run: ```sh adb shell pm clear ca.ksamad.musicremote ``` ## Screenshots ```sh adb exec-out screencap -p > screenshot.png ``` ## Troubleshooting - **"failed to connect to :"** — the device can't reach the MPD server. Check the device is on the **same WiFi/LAN** as the server. A common gotcha: WiFi is off on a portable DAP, so `adb shell ip route` shows no route and `adb shell ping ` returns *"Network is unreachable"*. - **App looks stale after changes** — reinstall the APK; restarting the device or emulator alone does not update the installed app. ## Wireless alternative (no cable) Android 11+ supports wireless debugging (Developer options → **Wireless debugging** → *Pair device with pairing code*), then on the host: ```sh adb pair : # enter the code shown on-device adb connect : ``` This needs no cable and no udev rules; the device must share your LAN.