将调试命令发送到在模拟器中运行的app

时间:2010-11-19 06:22:05

标签: android android-emulator

为了使开发更容易,我希望能够将文本命令发送到我的Android应用程序(特别是在UI完全充实之前)。大概是在模拟器中,如果它也可以在通过USB连接的设备上工作,那将会很棒。当然,我可以在我的应用程序中添加一个editText控件并在其中键入命令,但是不希望处理调试事务,使UI混乱,以及所有复杂性。我还希望能够从计算机剪贴板粘贴文本,这可以排除EditText控件。

有没有办法做到这一点,比如通过任何android-sdk / tools / stuff?我会实现命令处理器java类/方法,但需要一些方法才能实际为它提供一个字符串。我想我可以通过文件系统或其他东西做一些与模拟器对话的东西,但是如果有可用的东西,我宁愿不用花很多时间来做这件事。

2 个答案:

答案 0 :(得分:3)

如果是我,我只是让应用程序在非特权TCP端口上侦听来自telnet或netcat(nc)的连接,这些连接是通过向前设置adb端口传递到模拟器的主机上运行,​​或者从内部运行nc adb shell下的模拟器。但我说这是花了几年时间用TCP远程控制通道构建测试设备的人。

实际上,如果你想使用adb shell中的nc,你可以使用unix域套接字而不是tcp,这可以简化TCP的一些讨厌的重新连接问题。

(NickT的短信想法是一个有趣的,不确定哪个会更好)

答案 1 :(得分:2)

将字符串馈送到仿真器的一种方法是为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" /> 

相关问题