Adb push / pull con barra de progreso
Es realmente molesto si adb empujar / tirar archivos grandes para el dispositivo que no hay manera de ahora lo lejos que está. ¿Es posible ejecutar adb push o adb pull y obtener una barra de progreso utilizando la utilidad 'bar'?
El problema principal aquí es que creo que adb espera dos nombres de archivo, si el archivo de entrada podría ser reemplazado por stdin que podría canalizar a través de la utilidad 'barra' y obtener una barra de progreso. Hasta ahora no he tenido éxito en hacerlo, pero no soy realmente un gurú de la concha que es porqué estoy pidiendo aquí 🙂
- Posibilidad de hacer esquinas redondeadas en la progresión Progressbar personalizada ¿Dibujable?
- show ProgressBar o Dialog de un IntentService para el progreso de la descarga
- Estado de la barra de progreso android
- Android cambia el color de la barra de progreso Horizonal
- La barra de progreso horizontal personalizada de Android de la barra dibujable se estira
Tenga en cuenta que estoy en Linux utilizando bash.
- ¿Cómo mostrar la animación de progreso de carga para alguna imagen?
- Barra de progreso para la carga múltiple con varios archivos Android
- ¿Cómo puedo mostrar un ProgressBar sólo después de un retardo mínimo?
- ¿Cómo cambiar el color predeterminado de la barra de progreso?
- Android: EditText con barra de progreso?
- Smooth Progress Bar Animación
- Imagen de animación de fondo en ProgressBar en Android?
- Cambiar color de la barra de progreso a través de CÓDIGO SOLAMENTE en Android
Parece que el último anuncio tiene soporte de progreso.
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)
Sin embargo, las respuestas anteriores también funcionan para 'adb install' que no tienen una opción de progreso. Modifiqué el script de la primera respuesta para que funcione de esta manera:
Cree "adb-install.sh" en algún lugar de su PATH y ejecute "adb-install.sh" en lugar 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
Actualmente tengo este pequeño pedazo 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. }
Funciona un poco, muestra una barra de progreso que va de 0 a 100, lo cual es bueno. Sin embargo, no será correcto si hace un montón de archivos pequeños, y peor aún, los bytes / sy los bytes totales mostrados por 'barra' no son correctos.
Te reto a mejorar mi guión; No debe ser difícil! 😉
Aquí está mi solución, mostrará una barra de progreso simple y el progreso numérico actual
[==================================================] 100%
Uso
./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
Pruebas en Ubuntu 14.04
$ bash --version GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
QUE HACER
Soporte de directorio
Cambio de tamaño de la barra de progreso cuando cambia el tamaño de la pantalla
Hice un parche a adb para arreglar esto.
QtADB tiene barras de progreso por archivo y totales. http://qtadb.wordpress.com/
Bueno, puedo darte una idea:
ADB_TRACE=adb adb push <source> <destination>
Devuelve registros para cualquier comando, por ejemplo, el comando copy, que se parece a:
writex: fd=3 len=65544: 4441544100000100000000021efd DATA....#....b..
Aquí puede obtener la longitud total de bytes antes, con ls -a, luego analizar la salida de adb con grep o awk, incrementar un contador interneral y enviar el progreso actual a la utilidad barra.
Cuando consiguió, por favor, publique el script aquí.
Encontré un Python pastebin que está incompleto pero cerca: necesita un respaldo de argumentos y.
- Cómo capturar el evento de prensa larga para el elemento Listeview de un ListActivity?
- Fuerza de Android Horizontal (paisaje) disposición