AdB Push / Pull avec barre de progression

Il est vraiment ennuyeux si vous supprimez / tirez de gros fichiers sur le périphérique qu'il n'y a aucun moyen de voir à quel point il est loin. Est-il possible d'exécuter la suppression d'AdB ou d'AdB et d'obtenir une barre de progression à l'aide de l'utilitaire 'bar'?

Le problème principal ici est que je pense que adb s'attend à deux noms de fichiers, si le fichier d'entrée pourrait être remplacé par stdin, vous pouvez faire appel à l'utilitaire 'bar' et obtenir une barre de progression. Jusqu'à présent, je n'ai pas réussi à le faire, mais je ne suis pas vraiment un gourou shell, c'est pourquoi je pose la question ici 🙂

  • Ne peut pas connecter l'Emulateur Android Wear avec un périphérique
  • Attendez l'autre fin de l'animation de la vue
  • Création d'un écran de préférence avec support (v21) Barre d'outils
  • Comment imprimer PDF avec Android 4.4 Cadre d'impression
  • Icône de barre d'action cachée après la diffusion de SearchView
  • Comment utiliser Android xliff: g
  • Notez que je suis sur Linux en utilisant bash.

    7 Solutions collect form web for “AdB Push / Pull avec barre de progression”

    Il semble que la dernière version de Adobe possède un support avancé.

    Android Debug Bridge version 1.0.32 device commands: adb push [-p] <local> <remote> - copy file/dir to device ('-p' to display the transfer progress) 

    Toutefois, les réponses ci-dessus fonctionnent également pour «l'installation d'AdB» qui n'ont pas d'option de progression. J'ai modifié le script de la première réponse pour fonctionner de cette façon:

    Créez "adb-install.sh" quelque part dans votre PATH et exécutez "adb-install.sh" au lieu de "adb install -f"

     #!/bin/bash # adb install with progressbar displayed # usage: <adb-install.sh> <file.apk> # original code from: http://stackoverflow.com/questions/6595374/adb-push-pull-with-progress-bar function usage() { echo "$0 <apk to install>" exit 1 } function progressbar() { bar="================================================================================" barlength=${#bar} n=$(($1*barlength/100)) printf "\r[%-${barlength}s] %d%%" "${bar:0:n}" "$1" # echo -ne "\b$1" } export -f progressbar [[ $# < 1 ]] && usage SRC=$1 [ ! -f $SRC ] && { \ echo "source file not found"; \ exit 2; \ } which adb >/dev/null 2>&1 || { \ echo "adb doesn't exist in your path"; \ exit 3; \ } SIZE=$(ls -l $SRC | awk '{print $5}') export ADB_TRACE=all adb install -r $SRC 2>&1 \ | sed -n '/DATA/p' \ | awk -v T=$SIZE 'BEGIN{FS="[=:]"}{t+=$7;system("progressbar " sprintf("%d\n", t/T*100))}' export ADB_TRACE= echo echo 'press any key' read n 

    Actuellement, j'ai ce petit morceau de bash:

     function adb_push { # NOTE: 65544 is the max size adb seems to transfer in one go TOTALSIZE=$(ls -Rl "$1" | awk '{ sum += sprintf("%.0f\n", ($5 / 65544)+0.5) } END { print sum }') exp=$(($TOTALSIZE * 7)) # 7 bytes for every line we print - not really accurate if there's a lot of small files :( # start bar in the background ADB_TRACE=adb adb push "$1" "$2" 2>&1 | unbuffer -p awk '/DATA/ { split($3,a,"="); print a[2] }' | unbuffer -p cut -d":" -s -f1 | unbuffer -p bar -of /dev/null -s $exp echo # Add a newline after the progressbar. } 

    Cela fonctionne un peu, il montre une barre de progression allant de 0 à 100, ce qui est sympa. Cependant, il ne sera pas correct si vous faites beaucoup de petits fichiers, et pire, les octets / s et les octets totaux affichés par 'barre' ne sont pas corrects.

    Je vous défie d'améliorer mon script; Ça ne devrait pas être difficile! 😉

    Voici ma solution, elle affichera une simple barre de progression et une progression numérique actuelle

     [==================================================] 100% 

    Usage

     ./progress_adb.sh source destination 

    Progress_adb.sh

     #!/bin/bash function usage() { echo "$0 source destination" exit 1 } function progressbar() { bar="==================================================" barlength=${#bar} n=$(($1*barlength/100)) printf "\r[%-${barlength}s] %d%%" "${bar:0:n}" "$1" # echo -ne "\b$1" } export -f progressbar [[ $# < 2 ]] && usage SRC=$1 DST=$2 [ ! -f $SRC ] && { \ echo "source file not found"; \ exit 2; \ } which adb >/dev/null 2>&1 || { \ echo "adb doesn't exist in your path"; \ exit 3; \ } SIZE=$(ls -l $SRC | awk '{print $5}') ADB_TRACE=adb adb push $SRC $DST 2>&1 \ | sed -n '/DATA/p' \ | awk -v T=$SIZE 'BEGIN{FS="[=:]"}{t+=$7;system("progressbar " sprintf("%d\n", t/T*100))}' echo 

    Test sur Ubuntu 14.04

     $ bash --version GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu) 

    FAIRE

    Support d'annuaire

    Changement de taille de la barre de progression lorsque le changement de taille de l'écran

    J'ai fait un patch à Adb pour résoudre ce problème.

    https://android-review.googlesource.com/#/c/87748

    QtADB possède des barres de progression par fichier et total. http://qtadb.wordpress.com/

    Eh bien, je peux vous donner une idée:

     ADB_TRACE=adb adb push <source> <destination> 

    Renvoie les journaux pour n'importe quelle commande, par exemple la commande copy, qui ressemble à:

     writex: fd=3 len=65544: 4441544100000100000000021efd DATA....#....b.. 

    Ici, vous pouvez obtenir la longueur d'octets totale avant, avec ls -a, puis analyser la sortie d'adb avec grep ou awk, incrémenter un compteur interne et envoyer le progrès actuel à l'utilitaire de barre.

    Lorsque vous avez réussi, postez le script ici.

    J'ai trouvé un Python pastebin qui est incomplet mais proche: il a besoin d'un support \r et arguments.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.