Managing several Android devices in single commands

From my contribution in my former company’s blog

Recently, while working on a mobile project, I found myself spending a lot of time connecting a device, uninstalling the previous version of the Application Under Test (AUT), installing the new one, and then disconnecting the device, just to do it again on another 6 or 7 devices (I would like to talk about why it is better to test on actual devices than in a simulator, but that topic deserves its own blog post).

For this post, I want to describe a solution I found to manage all of the attached devices with a single command.

First I got this device

usb hub

(you can get it thru Amazon here) which is just one of many different options available, depending on the arrangement, number of ports, shape, etc. I picked this one because it was cheap and the switches come in handy because we can exclude devices just by switching OFF that specific device and there’s no need to connect/disconnect any device. Just adding ports to your computer helps, but we need to get the most of them.

When working with Android devices and we want, for example, to install an app, we have to type the following command in the terminal:

adb install -r path/to/the/app/to/install.apk

This works fine when you have a single device attached because adb is designed for a single device, but when you have multiple devices attached, you get an error, like so:

- waiting for device -
error: more than one device and emulator
- waiting for device -
error: more than one device and emulator
- waiting for device -

We need to specify to adb the device we want to send the command to. To do so, we need to first get the device ID of every device connected by typing:

adb devices

This command will return something like:

List of devices attached

Then to install on each device, we would need to copy each of these ids, and include them in the following command:

adb -s (deviceID) install -r path/to/the/app/to/install.apk

If I were to do this, I would need to copy each deviceID, type the above command seven times, pasting a different deviceID each time. Although this is better than connecting and disconnecting each device, this is still not the most productive way.

Searching the web for a solution, I found on Stackoverflow a script that solves this problem nicely.


First, copy and paste the following code in a new file called adb+. Then store this new file in the folder containing adb within your Android SDK installation folder. This should most likely be the platform-tools folder.

# Script adb+
# Usage
# You can run any command adb provides on all your currently connected devices
# ./adb+  is the equivalent of ./adb -s  
# Examples
# ./adb+ version
# ./adb+ install apidemo.apk
# ./adb+ uninstall
adb devices | while read line
  if [ ! "$line" = "" ] && [ `echo $line | awk '{print $2}'` = "device" ]
      device=`echo $line | awk '{print $1}'`
      echo "adb -s $device $@ ..."
      adb -s $device $@


Using the script is very simple. When we have more than one device connected (always use adb devices first, just to make sure all your devices are connected) we just need to work as if we were using adb, with any “adb” command replaced with “adb+”. For example, if we want to install an app:

adb+ install -r path/to/the/app/to/install.apk

This gives us something like:

04544fabs23f0b595dc  install  -r  /path/to/your/app/name/_of/_the_app.apk  ...
4619  KB/s  (13249277  bytes in  2.800s)
pkg:  /data/local/tmp/name/_of/_the_app.apk

1399834vskj28f7c  install  -r/path/to/your/app/name/_of/_the_app.apk  ...
3608  KB/s  (13249277  bytes in  3.585s)
pkg:  /data/local/tmp/name/_of/_the_app.apk


If you find that you get the following when you attempt to run adb+

-bash: adb+: Permission denied

Your bash script simply isn’t executable. This is very easy to fix, run this command from the directory containing the script:

chmod 755 ./adb+

Now try it, you should see what you were expecting.

That’s it. The new script will go thru each device, performing the same command.  The app will install on all devices connected, and you will save a few minutes. What do you think? Is this going to help you with your mobile testing? Let me know in the comments below!

2 thoughts on “Managing several Android devices in single commands

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.