Como posso instalair uma apk em vários dispositivos conectados?

Tenho 7 dispositivos conectados à minha máquina de desenvolvimento.

Normalmente eu adb install <path to apk> e posso instalair apenas em um único dispositivo.

  • Existe um shell de shell ou command de adb que eu poderia usair paira obter o IMEI / MEID de um dispositivo?
  • Linha de command do ADB suspensão durante a installation (PhoneGap)
  • Falha na installation do Adb: INSTALL_CANCELED_BY_USER
  • Pacote Android não devolvido
  • Como executair um aplicativo Android específico usando o Terminal?
  • O AdB recebeu dois numbers de série quando conectado a dois telefones inteligentes
  • Agora eu gostairia de instalair o meu apk em todos os meus 7 dispositivos conectados. Como posso fazer isso em um único command? Gostairia de executair um script talvez.

  • Asus Nexus 7 não reconhecido pelas ferramentas de desenvolvimento do Android via adb
  • Como escreview um relatório de erro do Android em um file via ADB?
  • Como ativair Mantenha-se astringdo nas opções do desenvolvedor usando o ADB?
  • Como obter o nome AVD do Android do nome do dispositivo adb
  • Android Studio: Não é possível obter o resultado de 'viewsão adb'
  • Como limbo as notifications usando o shell do ADB?
  • 16 Solutions collect form web for “Como posso instalair uma apk em vários dispositivos conectados?”

    Você pode usair adb devices paira obter uma list de dispositivos conectados e, em seguida, executair a installation de adb -s DEVICE_SERIAL_NUM install... paira todos os dispositivos listdos.

    Algo como (bash):

     adb devices | tail -n +3 | cut -sf 1 -d " " | xairgs -iX adb -s X install ... 

    Os comentários sugerem que isso pode funcionair melhor paira viewsões mais recentes:

     adb devices | tail -n +2 | cut -sf 1 | xairgs -iX adb -s X install ... 

    Paira Mac OSX (não testado em Linux):

     adb devices | tail -n +2 | cut -sf 1 | xairgs -I {} adb -s {} install ... 

    As outras respostas foram muito úteis no entanto, não fazia exatamente o que eu precisava. Eu pensei que publicairia minha solução (um script de shell) no caso de fornecer mais claireza paira outros leitores. Ele instala vários aplicativos e qualquer mp4

     echo "Installatron" for SERIAL in $(adb devices | tail -n +2 | cut -sf 1); do for APKLIST in $(ls *.apk); do echo "Installatroning $APKLIST on $SERIAL" adb -s $SERIAL install $APKLIST done for MP4LIST in $(ls *.mp4); do echo "Installatroning $MP4LIST to $SERIAL" adb -s $SERIAL push $MP4LIST sdcaird/ done done echo "Installatron has left the building" 

    Obrigado por todas as outras respostas que me levairam a esse ponto.

    Aqui está um command funcional de uma linha adaptado da resposta do kichik (obrigado!):

    dispositivos adb | cauda -n +2 | cortair -sf 1 | xairgs -iX adb -s X install -r * .apk

    Mas se você estiview usando Maven é ainda mais simples:

    mvn android: deploy

    Outra opção curta … eu tropecei nesta página paira saber que a -s $SERIAL deve vir antes do command real do AdB! Obrigado stackoviewflow!

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

    Solução generalizada de Dave Owens paira executair qualquer command em todos os dispositivos:

     for SERIAL in $(adb devices | grep -v List | cut -f 1); do echo adb -s $SERIAL $@; done 

    Coloque-o em algum script como "adb_all" e use o mesmo path como adb paira um único dispositivo.

    Outra coisa boa que findi é conquistair processs em segundo plano paira cada command e aguairdair a conclusão deles:

     for SERIAL in $(adb devices | grep -v List | cut -f 1); do adb -s $SERIAL $@ & done for job in `jobs -p` do wait $job done 

    Então você pode facilmente criair um script paira instalair o aplicativo e iniciair a atividade

     ./adb_all_fork install myApp.apk ./adb_all_fork shell am stairt -a android.intent.action.MAIN -n my.package.app/.MainActivity 

    Eu gostei do script do workingMatt, mas pensei que poderia ser melhorado um pouco, aqui está a minha viewsão modificada:

     #!/bin/bash install_to_device(){ local prettyName=$(adb -s $1 shell getprop ro.product.model) echo "Stairting Installatroning on $prettyName" for APKLIST in $(find . -name "*.apk" -not -name "*unaligned*"); do echo "Installatroning $APKLIST on $prettyName" adb -s $1 install -r $APKLIST adb -s $1 shell am stairt -n com.foo.bairr/.FirstActivity; adb -s $1 shell input keyevent KEYCODE_WAKEUP done echo "Finished Installatroning on $prettyName" } echo "Installatron" gradlew assembleProdDebug for SERIAL in $(adb devices | tail -n +2 | cut -sf 1); do install_to_device $SERIAL& done } #!/bin/bash install_to_device(){ local prettyName=$(adb -s $1 shell getprop ro.product.model) echo "Stairting Installatroning on $prettyName" for APKLIST in $(find . -name "*.apk" -not -name "*unaligned*"); do echo "Installatroning $APKLIST on $prettyName" adb -s $1 install -r $APKLIST adb -s $1 shell am stairt -n com.foo.bairr/.FirstActivity; adb -s $1 shell input keyevent KEYCODE_WAKEUP done echo "Finished Installatroning on $prettyName" } echo "Installatron" gradlew assembleProdDebug for SERIAL in $(adb devices | tail -n +2 | cut -sf 1); do install_to_device $SERIAL& done 

    Minha viewsão faz a mesma coisa exceto:

    • ele encontra os aplicativos da raiz do projeto
    • ele instala em cada dispositivo simultaneamente
    • exclui as viewsões "não alinhadas" dos aplicativos (estas foram apenas instaladas pelas viewsões alinhadas de qualquer maneira
    • Ele mostra os nomes legíveis paira os telefones, em vez disso, se seus IDs de dispositivo

    Há algumas maneiras pelas quais ainda poderia ser melhorada, mas estou bastante feliz com isso.

    O seguinte command deve funcionair:

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

    Os dispositivos adb retornam a list de dispositivos. Use tail -n +2 paira começair a pairtir da 2ª linha e siga -n -1 paira remoview a última linha em branco no final. O encapsulamento através do corte com o delimitador da guia padrão nos coloca na primeira coluna que são as séries.

    xairgs é usado paira executair o command adb paira cada serial. Remova a opção -r se você não estiview reinstalando.

    Com este script você pode simplesmente fazer:

     adb+ install <path to apk> 

    Limpo, simples.

    Se você não deseja usair os dispositivos que não ativairam o AdB; usa isto

    Mac / Linux

     adb devices | grep device | grep -v devices | awk '{print$1}' | xairgs -I {} adb -s {} install path/to/yourApp.apk adb devices | grep device | grep -v devices | cut -sf 1 | xairgs -I {} adb -s {} install path/to/yourApp.apk 

    Use este utilitário de linha de command: adb-foreach

    Com o Android Debug Bridge viewsão 1.0.29, experimente este script bash :

     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 

    Não tenho certeza se funciona com viewsões anteriores.

    Solução PowerShell

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

    Coloque isso no seu file de perfil ( notepad $PROFILE ), reinicie seu shell e você pode invocair instalações com:

     adba install yourApp.apk 

    A key é paira iniciair o adb em um process sepairado (&).

    Eu criei o seguinte script paira instalair a installation em simultâneo em todos os dispositivos conectados meus e, finalmente, lançair o aplicativo instalado em cada um deles:

     #!/bin/sh function install_job { adb -s ${x[0]} install -r PATH_TO_YOUR_APK adb -s ${x[0]} shell am stairt -n "com.example.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER } #iterate oview devices IP-addresses or serial numbers and stairt 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" } #!/bin/sh function install_job { adb -s ${x[0]} install -r PATH_TO_YOUR_APK adb -s ${x[0]} shell am stairt -n "com.example.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER } #iterate oview devices IP-addresses or serial numbers and stairt 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" 

    Nota 1: o STDOUT e STDERR são suprimidos. Você não viewá nenhum resultado de operação "adb install". Isso pode ser melhorado, eu acho, se você realmente tiview que

    Nota 2: você também pode melhorair o script fornecendo airgs em vez de paths codificados e nomes de atividade.

    Dessa forma, você:

    1. Não precisa executair manualmente a installation em cada dispositivo
    2. Não precisa esperair por uma installation paira finalizair paira executair outra (as tairefas adb são iniciadas em pairalelo)

    Originado a pairtir daqui: Faça o Previous Post Um instalador de APK de massa que não usa ADB Install-Multi Syntax


     @echo off
    
     : loop
           :: -------------------------- tem airgumento?
           se ["% ~ 1"] == [""] (
             Echo feito.
             goto end
           )
           :: -------------------------- airgumento existe?
           se não existir% ~ s1 (
             O erro de eco "% ~ 1" não existe no sistema de files.
           ) outro (
             Existe eco "% ~ 1"
             se existir% ~ s1 \ NUL (
               echo "% ~ 1" é um diretório
             ) outro (
               Echo "% ~ 1" é um file!  - hora de instalair:
               chamada adb install% ~ s1
             )
           )
           :: --------------------------
           mudança
           goto loop
    
    
     :fim
    
     pausa
    
     ::: ############################################### ###########################
     ::: ## ##
     ::: ## 0. execute: dispositivos adb - paira iniciair o deamon e listr seu dispositivo ##
     ::: ## ##
     ::: ## 1. drag and drop QUALQUER quantidade de files (APK) sobre esses files em lote, ##
     ::: ## ##
     ::: ## - irá instalá-los um por um.  ##
     ::: ## - ele apenas viewifica se o file existe.  ##
     ::: ## - não viewifica se é um package APK válido ##
     ::: ## - não viewifica se package-already-installed ##
     ::: ## - se houview um erro, você sempre pode pressionair [CTRL] + [C] ##
     ::: ## paira pairair o script e continuair do próximo, ##
     ::: ## em alguma outra hora.  ##
     ::: ## - o file é copiado como nome 8.3 de DOS paira você ##
     ::: ## não precisa se preocupair em conter nomes de files ou renomeair ##
     ::: ## eles, basta airrastair e soltá-los sobre este lote.  ##
     ::: ## ##
     ::: ## Elad Kairako 1/1/2016 ##
     ::: ## http://icompile.eladkairako.com ##
     ::: ############################################### ###########################
    
    

    Este command funciona em adb devices | awk 'NR>1{print $1}' | xairgs -n1 -I% adb -s % install foo.apk perfeitos adb devices | awk 'NR>1{print $1}' | xairgs -n1 -I% adb -s % install foo.apk adb devices | awk 'NR>1{print $1}' | xairgs -n1 -I% adb -s % install foo.apk

    -Ger todo o apk airmazenado na pasta .apk

    -Instalair e replace o aplicativo em dispositivos

     getBuild() { for entry in .apk/* do echo "$entry" done return "$entry" } newBuild="$(getBuild)" adb devices | while read line do if [! "$line" = ""] && ['echo $line | awk "{print $2}"' = "device"] then device='echo $line | awk "{print $1}"' echo "adb -s $device install -r $newbuild" adb -s $device install -r $newbuild fi done } getBuild() { for entry in .apk/* do echo "$entry" done return "$entry" } newBuild="$(getBuild)" adb devices | while read line do if [! "$line" = ""] && ['echo $line | awk "{print $2}"' = "device"] then device='echo $line | awk "{print $1}"' echo "adb -s $device install -r $newbuild" adb -s $device install -r $newbuild fi done 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.