调试 WatchFace 时永远 "Waiting for application to start debug server"
Forever "Waiting for application to start debug server" when debugging a WatchFace
我正在学习使用 Android Studio 3.1.4 在 WearOS 下开发表盘。我的调试器有问题。
看来我无法在调试模式 (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()
这样的方法无法调试,真烦人。
手表本身、清单中的某个地方是否需要做任何特别的事情来解决这个问题?它是否与我的应用程序没有 activity 这一事实有关(如 Google CodeLab 中所述)。我似乎有消息将这些问题与活动管理联系起来。
除了您已经找到的解决方案外,恐怕没有真正的解决方案:正常启动表盘,然后将调试器附加到它上面。如您所料,问题在于调试器正在等待 Activity
启动;因为表盘是基于 Service
而不是,所以这永远不会发生。
但是,您可以使用一些技巧来帮助调试表盘启动代码。这是一种方法:
- 根据需要在您的启动代码中放置断点,然后 运行 表盘正常。
- 将调试器附加到您的表盘。
- 切换到手表上的不同 面孔。只要您的进程在手表上处于活动状态,调试器就应该保持连接状态,并且您将有几秒钟的时间直到系统终止它。
- 切换回你自己的脸。此时你所有的启动代码应该运行。
如果这不起作用,另一种方法是在您的应用中创建 "dummy" activity,使用 Android Studio 中的 Shift-F9
对其进行调试,然后设置你的表盘。同样,在建立调试器会话后,所有启动代码都应该 运行。
注意:调试表盘时您会发现的另一个烦恼是 OS 会在停止几秒钟后作为 ANR 杀死您的进程调试器。除了快点之外,我还没有找到解决此问题的方法!
另一种选择是覆盖表盘服务上的 onCreate
方法并调用 Debug.waitForDebugger()
override fun onCreate() {
Debug.waitForDebugger()
super.onCreate()
}
在 Android Studio 中使用 Run
,以便在手表中安装表盘服务。
然后在 Android Studio 中转到 Run
顶部菜单,那里有 select Attach to Process...
。
waitForDebugger
基本上使主线程暂停,直到附加了调试器。您可以将 Debug.waitForDebugger
放在代码中任何更有意义的地方。
重新启动 Android Studio 对我有用。
我正在学习使用 Android Studio 3.1.4 在 WearOS 下开发表盘。我的调试器有问题。
看来我无法在调试模式 (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()
这样的方法无法调试,真烦人。
手表本身、清单中的某个地方是否需要做任何特别的事情来解决这个问题?它是否与我的应用程序没有 activity 这一事实有关(如 Google CodeLab 中所述)。我似乎有消息将这些问题与活动管理联系起来。
除了您已经找到的解决方案外,恐怕没有真正的解决方案:正常启动表盘,然后将调试器附加到它上面。如您所料,问题在于调试器正在等待 Activity
启动;因为表盘是基于 Service
而不是,所以这永远不会发生。
但是,您可以使用一些技巧来帮助调试表盘启动代码。这是一种方法:
- 根据需要在您的启动代码中放置断点,然后 运行 表盘正常。
- 将调试器附加到您的表盘。
- 切换到手表上的不同 面孔。只要您的进程在手表上处于活动状态,调试器就应该保持连接状态,并且您将有几秒钟的时间直到系统终止它。
- 切换回你自己的脸。此时你所有的启动代码应该运行。
如果这不起作用,另一种方法是在您的应用中创建 "dummy" activity,使用 Android Studio 中的 Shift-F9
对其进行调试,然后设置你的表盘。同样,在建立调试器会话后,所有启动代码都应该 运行。
注意:调试表盘时您会发现的另一个烦恼是 OS 会在停止几秒钟后作为 ANR 杀死您的进程调试器。除了快点之外,我还没有找到解决此问题的方法!
另一种选择是覆盖表盘服务上的 onCreate
方法并调用 Debug.waitForDebugger()
override fun onCreate() {
Debug.waitForDebugger()
super.onCreate()
}
在 Android Studio 中使用 Run
,以便在手表中安装表盘服务。
然后在 Android Studio 中转到 Run
顶部菜单,那里有 select Attach to Process...
。
waitForDebugger
基本上使主线程暂停,直到附加了调试器。您可以将 Debug.waitForDebugger
放在代码中任何更有意义的地方。
重新启动 Android Studio 对我有用。