How can I adb install an apk to multiple connected devices?

后端 未结 20 1821
余生分开走
余生分开走 2020-11-30 19:03

I have 7 devices plugged into my development machine.

Normally I do adb install and can install to just a single device.

Now

相关标签:
20条回答
  • 2020-11-30 19:25

    Since I can't comment on the answer by @Tom, this worked for me on OSX 10.13

    adb devices | tail -n +2 | cut -sf 1 | xargs -IX adb -s X install -r path/to/apk.apk
    

    (Change the little i to a big I)

    0 讨论(0)
  • 2020-11-30 19:26

    With Android Debug Bridge version 1.0.29, try this bash script:

    APK=$1
    
    if [ ! -f `which adb` ]; then
        echo 'You need to install the Android SDK before running this script.';
        exit;
    fi
    
    if [ ! $APK ]; then
        echo 'Please provide an .apk file to install.'
    else
        for d in `adb devices | ack -o '^\S+\t'`; do
            adb -s $d install $APK;
        done
    fi
    

    Not sure if it works with earlier versions.

    0 讨论(0)
  • 2020-11-30 19:27

    Another short option... I stumbled on this page to learn that the -s $SERIAL has to come before the actual adb command! Thanks stackoverflow!

    for SERIAL in $(adb devices | grep -v List | cut -f 1);
    do `adb -s $SERIAL install -r /path/to/product.apk`;
    done
    
    0 讨论(0)
  • 2020-11-30 19:28

    If you don't want use the devices that have not enabled adb; use this

    Mac/Linux

    adb devices | grep device | grep -v devices | awk '{print$1}' | xargs -I {} adb -s {} install path/to/yourApp.apk 
    
    adb devices | grep device | grep -v devices | cut -sf 1 | xargs -I {} adb -s {} install path/to/yourApp.apk
    
    0 讨论(0)
  • 2020-11-30 19:29

    The following command should work:

    $ adb devices | tail -n +2 | head -n -1 | cut -f 1 | xargs -I X adb -s X install -r path/to/your/package.apk
    

    adb devices returns the list of devices. Use tail -n +2 to start from the 2nd line and head -n -1 to remove the last blank line at the end. Piping through cut with the default tab delimiter gets us the first column which are the serials.

    xargs is used to run the adb command for each serial. Remove the -r option if you are not re-installing.

    0 讨论(0)
  • 2020-11-30 19:29

    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)
    0 讨论(0)
提交回复
热议问题