카테고리 보관물: Android

Cygwin에서 Android systrace 실행 문제

2014년 8월 현재, Cygwin으로 systrace를 사용하려고 하면 zlib 관련한 error가 나면서 동작하지 않는다.

$ python systrace.py -o output.html gfx input view wm am video hal dalvik
capturing trace... done
downloading trace... done

Traceback (most recent call last):
  File "systrace.py", line 286, in <module>
    main()
  File "systrace.py", line 231, in main
    decoded_chunk = dec.decompress(chunk)
zlib.error: Error -3 while decompressing: incorrect header check

AOSP project의 이 링크에 보면 문제를 해결하기 위한 patch가 올려져 있는데 comment를 보니 한동안 받아들여 지지 않다가 현재 source와 달라져서 적용할 수 없게 된 모양이다. 같은 동작을 하도록 약간만 수정해서 이렇게 고쳐 보니 좀 지저분하긴 해도 zlib error 없이 Cygwin에서 systrace를 사용할 수 있었다.

diff --git a/systrace.py b/systrace.py
index 387f413..0d3be25 100644
--- a/systrace.py
+++ b/systrace.py
@@ -205,8 +205,12 @@ def main():
       data = ''.join(data)

       # Collapse CRLFs that are added by adb shell.
-      if data.startswith('\r\n'):
-        data = data.replace('\r\n', '\n')
+      if sys.platform == 'cygwin':
+        if data.startswith('\r\r\n'):
+          data = data.replace('\r\r\n', '\n')
+      else:
+        if data.startswith('\r\n'):
+          data = data.replace('\r\n', '\n')

       # Skip the initial newline.
       data = data[1:]