進捗バー付きのadbプッシュ/プル 質問する

進捗バー付きのadbプッシュ/プル 質問する

大きなファイルをデバイスに adb push/pull する場合、進捗状況を確認する方法がないのは非常に面倒です。 adb push または adb pull を実行して、「bar」ユーティリティを使用して進行状況バーを取得することは可能ですか?

ここでの主な問題は、adb が 2 つのファイル名を期待していると思うことです。入力ファイルを stdin に置き換えることができれば、「bar」ユーティリティをパイプして進捗状況バーを取得できます。これまでのところ、私は成功していませんが、シェルの専門家ではないので、ここで質問しています :)

私は Linux で bash を使用していることに注意してください。

ベストアンサー1

adb最新版には進捗サポートがあるようです。

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)

adb installただし、進行状況オプションがない他の回答でも機能します。最初の回答のスクリプトを次のように変更しました。

adb-install.shどこかに作成して代わりにPATH実行するadb-install.sh <apk to install>adb install -f <apk to install>

#!/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

おすすめ記事