2013-03-01 2 views
0

나는 응용 프로그램에서 끊임없이 쓰고있는 sdcard에 파일을 가지고 있습니다. 응용 프로그램에서 작성한 파일을 내 장치로 가져와야합니다. 추가 분석을 위해 Windows 호스트 컴퓨터.안드로이드 sdcard에서 windows 호스트 컴퓨터로 파일을 스트리밍

adb pull은 전체 파일을 당긴 후 좋지 않으므로 파일은 계속 쓰여지지만 물론 파일은 여전히 ​​쓰여지고 있습니다. 그리고 어쨌든 파일은 매우 커질 것이므로 매번 전체 파일을 복사하고 싶지 않습니다. 마지막으로 읽은 이후로 쓰여진 부분 만 복사합니다.

adb shell dd은 옵션이 될 수도 있지만 난 단지는 또 다른 SDCARD에 파일, 즉 나의 윈도우 머신에 SDCARD에 하나 개의 파일 복사 얻을 수 있습니다

예를 들어, 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 쉘 고양이 input.pcm과 같습니다.

나는 또한 logcat에 데이터를 쓰고 파싱하는 방법에 대해 생각해 보았다. 그러나 이것은 다소 거추장스럽고 지저분하고 많은 양의 데이터가있다.

또 다른 옵션은 파일을 작성할 때 많은 작은 파일을 분할 한 다음 adb pull을 사용하는 것입니다.

이 중 가장 이상적인 것은 없습니다. 이상적으로 나는 fopen, fread 등 내 컨트롤에서 데이터를 가져올 수있는 호스트의 프로그램을 원합니다. 그러나 이것이 가능한지 확실하지 않습니다.

  • 내가 마지막으로했던 이후 업데이트 된 파일의 부분을 읽어 호스트
    1. 이 창에 사용할 수있는 모든 파일을 읽어

      사람은 내 요구 사항을 충족 할 수있을 수있는 방법을 제안 할 수 있습니다 읽기 (예 : 매 100ms마다)

    미리 감사드립니다.

  • 답변

    0

    Android의 소스 코드를 수정하는 것은 중요하지 않으므로 특정 요구 사항이라고 생각합니다.

    왜 다른 adb 명령을 구현하지 않습니까? 그런 다음 마지막으로 읽은 위치를 기록하고 adb newcommand filename을 사용하여 점진적으로 파일을 꺼낼 수 있습니다.

    adb의 구현은 호스트 측과 adbd의 두 부분으로 나눌 수 있습니다.

    호스트 측에서는 명령을 입력하면 commandline.c의 adb_commandline()으로갑니다.

    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가 파일을 계속 검색하고 파일 내용을 다시 보내도록하는 것입니다.

    관련 문제