отправлять команды отладки в приложение, работающее в эмуляторе - PullRequest
2 голосов
/ 19 ноября 2010

Чтобы упростить разработку, я хочу иметь возможность отправлять текстовые команды в мое приложение для Android (особенно до того, как пользовательский интерфейс полностью обновился). Предположительно в эмуляторе, но было бы замечательно, если бы он также работал на устройстве, подключенном через USB. Конечно, я мог бы добавить элемент управления editText в свое приложение и вводить там команды, но предпочел бы не иметь дело с отладочными вещами, загромождающими пользовательский интерфейс, и всеми сложностями этого. Я также хотел бы иметь возможность вставлять текст из буфера обмена компьютера, который исключает элементы управления EditText.

Есть ли способ сделать это, скажем, через какой-либо из android-sdk / tools / stuff? Я бы реализовал командный процессор java-класс / метод, но мне нужен какой-то способ, чтобы можно было фактически передать ему строку. Я полагаю, я мог бы сделать что-то, что говорит с эмулятором через файловую систему или что-то еще, но предпочел бы не тратить много времени на это, если что-то уже доступно.

Ответы [ 2 ]

3 голосов
/ 22 ноября 2010

Если бы это был я, я бы просто послушал приложение на непривилегированном TCP-порте для соединений из telnet или netcat (nc), запущенных на хосте, переданном в эмулятор, путем настройки прямого порта adb, или запустив nc изэмулятор под оболочкой adb.Но я говорю, что как человек, который потратил несколько лет на создание тестового оборудования с каналами удаленного управления TCP.

На самом деле, если вы хотите использовать nc из оболочки adb, вы можете использовать доменный сокет unix вместо tcp,что может упростить некоторые досадные проблемы с повторным соединением с TCP.

(идея SMS от NickT интересная, не уверен, что окажется лучше)

2 голосов
/ 22 ноября 2010

Одним из способов подачи строки в эмулятор будет реализация BroadcastReceiver для SMS-сообщений.Затем из окна DOS вы можете « telnet localhost 5554 » (или любой другой номер, под которым запускается ваш эмулятор). Затем вы можете использовать команду эмулятора sms send 1234 yourString .(1234 - просто фиктивный номер для «отправляющего» телефонного номера.

Вам нужно было бы проанализировать строку внутри получателя, чтобы заставить ее изменять различные переменные члена класса и т. Д. Или что-то в этом роде.

Этодовольно неуклюжий метод, но он не повлияет на ваш пользовательский интерфейс, и для получателя потребуется всего около десятка строк кода.

Я просто вставил этот бит кода в 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" /> 

.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...