2012-08-02 3 views
2

저는 Android 앱에서 위젯을 식별하고 클릭 할 때 속성을 표시하는 도구로 작업하고 있습니다. 필자는이 작업을 성공적으로 수행 할 수있는 독립형 도구를 만들었지 만, 독립형 도구를 Eclipse 플러그인으로 변환하는 데 문제가 있습니다.이 도구는 최종 제품을 패키지화하는 데 필요할 것입니다.eclipse/java를 통해 monkeyrunner에 logcat 입력을 보내면 문제가 발생합니다.

도구가 작동하는 방식은 먼저 에뮬레이터에서 투명 오버레이 응용 프로그램이 실행되는 것입니다. 이 응용 프로그램은 사용자가 화면 누르기 좌표를 수집하여 Android 로그에 기록합니다. 그런 다음 테스트 할 응용 프로그램이 에뮬레이터에서 시작됩니다.

Adb logcat은 표준 입력으로 위젯 식별을 처리하는 monkeyrunner 스크립트로 파이프됩니다. 실시간으로 monkeyrunner 스크립트는 좌표 입력 정보에 대한 logcat 입력을 분석합니다. monkeyrunner 스크립트는 화면의 모든 View 객체와 속성을 나열 할 수있는 AndroidViewClient (https://github.com/dtmilano/AndroidViewClient)를 사용합니다. 좌표 누름 정보를 사용하면 올바른 좌표 특성을 갖는 뷰 목록의 뷰가 선택되고 해당 특성이 인쇄됩니다.

이클립스/java 컨텍스트 내에서 monkeyrunner 스크립트로 logcat 출력을 처리하려고 할 때 발생하는 문제가 있습니다. 별도의 동시 프로세스에서 adb logcat 및 monkeyrunner를 실행하고 logcat의 InputStream을 monkeyrunner의 OutputStream으로 전송하면 monkeyrunner가 좌표 정보를 입력으로받지 않기 때문에 잠금 문제가있는 것으로 보입니다. 스트림 처리기를 별도의 스레드에 넣으려고했으나 아무 효과가 없었습니다.

동시 프로세스가 때때로 문제의 원인이 될 수 있으므로 monkeyrunner에서 logcat을 직접 읽으므로 한 가지 주요 프로세스 만 있다고 생각했습니다. monkeyrunner 내에서 에뮬레이터와의 연결이 설정되면 adb 셸 (https://developer.android.com/tools/help/MonkeyDevice.html#shell)을 열 수 있습니다. 로그 캣 꽤 일반적인 ADB 명령입니다,하지만 난 device.shell ("로그 캣")을 실행할 때, 그것은 불행하게도, 내 구글의 기술을 찾을 수 없어

[main] [com.android.chimpchat.adb.AdbChimpDevice] Error executing command: logcat 

[main] [com.android.chimpchat.adb.AdbChimpDevice]com.android.ddmlib.ShellCommandUnrespo‌​nsiveException – 

실패 나이 문제에 대한 해결책.

답변

2

글쎄, 나는 이것이 당신이 찾고있는 것 같아요 :

#! /usr/bin/env monkeyrunner 
import time 
import subprocess 

# Imports the monkeyrunner modules 
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage 

# Connects to the current device, returning a MonkeyDevice object 
device = MonkeyRunner.waitForConnection() 

p = subprocess.Popen([ "adb", "logcat", "TEST:V", "*:S" ], shell=False, 
     stdout=subprocess.PIPE) 
i = 0 
while True: 
    device.shell("log -t TEST This is line %d" % i) 
    i += 1 
    print p.stdout.readline() 
    time.sleep(1) 

장치에 연결 쓰고 또한 로그 캣을 읽는 monkeyrunner 스크립트.

안녕하십니까. AndroidViewClient이 유용하다고 들었습니다.

+0

감사합니다. 나는 왜 adb에 대한 서브 프로세스를 실행하지 않을지 모르겠다. 파이썬에 익숙하지 않은 것 같습니다. 또한 AndroidViewClient와 블로그의 팬입니다! 내가 작업해온이 두 가지 오픈 소스 프로젝트는 아이디어/참고 자료로 자주 블로그를 사용했습니다. http://sourceforge.net/apps/mediawiki/guitar/index.php?title=Android_GUITAR and http://sourceforge.net/ apps/mediawiki/guitar/index.php? title = Intents_GUITAR – Rowhawn