[android] ADB로 안드로이드 스크린 캡쳐하기 (Windows에 바로 저장하기)

안드로이드 개발을 하다보면, 가끔 화면 캡쳐가 필요한 경우가 있다.

adb에 연결되어있으면 편하게 할 수 있는데..
구글링 해보면 쉽게 찾을 수 있다.

가장 기본적인 방법은

C:\Users\User> adb shell screencap -p /sdcard/screen.png
C:\Users\User> adb pull /sdcard/screen.png
C:\Users\User> adb shell rm /sdcard/screen.png

adb shell screencap 명령으로 캡쳐를 하고.. adb pull 로 윈도우로 가져오고, rm으로 기기에 저장된 파일을 지운다.

근데.. 귀찮아서.. 좀 더 쉬운방법은 없나 찾아본다. 윈도우에 바로 저장해볼까..?

C:\Users\User> adb shell screencap -p > screen.png

이렇게 하면 될 것 같은데.. 안된다.
이유는.. adb가 리다이렉션(>)이나 파이프(|)를 통해 windows로 보내줄때.. 똑똑하게 개행문자를 바꿔주는듯 하다.

리눅스계열은 개행문자를 ‘\n’으로 쓰고, 윈도우 계열은 ‘\r\n’을 쓴다. 이미지파일이라 그대로 저장되어야 하는데, 윈도우로 넘어오면서 ‘\n’을 ‘\r\n’로 바뀌어버리니 이미지 파일이 깨져버리는 것이다.

그래서 찾아보니.. 파이프로 보내면서 sed나 perl의 -pe옵션으로 다시 치환해주는 방법으로 가능하다던데.. (윈도우용 sed나 perl을 설치해야한다.)

C:\Users\User> adb shell screencap -p | sed 's/\r$//' > screen.png
C:\Users\User> adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png

결론적으로 난 제대로 안됐다. 처음 한번만 치환되던가.. 뭐.. 여튼 이런저런 이유로.. 바이너리 파일을 치환하려니 잘 안맞는듯.

그래서 한동안 포기하다가.. 또다른 구글링을 해서.. 결국 다음과 같이 해서 해결했다.

C:\Users\User> adb shell screencap -p | perl -pe "binmode(STDOUT);s/\r\n/\n/g" > screen.png

이렇게 했더니 이미지파일이 깨지지 않고 잘 저장됐다.

(결론 : 첫 코드나, 제일 마지막 코드를 참고해서 하세요.)

Loading

댓글 남기기