6

我正在学习使用 Android Studio 3.1.4 在 WearOS 下开发表盘。我的调试器有问题。

看来我无法直接在调试模式下运行应用程序(Shift-F9)。如果这样做,我会系统地收到以下消息,尽管已在手表(模拟器或真实手表(华为手表 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()or之类的方法onSurfaceChanged()不能调试,真的很烦人。

手表本身,清单中,某处有什么特别的事情可以解决这个问题吗?是否可以将其与我的应用程序没有活动的事实联系起来(如 Google CodeLab 中所述)。我似乎将这些问题与活动管理联系起来的消息。

4

3 回答 3

1

另一种选择是覆盖onCreate表盘服务上的方法并调用Debug.waitForDebugger()

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

在 Android Studio 中使用Run,以便在手表中安装表盘服务。然后在 Android Studio 中转到Run顶部菜单并选择Attach to Process....

waitForDebugger基本上将主线程暂停,直到附加了调试器。您可以将其放置Debug.waitForDebugger在代码中更有意义的位置。

于 2018-10-04T09:34:46.227 回答
0

重新启动 Android Studio 对我有用。

于 2019-08-14T16:21:47.253 回答
0

恐怕除了您已经找到的之外没有真正的解决方案:正常启动表盘,然后将调试器附加到它。如您所料,问题在于调试器正在等待Activity启动;由于表盘是基于 aService而不是,这永远不会发生。

但是,您可以使用一些技巧来帮助调试表盘启动代码。这是一种方法:

  1. 根据需要在启动代码中放置断点,然后正常运行表盘。
  2. 将调试器附加到您的表盘。
  3. 在手表上切换到不同的面孔。只要您的进程在手表上处于活动状态,调试器就应该保持连接状态,并且您将有几秒钟的时间直到系统将其杀死。
  4. 切换回你自己的脸。此时您的所有启动代码都应该运行。

如果这不起作用,另一种技术是在您的应用程序中创建一个“虚拟”活动,使用Shift-F9Android Studio 进行调试,然后设置您的表盘。同样,所有启动代码都应该在调试器会话建立后运行。

注意:调试表盘时您会发现的另一个烦恼是,操作系统将在调试器中停止几秒钟后将您的进程作为 ANR 终止。除了快速之外,我还没有找到解决方法!

于 2018-08-25T02:32:20.613 回答