Is it possible to install APK file if more than one emulators/devices are connected [duplicate]

I know how to install the apk file in to the emulator by command prompt and all that. But i want to know is it possible to install same apk file in to multiple emulator by giving any specific name ? Actually i have to test one apk file in to many device. and for that i have started many device. I know how to install it. if the all device are open then it will not get install. So is there any alternate to install that apk file by giving any specific device Emulator id or any name ??? Please help me if there is any idea for it. . . Thanks.


Solution 1:

Yes, you can install an apk on a particular device.

In command, type:

adb devices
// list of devices and its unique ID...

Then type:

adb -s "<deviceIDfromlist>" install "<path-to-apk>"

Solution 2:

Step 1: Get the device Ids of all connected device

adb devices

Step 2: Install to a particular device you want to install

adb -s deviceId install path+apk

Example:

Step 1:

C:\Android\android-sdks\platform-tools>adb devices

List of devices attached emulator-5554 device 014FD87107021017
device

Step 2:

C:\Android\android-sdks\platform-tools>adb -s 014FD87107021017 install C:\Users\
user\Documents\appname.apk

Solution 3:

Use the following scripts to install apk on multiple devices/emulators.

    for SERIAL in $(adb devices | grep -v List | cut -f 1);
    do adb -s $SERIAL install -r /path/to/product.apk;
    done

Remove -r if you are not reinstalling the apk. Also you can replace "install -r /path/to/product.apk" to other adb commands like working on one single device.

It works for me on real devices but I believe it should also works for emulators.

Solution 4:

It is possible to issue install command simultaneously on all connected devices.

The key is to launch adb in a separate process (&).

I came up with the following script to simultaneously fire-off installation on all of the connected devices of mine and finally launch installed application on each of them:

#!/bin/sh

function install_job { 

    adb -s ${x[0]} install -r PATH_TO_YOUR_APK
    adb -s ${x[0]} shell am start -n "com.example.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER

}


#iterate over devices IP-addresses or serial numbers and start a job 

while read LINE
do
    eval x=($LINE)
    install_job ${x[0]} > /dev/null 2>&1 &
done <<< "`adb devices |  cut -sf 1`"

echo "WATING FOR INSTALLATION PROCESSES TO COMPLETE"
wait

echo "DONE INSTALLING"

Note 1: the STDOUT and STDERR are suppressed. You won't see any "adb install" operation result. This may be improved, I guess, if you really have to

Note 2: you could also improve script by providing args instead of hardcoded path and activity names.

That way you:

  1. Don't have to manually perform install on each device
  2. Don't have to wait for one install to finish in order to execute another one (adb tasks are launched in parallel)