Fishbowl
Browse documentation

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 connect and adb disconnect steps - your device is already connected. If only one device is plugged in, you can also omit the -s <device-ip>:5555 flag from all commands. If multiple devices are connected, replace <device-ip>:5555 with the device serial shown by adb 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:

  1. Download from https://developer.android.com/tools/releases/platform-tools
  2. Extract to a folder
  3. 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.

  1. Enable Developer Options - go to Settings > About and tap Build number 7 times
  2. Go to Settings > Developer options
  3. Enable USB debugging
  4. Connect the device to your computer via USB
  5. On the device, accept the "Allow USB debugging?" dialog and tick "Always allow from this computer"
  6. Switch ADB to WiFi mode:
    adb tcpip 5555
    
    If you have multiple devices connected, target a specific one:
    adb -s <serial-number> tcpip 5555
    
  7. Note the device's IP address (Settings > Network > WiFi > your network > IP address)
  8. 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 5555 after each restart.

Method B: Android 11+ Wireless Debugging

Android 11 and newer support wireless debugging without a USB cable.

  1. Enable Developer Options - go to Settings > About and tap Build number 7 times
  2. Go to Settings > Developer options > Wireless debugging
  3. Enable Wireless debugging and tap into it
  4. Tap Pair device with pairing code - note the pairing code and IP:port
  5. On your computer:
    adb pair <ip>:<pairing-port>
    # Enter the pairing code when prompted
    adb connect <ip>:<connection-port>
    
    The connection port is shown on the Wireless debugging screen (different from the pairing 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

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