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

后端 未结 20 1819
余生分开走
余生分开走 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:10

    Here's a functional one line command tailored from kichik's response (thanks!):

    adb devices | tail -n +2 | cut -sf 1 | xargs -iX adb -s X install -r *.apk

    But if you happen to be using Maven it's even simpler:

    mvn android:deploy

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

    Originated from here: Make The Previous Post A Mass APK Installer That Does Not Uses ADB Install-Multi Syntax


    @echo off
    
    :loop
          ::-------------------------- has argument ?
          if ["%~1"]==[""] (
            echo done.
            goto end
          )
          ::-------------------------- argument exist ?
          if not exist %~s1 (
            echo error "%~1" does not exist in file-system.
          ) else (
            echo "%~1" exist
            if exist %~s1\NUL (
              echo "%~1" is a directory
            ) else (
              echo "%~1" is a file! - time to install:
              call adb install %~s1
            )
          )
          ::--------------------------
          shift
          goto loop
    
    
    :end
    
    pause
    
    ::: ##########################################################################
    ::: ##                                                                      ##
    ::: ##  0. run:   adb devices   - to start the deamon and list your device  ##
    ::: ##                                                                      ##
    ::: ##  1. drag&drop ANY amount of files (APK) over this batch files,       ##
    ::: ##                                                                      ##
    ::: ##       - it will install them one by one.                             ##
    ::: ##       - it just checks if file exists.                               ##
    ::: ##       - it does not checks if it is a valid APK package              ##
    ::: ##       - it does not checks if package-already-installed              ##
    ::: ##       - if there is an error you can always press [CTRL]+[C]         ##
    ::: ##           to stop the script, and continue from the next one,        ##
    ::: ##           some other time.                                           ##
    ::: ##       - the file is copied as DOS's 8.3 naming to you                ##
    ::: ##           don't need to worry about wrapping file names or renaming  ##
    ::: ##           them, just drag&drop them over this batch.                 ##
    ::: ##                                                                      ##
    ::: ##                                   Elad Karako 1/1/2016               ##
    ::: ##                                   http://icompile.eladkarako.com     ##
    ::: ##########################################################################
    
    
    0 讨论(0)
  • 2020-11-30 19:13

    Here is bash for install and run apk on all connected devices

    Using

    nick@nickolay:/home/workspace/MyProject$ > bash path/to/installAndRunApk.sh

    installAndRunApk.sh

    #!/usr/bin/env bash
    #--------find apk---------
    apkFile=$(find -name '*.apk' -print | grep -oP '(?<=.).*(.apk)')
    
    #--------find apkFilePath---------
    if test -z "apkFile"
    then
    echo "apkFile: is NULL"
    exit 0;
    fi
    
    echo "apkFile: ${apkFile}"
    apkFilePath=$(pwd)${apkFile}
    echo "apk file path: ${apkFilePath}"
    
    #--------install---------
    if test -z "$apkFilePath"
    then
    echo "apkFilePath: is NULL"
    exit 0;
    fi
    
    echo "adb install -t -r ${apkFilePath}"
    for SERIAL in $(adb devices | grep -v List | cut -f 1);
    do `adb -s ${SERIAL} install -t -r ${apkFilePath}`;
    done
    
    #--------get applicationId---------
    echo "aapt dump badging ${apkFilePath} | grep -oP '(?<=package: name=).*(?=versionCode)'"
    applicationId=$(aapt dump badging ${apkFilePath} | grep -oP '(?<=package: name=).*(?=versionCode)')
    echo "applicationId: is ${applicationId}"
    
    #--------launch---------
    if test -z "$applicationId"
    then
    echo "applicationId: is NULL"
    exit 0;
    fi
    
    echo "____________________START_APPLICATION_ID________________________"
    echo "applicationId: ${applicationId}"
    echo "____________________END_APPLICATION_ID__________________________"
    echo "____________________START_LAUNCHER______________________________"
    for SERIAL in $(adb devices | grep -v List | cut -f 1);
    do `adb -s ${SERIAL} shell monkey -p ${applicationId} -c android.intent.category.LAUNCHER 1`;
    done
    echo "____________________END_LAUNCHER________________________________"
    
    0 讨论(0)
  • 2020-11-30 19:15

    PowerShell solution

    function global:adba() {
        $deviceIds = iex "adb devices" | select -skip 1 |  %{$_.Split([char]0x9)[0].Trim() } | where {$_ -ne "" }
        foreach ($deviceId in $deviceIds) {
            Echo ("--Executing on device " + $deviceId + ":---")
            iex ("adb -s $deviceId " + $args)
        }
    }
    

    Put this in your profile file (notepad $PROFILE), restart your shell and you can invoke installations with :

    adba install yourApp.apk
    
    0 讨论(0)
  • 2020-11-30 19:18

    This command works perfect adb devices | awk 'NR>1{print $1}' | xargs -n1 -I% adb -s % install foo.apk

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

    With this script you can just do:

    adb+ install <path to apk>
    

    Clean, simple.

    0 讨论(0)
提交回复
热议问题