0

アプリによって常に書き込まれているファイルがsdcardにあり、さらに分析するために、アプリによって書き込まれているファイルをデバイスからWindowsホストマシンにプルする必要があります。

adb pullファイル全体をプルしてから停止するので良くありませんが、もちろんファイルもまだ書き込まれています。とにかく、ファイルは非常に大きくなるので、毎回ファイル全体をコピーするのではなく、最後に読んでから書き込まれた部分だけをコピーします。

adb shell ddオプションかもしれませんが、SDカード上のあるファイルからSDカード上の別のファイルにコピーすることしかできません。つまり、私のWindowsマシンではありません:

たとえばadb shell dd if=/sdcard/input.pcm of=/sdcard/output.pcm、skip および seek dd オプションを使用します。

dd とパイプを使用した場合::adb shell dd if=/sdcard/input.pcm > output.pcm出力ファイルにいくつかの破損があります: 0x0D、0x0D が pcm データにランダムに追加されます。adb shell cat input.pcm を実行するのと同じです。

データをlogcatに書き込んで解析することも考えましたが、これはかなり面倒で面倒で、大量のデータがあります。

別のオプションは、ファイルが書き込まれているときにファイルを多数の小さなファイルに分割し、adb pull を使用することです。

これらはどれも理想的ではありません。理想的には、fopen、fread などの制御でデータをプルできるホスト上のプログラムが必要ですが、これが可能かどうかはわかりません。

私の要件を満たす方法を誰かが提案できますか:

  1. Windows ホストで利用可能なすべてのファイルを読み取る
  2. 最後に読み取りを行ってから更新されたファイルの部分を読み取ります (例: 100 ミリ秒ごと)

よろしくお願いします。

4

1 に答える 1

0

それはあなたの特定の要件だと思いますので、Android のソース コードを変更することは問題ではありません。

別の adb コマンドを実装してみませんか? 次に、最後に読み取った位置を記録し、 adb newcommand filename を使用してファイルを段階的に引き出すことができます。

adb の実装は、ホスト側と adbd の 2 つの部分に分けることができます。

ホスト側でコマンドを入力するとadb_commandline()、commandline.c に移動します。

if(!strcmp(argv[0], "pull")) {
    if (argc == 2) {
        return do_sync_pull(argv[1], ".");
    } else if (argc == 3) {
        return do_sync_pull(argv[1], argv[2]);
    } else {
        return usage();
    }
}

その後、do_sync_pull継続的に adbd と通信します。adbd(adb.c) は、ホスト側から送信されたリクエストをリッスンします。

簡単な方法は、do_sync_pull に別の引数を追加し、adbd が継続的にファイルをシークしてファイルの内容を送り返すようにすることです。

于 2013-03-01T01:17:06.100 に答える