将调试命令发送到在仿真器中运行的应用程序
为了使开发更容易,我希望能够将文本命令发送到我的Android应用程序(特别是在UI完全充实之前)。大概在模拟器中,但如果它也可以在通过USB连接的设备上工作,那将是非常棒的。当然,我可以将editText控件添加到我的应用程序中,然后在其中键入命令,但不希望处理调试事件,让UI变得混乱,以及所有复杂的事情。我也希望能够粘贴来自计算机剪贴板的文本,该文件排除了EditText控件。将调试命令发送到在仿真器中运行的应用程序
有没有办法做到这一点,通过任何的android-sdk/tools /东西说?我会实现命令处理器java类/方法,但需要一些方法才能实际为它提供一个字符串。我想我可以通过文件系统或类似的东西来做一些与模拟器对话的事情,但是如果有可用的东西,不用花很多时间去做。
向模拟器提供字符串的一种方法是实现用于SMS消息的BroadcastReceiver。然后从DOS框中,你可以'telnet localhost 5554'(或者你的模拟器启动的任何数字)然后你可以使用模拟器命令sms send 1234 yourString。 (1234就是为“发送”电话号码的假。
你将不得不解析接收器内的字符串,使之改变不同类的成员变量等,或别的什么东西。
这是一个非常笨拙的方法,但它不会影响你的UI和那只需要的代码十几线接收器。
我只是坚持此位的代码到的onCreate,并设置一个断点测试原理
rcvIncoming = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String message = "";
Bundle data = intent.getExtras();
if (data != null) {
Object pdus[] = (Object[]) data.get("pdus");
String sender = null;
for (Object pdu : pdus) {
SmsMessage part = SmsMessage.createFromPdu((byte[]) pdu);
message += part.getDisplayMessageBody();
if (sender == null) {
sender = part.getDisplayOriginatingAddress();
}
}
}
String test = message;// breakpoint here to test
}
};
registerReceiver(rcvIncoming, new IntentFilter(
"android.provider.Telephony.SMS_RECEIVED"));
你将需要这在显卡同样:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
。
如果是我,我只需让应用程序在非特权TCP端口上监听telnet或netcat(nc)的连接,并通过设置adb端口转发到仿真器上,或运行nc在adb shell下的模拟器内。但我说那些花了几年时间用TCP远程控制通道构建测试设备的人。
其实,如果你想使用NC从亚行外壳,你可以使用Unix域套接字而不是TCP,它可以简化一些与TCP讨厌的重新连接的问题。
(NickT的短信主意很有趣,不确定哪个会更好)
我对这个解决方案很感兴趣。我的回答虽然行得通,但有点像用锤子敲一个螺钉。我一直让Eclipse照顾亚行,并将其视为一个黑匣子。如果调试器运行,我可以在shell中使用'adb forward'命令,并期望它影响正在运行的调试会话,还是有办法通过Eclipse中的调试启动配置来设置此adb转发? – NickT 2010-11-22 12:30:42
adb forward并不是真正的'调试器'的一部分。相反,它所做的是建立一个端口转发,因此tcp或特定端口上的开发机器的任何连接都会转到特定端口上的仿真器上。你可以在这里监听一个tcp服务器。至于哪个答案更好,可能是编写一个独特的android sms接收器比编写一个通用的tcp服务器容易。 – 2010-11-22 16:43:25
谢谢克里斯,我用尼克的解决方案主要是因为我可以粘贴它,它工作(今天早上感觉懒惰:)),但我可能会重新访问这个并尝试你的方式。 – rob 2010-11-22 17:00:58
有趣的想法。从来没有做过BroadcastReceivers,我认为它非常简单(我正在看这个例子:http://stackoverflow.com/questions/1944102/android-sms-receiver-not-working) – rob 2010-11-22 03:33:33
不太难做到。我编辑原始代码以显示代码基础 – NickT 2010-11-22 09:21:52
好的,谢谢。工程很好,满足了我的需求! – rob 2010-11-22 16:56:39