我正在开发一个工具来识别android应用程序中的窗口小部件,并在点击时显示它们的属性。我已经创建了一个独立的工具,可以成功完成此任务,但是我在将独立工具转换为eclipse插件时遇到了问题,这对于打包到最终产品中将是必需的。发送logcat输入到monkeyrunner通过eclipse/java导致问题
工具运行的方式是首先在模拟器上运行一个透明的覆盖应用程序。此应用程序收集用户屏幕按下的坐标并将其写入Android日志。然后,在模拟器上启动要测试的应用程序。
Adb logcat作为标准输入传送到处理小部件标识的monkeyrunner脚本中。 monkeyrunner脚本实时解析坐标信息的logcat输入。 monkeyrunner脚本使用AndroidViewClient(https://github.com/dtmilano/AndroidViewClient),该工具可以列出屏幕上的所有View对象及其属性。使用坐标印刷机信息,从具有正确坐标属性的视图列表中选择视图,并打印出其属性。
我的问题源于尝试在eclipse/java的上下文中处理logcat输出到monkeyrunner脚本的管道。如果我在单独的并发进程中运行adb logcat和monkeyrunner,并将logcat的InputStream传输到monkeyrunner的OutputStream,似乎存在一些锁定问题,因为monkeyrunner从未接收到坐标信息作为输入。我试图把流处理程序放在不同的线程中,但是这没有效果。
由于并发进程有时可能成为问题的根源,我以为直接在monkeyrunner中从logcat中读取,因此只有一个主进程。在monkeyrunner中,一旦与仿真器建立连接,就可以在其上打开一个adb shell(https://developer.android.com/tools/help/MonkeyDevice.html#shell)。 logcat的是一个很常见的亚行命令,但是当我运行device.shell(“logcat中”),它失败
[main] [com.android.chimpchat.adb.AdbChimpDevice] Error executing command: logcat
和
[main] [com.android.chimpchat.adb.AdbChimpDevice]com.android.ddmlib.ShellCommandUnresponsiveException –
不幸的是,我的谷歌技能一直没能找到我解决了这个问题。
谢谢!我不知道为什么我没有想到为adb运行子进程。我想我不太熟悉python。另外,我是AndroidViewClient和您的博客的忠实粉丝!我一直在研究的这两个开源项目经常使用您的博客作为想法/参考http://sourceforge.net/apps/mediawiki/guitar/index.php?title=Android_GUITAR和http://sourceforge.net/应用/的mediawiki /吉他/的index.php?标题= Intents_GUITAR – Rowhawn 2012-08-04 20:25:29