ADB Deployment Guide
ADB (Android Debug Bridge) is a command-line tool that lets you communicate with Android devices from a computer. It can install apps, run shell commands, and manage devices over USB or a network connection. For full documentation, see the official Android ADB guide.
This guide covers deploying Fishbowl to Android devices using ADB. It focuses on WiFi/Ethernet deployment but all commands work over USB as well.
Using USB instead of network? Skip the
adb connectandadb disconnectsteps - your device is already connected. If only one device is plugged in, you can also omit the-s <device-ip>:5555flag from all commands. If multiple devices are connected, replace<device-ip>:5555with the device serial shown byadb devices.
Prerequisites
- A Mac, Linux, or Windows computer (ADB over network is preferred, but USB works too)
- All target devices powered on and connected via network or USB
- The Fishbowl APK URL or file
1. Install ADB
The setup script downloads the Android SDK Platform Tools, extracts ADB, and adds it to your system PATH so you can run adb from any terminal window.
Download: macOS/Linux | Windows
macOS / Linux
chmod +x setup-adb.sh
./setup-adb.sh
Windows (PowerShell)
.\setup-adb.ps1
Note: You may need to restart your terminal after running the script for the PATH changes to take effect.
Verify
adb version
Manual install
If you prefer not to use the setup script, you can install ADB manually:
- Download from https://developer.android.com/tools/releases/platform-tools
- Extract to a folder
- Add that folder to your system PATH
2. Enable ADB over WiFi on each device
The exact steps vary by device manufacturer and Android version. Below are the most common methods.
Method A: Standard Android (Developer Options)
Works on most stock Android devices.
- Enable Developer Options - go to Settings > About and tap Build number 7 times
- Go to Settings > Developer options
- Enable USB debugging
- Connect the device to your computer via USB
- On the device, accept the "Allow USB debugging?" dialog and tick "Always allow from this computer"
- Switch ADB to WiFi mode:
If you have multiple devices connected, target a specific one:adb tcpip 5555adb -s <serial-number> tcpip 5555 - Note the device's IP address (Settings > Network > WiFi > your network > IP address)
- Disconnect USB and connect over WiFi:
adb connect <device-ip>:5555
Note: ADB over WiFi resets on reboot. You'll need to reconnect via USB and re-run
adb tcpip 5555after each restart.
Method B: Android 11+ Wireless Debugging
Android 11 and newer support wireless debugging without a USB cable.
- Enable Developer Options - go to Settings > About and tap Build number 7 times
- Go to Settings > Developer options > Wireless debugging
- Enable Wireless debugging and tap into it
- Tap Pair device with pairing code - note the pairing code and IP:port
- On your computer:
The connection port is shown on the Wireless debugging screen (different from the pairing port).adb pair <ip>:<pairing-port> # Enter the pairing code when prompted adb connect <ip>:<connection-port>
Note: Persists across reboots if the toggle is left on in Developer Options.
Method C: Commercial / Signage Displays
Many commercial Android displays have ADB settings in their admin or service menus:
| Manufacturer | How to access |
|---|---|
| Philips 10BDL | Buttons 1 and 3 simultaneously, PIN 1234, then Settings > Signage Display > Server settings > ADB Over Network |
| Other signage | Check the manufacturer's admin/service menu documentation |
After enabling ADB, note each device's IP address and confirm it's on the same network as your computer.
Note: ADB typically persists across reboots on commercial displays.
First-time ADB trust (per device)
The first time you connect from your computer, the device will show a dialog: "Allow USB debugging?"
- Tick "Always allow from this computer"
- Tap OK
This only appears once per device. After accepting, your computer is permanently trusted.
To trigger this dialog on a single device:
adb connect <device-ip>:5555
# Accept the dialog on the device
adb disconnect <device-ip>:5555
To trust multiple devices at once, use the trust script. It connects to each device one at a time, waits for you to accept the dialog on the device screen, verifies that the device is authorized, then disconnects and moves to the next device. You can pass device IPs as a comma-separated list or point to a devices.txt file.
Download: macOS/Linux | Windows
macOS/Linux:
chmod +x trust-devices.sh
./trust-devices.sh 192.168.1.101,192.168.1.102,192.168.1.103
# or
./trust-devices.sh devices.txt
Windows:
.\trust-devices.ps1 192.168.1.101,192.168.1.102,192.168.1.103
# or
.\trust-devices.ps1 devices.txt
Note: You need physical access to each device during this process to tap "OK" on the trust dialog. The script will wait until the dialog is accepted before moving on.
3. Deploy the APK
The deploy script downloads the Fishbowl APK (if given a URL), then connects to each device over ADB, installs the APK, launches the app, and reports whether each device succeeded or failed. It accepts a single IP, a comma-separated list, or a devices.txt file.
Download: macOS/Linux | Windows
macOS/Linux:
chmod +x deploy.sh
./deploy.sh <apk> <devices>
Windows:
.\deploy.ps1 <apk> <devices>
| Parameter | Description |
|---|---|
<apk> |
URL or local file path to the Fishbowl APK |
<devices> |
A single IP, a comma-separated list of IPs, or a path to a text file with one IP per line. Defaults to devices.txt if omitted |
Device file example (comments and blank lines are ignored):
192.168.1.101 # Reception
192.168.1.102 # Meeting Room A
192.168.1.103 # Meeting Room B
192.168.1.104 # Board Room
Manual deployment (without scripts)
If you prefer to deploy manually or the scripts don't suit your setup:
macOS/Linux:
# Download the APK (skip if you already have it)
curl -fSL -o fishbowl.apk https://files.fishbowlmeetings.com/fishbowl_latest.apk
# Connect to the device
adb connect 192.168.1.101:5555
# Install (replace existing, allow downgrade)
adb -s 192.168.1.101:5555 install -r -d fishbowl.apk
# Launch the app
adb -s 192.168.1.101:5555 shell am start -n com.strix.fishbowl/.MainActivity
# Disconnect
adb disconnect 192.168.1.101:5555
Windows:
# Download the APK (skip if you already have it)
Invoke-WebRequest -Uri https://files.fishbowlmeetings.com/fishbowl_latest.apk -OutFile fishbowl.apk -UseBasicParsing
# Connect to the device
adb connect 192.168.1.101:5555
# Install (replace existing, allow downgrade)
adb -s 192.168.1.101:5555 install -r -d fishbowl.apk
# Launch the app
adb -s 192.168.1.101:5555 shell am start -n com.strix.fishbowl/.MainActivity
# Disconnect
adb disconnect 192.168.1.101:5555
4. Link devices to Fishbowl server
Follow our linking setup instructions to pair each device with a room. Devices with pre-configured encrypted credentials will connect automatically within seconds of linking.
5. Lock down the display (optional)
Philips 10BDL series
See the Philips 10BDL5051T Manual Setup for device-specific lock-down settings.
Other devices
For non-signage Android devices, consider:
- Setting Fishbowl as Device Owner (Kiosk Mode)
- Setting Fishbowl as the default launcher (via ADB or device settings)
- Using Android's screen pinning feature (Settings > Security > Screen pinning)
- Enabling kiosk mode if supported by the device manufacturer
Troubleshooting
"Connection refused" or timeout
- Confirm the device and your computer are on the same network/subnet
- Ping the device:
ping <device-ip>- if this fails, the network is blocking device-to-device traffic (AP isolation). Use a different network or deploy over USB instead - Check ADB is enabled on the device (see Section 2 for your device type)
- Try restarting ADB:
adb kill-server && adb start-server - On standard Android, ADB over WiFi resets after reboot - reconnect via USB and re-run
adb tcpip 5555
"error: more than one device/emulator"
Multiple devices are connected. List them and target a specific one:
adb devices
adb -s <serial-number> <command>
"unauthorized" after connecting
The trust dialog is showing on the device. Go to the device, tick "Always allow from this computer" and tap OK.
If the device has no screen interaction (headless), you may need to connect via USB first to approve the trust dialog.
Install fails with INSTALL_FAILED_UPDATE_INCOMPATIBLE
The existing app was signed with a different key. Uninstall first:
adb connect <ip>:5555
adb -s <ip>:5555 uninstall com.strix.fishbowl
adb -s <ip>:5555 install fishbowl.apk
adb disconnect <ip>:5555
Install fails with INSTALL_FAILED_OLDER_SDK
The APK's minSdk is higher than the device's Android version. Check the device version:
adb -s <ip>:5555 shell getprop ro.build.version.sdk
Ensure you're using an APK build compatible with the device.
App doesn't auto-launch after install
Manually launch via ADB:
adb -s <ip>:5555 shell am start -n com.strix.fishbowl/.MainActivity
Updating devices later
Re-run the deploy script with the new APK - it overwrites the existing installation:
macOS/Linux:
./deploy.sh https://files.fishbowlmeetings.com/fishbowl_latest.apk
Windows:
.\deploy.ps1 https://files.fishbowlmeetings.com/fishbowl_latest.apk
Quick reference
Deploy commands
| Task | macOS/Linux | Windows |
|---|---|---|
| Install ADB | ./setup-adb.sh |
.\setup-adb.ps1 |
| Deploy to one device | ./deploy.sh <apk> 192.168.1.101 |
.\deploy.ps1 <apk> 192.168.1.101 |
| Deploy to multiple | ./deploy.sh <apk> 192.168.1.101,192.168.1.102 |
.\deploy.ps1 <apk> 192.168.1.101,192.168.1.102 |
| Deploy from file | ./deploy.sh <apk> devices.txt |
.\deploy.ps1 <apk> devices.txt |
Common ADB commands
| Task | Command |
|---|---|
| Connect | adb connect 192.168.1.101:5555 |
| Check connection | adb devices |
| Switch to WiFi (USB) | adb tcpip 5555 |
| Target specific device | adb -s <serial-or-ip:port> <command> |
| Install APK | adb -s 192.168.1.101:5555 install -r -d fishbowl.apk |
| Uninstall | adb -s 192.168.1.101:5555 uninstall com.strix.fishbowl |
| Launch app | adb -s 192.168.1.101:5555 shell am start -n com.strix.fishbowl/.MainActivity |
| Check Android version | adb -s 192.168.1.101:5555 shell getprop ro.build.version.sdk |
| Check device model | adb -s 192.168.1.101:5555 shell getprop ro.product.model |
| Disconnect | adb disconnect 192.168.1.101:5555 |
| Disconnect all | adb disconnect |
| Restart ADB | adb kill-server && adb start-server |