Навсегда «Ожидание запуска приложения отладочного сервера» при отладке WatchFace

Я учусь разрабатывать циферблаты под WearOS с Android Studio 3.1.4. У меня проблемы с отладчиком.

Кажется, я не могу запустить приложение напрямую в режиме отладки (Shift-F9). В этом случае я систематически получаю следующее сообщение, несмотря на авторизованную отладку на часах (эмулятор или настоящие часы (Huawai Watch 2)):

08/24 09:03:00: Launching wearmodule
$ adb push     /path/wearmodule/build/outputs/apk/debug/wearmodule-debug.apk /data/local/tmp/com.example.wearmodule
$ adb shell pm install -t -r "/data/local/tmp/com.example.wearmodule"
Success


Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Waiting for application to come online: com.example.wearmodule.test | com.example.wearmodule
Connecting to com.example.wearmodule
Waiting for application to start debug server
Could not connect to remote process. Aborting debug session.

Если я правильно понимаю, сервер отладки должен запускаться на самих часах. Как я могу этого добиться?

Единственный вариант, если я хочу отладить свои часы, - это запустить приложение в обычном режиме (Shift-F10) и потом присоединить к процессу отладчик.

Это не идеально, потому что не позволяет мне устранять неполадки в процессе инициализации моего кода. В частности, нельзя отлаживать такие методы, как initializeWatchFace(), onCreate() или onSurfaceChanged(), что очень раздражает.

Есть ли что-то особенное, что нужно сделать на самих часах, в манифесте, где-нибудь, чтобы исправить это? Может ли это быть связано с тем, что в моем приложении нет активности (как учат в Google CodeLab). Мне кажется, что сообщения связывают эти проблемы с управлением действиями.

Вы можете попробовать решение, представленное в этом SO поток: включить USB-отладку для обоих устройств или сделать недействительными кеши / перезапустить.

noogui 24.08.2018 17:18
4
1
4 174
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Боюсь, что нет никакого реального решения, кроме того, что вы уже нашли: запустить циферблат в обычном режиме, а затем прикрепить к нему отладчик. Как вы уже догадались, проблема в том, что отладчик ожидает запуска Activity; поскольку циферблат основан на Service, этого никогда не происходит.

Однако есть несколько приемов, которые можно использовать для отладки кода запуска циферблата. Вот один из подходов:

  1. При необходимости добавьте точки останова в код запуска, а затем запустите циферблат в обычном режиме.
  2. Прикрепите отладчик к циферблату.
  3. Переключитесь на циферблат разные на часах. Отладчик должен оставаться подключенным, пока ваш процесс находится в рабочем состоянии, и у вас будет несколько секунд, пока система его не убьет.
  4. Вернитесь к своему собственному лицу. Весь ваш код запуска должен работать в это время.

Если это не сработает, альтернативным методом является создание «фиктивного» действия в вашем приложении, отладка его с помощью Shift-F9 из Android Studio, а затем установка циферблата. Опять же, весь ваш код запуска должен запускаться после установления сеанса отладчика.

ПРИМЕЧАНИЕ: еще одна неприятность, которую вы обнаружите при отладке циферблатов, заключается в том, что ОС убьет ваш процесс как ANR после остановки в отладчике всего на несколько секунд. Я не нашел обходного пути, кроме как просто побыстрее!

Жалко это слышать. Похоже, что инструменты разработки циферблатов нуждаются в серьезных улучшениях. Для такого новичка, как я, немного больно управлять всеми дисфункциями эмулятора / отладчика И преодолевать все трудности, присущие задаче в целом. В любом случае, спасибо за разъяснения.

cyphics 31.08.2018 13:43

Верно. Я разговаривал с командой разработчиков Wear об этих проблемах в Google I / O последние пару лет, и, хотя они признают, что проблемы реальны, не было проявлено интереса к их решению. ?

String 31.08.2018 17:08

Другой вариант - переопределить метод onCreate в службе циферблата и вызвать Debug.waitForDebugger ().

override fun onCreate() {
    Debug.waitForDebugger()
    super.onCreate()
}

Используйте Run в Android Studio, чтобы на ваших часах была установлена ​​служба циферблата. Затем в Android Studio перейдите в верхнее меню Run и там выберите Attach to Process....

waitForDebugger в основном ставит основной поток на паузу, пока не будет подключен отладчик. Вы можете разместить Debug.waitForDebugger в любом месте вашего кода.

У меня сработал перезапуск Android Studio.

Другие вопросы по теме