为什么不能 Android Wear connect target 用于通过蓝牙进行调试?
Why can't Android Wear connect target for debugging over Bluetooth?
每当我在我的可穿戴模拟器上通过蓝牙激活调试时,设备开始在控制台上每隔 10 毫秒吐出此错误:
08-07 12:15:53.472 1484-29405/com.google.android.apps.wearable.settings W/AdbTargetService﹕ error during createTcpConnection
java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 7272): connect failed: ECONNREFUSED (Connection refused)
at libcore.io.IoBridge.connect(IoBridge.java:124)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
at java.net.Socket.startupSocket(Socket.java:590)
at java.net.Socket.tryAllAddresses(Socket.java:128)
at java.net.Socket.<init>(Socket.java:178)
at java.net.Socket.<init>(Socket.java:150)
at com.google.android.clockwork.settings.AdbTargetService$PipeControlThread.createTcpConnection(AdbTargetService.java:203)
at com.google.android.clockwork.settings.AdbTargetService$PipeControlThread.access0(AdbTargetService.java:81)
at com.google.android.clockwork.settings.AdbTargetService$PipeControlThread.run(AdbTargetService.java:153)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.system.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
at libcore.io.Posix.connect(Native Method)
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:111)
at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
at libcore.io.IoBridge.connect(IoBridge.java:122)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
at java.net.Socket.startupSocket(Socket.java:590)
at java.net.Socket.tryAllAddresses(Socket.java:128)
at java.net.Socket.<init>(Socket.java:178)
at java.net.Socket.<init>(Socket.java:150)
at com.google.android.clockwork.settings.AdbTargetService$PipeControlThread.createTcpConnection(AdbTargetService.java:203)
at com.google.android.clockwork.settings.AdbTargetService$PipeControlThread.access0(AdbTargetService.java:81)
at com.google.android.clockwork.settings.AdbTargetService$PipeControlThread.run(AdbTargetService.java:153)
at java.lang.Thread.run(Thread.java:818)
08-07 12:15:53.476 1229-1229/system_process D/ZenLog﹕ disable_effects: 0|com.google.android.apps.wearable.settings|11003|null|1000,listenerHints
在我的代码中,我将消息从可穿戴设备发送到手持设备。消息已正确发送,但调试器不会在手持模块上的 WearableListenerService class 内的任何断点处停止,似乎该代码未被执行。
补充信息:
- 设备:Genymotion Samsung Galaxy S4,API19、4.4.4。
- 可穿戴设备:ADV Emulator Square,API 21
- 相同的 applicationId
- 相同版本号
- 可穿戴项目作为依赖项添加到手持项目中
wearApp project(':wear')
- 没有
<uses-permission>
个标签
- Android Wear 通过 apk 安装在模拟器上:com.google.android.wearable.app-1.1.1.2016316-702016316-minAPI18
- 在手持设备和配对设备上激活蓝牙调试
- 主机:已连接目标:已断开连接。当我执行
adb -s 192.168.56.102:5555 forward tcp:4444 localabstract:/adb-hub
adb connect localhost:4444
时它没有连接,然而,第三个无用的设备似乎是在永久离线状态下创建的并且它不能用于 运行 它上面的任何东西:
也不会撤销权限或恢复出厂设置(如 post Android Wear device selection box says "offline localhost:4444 minSdk (API 20) > deviceSdk (API 1)" 中的建议
) 正在工作。
碰巧我误会了一切。如果您使用的是模拟可穿戴设备,则无需:
- 在可穿戴设备中激活 "Debugging over Bluetooth"。
- 重定向端口
adb -s 192.168.56.102:5555 forward tcp:4444 localabstract:/adb-hub
和
adb connect localhost:4444
.
- 甚至目标设备和主机设备都可以显示为 "disconnected"。
您只需要执行 adb -s handheldDeviceName forward tcp:5601 tcp:5601
这样手持设备就会与模拟器配对,然后您就可以开始调试而无需担心了。
问题在于,在 Android Studio 中,您一次只能调试一个模块,调试图标为:.
如果您想同时调试两个模块以便跟踪所有断点,您必须对一个模块使用调试按钮,然后将调试器附加到另一个设备。
配对后,两个设备都将出现在显示其进程的列表中。
我在使用 moto 360 时遇到了这个问题并通过本教程解决了:
http://melix.github.io/blog/2014/10/android-moto360.html
So you were looking at a solution, and here it is. Basically, the problem is that the Android companion app doesn’t store its settings under its cache. They are stored in the Google Play Services space, so here is the procedure that worked for me, and I sincerely hope it will do for you. On your handheld:
open the applications settings, search for the Android Wear application, then force stop it
clear its data and cache
now search for Google Play Services (depending on your language settings, it can appear with a different name, on m y device it is "Services Google Play".
click on Manage space. You will see that there’s a section for connected devices. I tried to clear data here, but it didn’t help, so you have to click on delete all data.
reboot your phone
reboot your Moto 360
I am unsure that the two last steps are really necessary, but I did it because I wanted to make sure that force stopping and clearing data did not introduce some weird behavior after that. When you reopen the Android Wear companion app, it should now be as if it was the first time you opened it and ask you to associate it with your watch. Do it, and now, you should be able to follow the normal procedure described in the Android documentation and…
如果您使用的是 Mac,请在不必要地重置所有内容之前尝试此操作(注意 127.0.0.1 而不是 localhost):
adb forward tcp:4444 localabstract:/adb-hub
adb connect 127.0.0.1:4444
当 localhost
解析为 ::1
(IPv6) 和 127.0.0.1
(IPv4) 时,连接到 127.0.0.1
也可能有助于 Linux,不只是 Mac:
$ adb forward tcp:4444 localabstract:/adb-hub
$ adb connect localhost:4444
unable to connect to localhost:4444: Connection refused
$ adb connect 127.0.0.1:4444
connected to 127.0.0.1:4444
$ adb devices
List of devices attached
127.0.0.1:4444 device
...
$
每当我在我的可穿戴模拟器上通过蓝牙激活调试时,设备开始在控制台上每隔 10 毫秒吐出此错误:
08-07 12:15:53.472 1484-29405/com.google.android.apps.wearable.settings W/AdbTargetService﹕ error during createTcpConnection
java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 7272): connect failed: ECONNREFUSED (Connection refused)
at libcore.io.IoBridge.connect(IoBridge.java:124)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
at java.net.Socket.startupSocket(Socket.java:590)
at java.net.Socket.tryAllAddresses(Socket.java:128)
at java.net.Socket.<init>(Socket.java:178)
at java.net.Socket.<init>(Socket.java:150)
at com.google.android.clockwork.settings.AdbTargetService$PipeControlThread.createTcpConnection(AdbTargetService.java:203)
at com.google.android.clockwork.settings.AdbTargetService$PipeControlThread.access0(AdbTargetService.java:81)
at com.google.android.clockwork.settings.AdbTargetService$PipeControlThread.run(AdbTargetService.java:153)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.system.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
at libcore.io.Posix.connect(Native Method)
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:111)
at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
at libcore.io.IoBridge.connect(IoBridge.java:122)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
at java.net.Socket.startupSocket(Socket.java:590)
at java.net.Socket.tryAllAddresses(Socket.java:128)
at java.net.Socket.<init>(Socket.java:178)
at java.net.Socket.<init>(Socket.java:150)
at com.google.android.clockwork.settings.AdbTargetService$PipeControlThread.createTcpConnection(AdbTargetService.java:203)
at com.google.android.clockwork.settings.AdbTargetService$PipeControlThread.access0(AdbTargetService.java:81)
at com.google.android.clockwork.settings.AdbTargetService$PipeControlThread.run(AdbTargetService.java:153)
at java.lang.Thread.run(Thread.java:818)
08-07 12:15:53.476 1229-1229/system_process D/ZenLog﹕ disable_effects: 0|com.google.android.apps.wearable.settings|11003|null|1000,listenerHints
在我的代码中,我将消息从可穿戴设备发送到手持设备。消息已正确发送,但调试器不会在手持模块上的 WearableListenerService class 内的任何断点处停止,似乎该代码未被执行。
补充信息:
- 设备:Genymotion Samsung Galaxy S4,API19、4.4.4。
- 可穿戴设备:ADV Emulator Square,API 21
- 相同的 applicationId
- 相同版本号
- 可穿戴项目作为依赖项添加到手持项目中
wearApp project(':wear')
- 没有
<uses-permission>
个标签 - Android Wear 通过 apk 安装在模拟器上:com.google.android.wearable.app-1.1.1.2016316-702016316-minAPI18
- 在手持设备和配对设备上激活蓝牙调试
- 主机:已连接目标:已断开连接。当我执行
adb -s 192.168.56.102:5555 forward tcp:4444 localabstract:/adb-hub adb connect localhost:4444
时它没有连接,然而,第三个无用的设备似乎是在永久离线状态下创建的并且它不能用于 运行 它上面的任何东西:
也不会撤销权限或恢复出厂设置(如 post Android Wear device selection box says "offline localhost:4444 minSdk (API 20) > deviceSdk (API 1)" 中的建议 ) 正在工作。
碰巧我误会了一切。如果您使用的是模拟可穿戴设备,则无需:
- 在可穿戴设备中激活 "Debugging over Bluetooth"。
- 重定向端口
adb -s 192.168.56.102:5555 forward tcp:4444 localabstract:/adb-hub
和adb connect localhost:4444
. - 甚至目标设备和主机设备都可以显示为 "disconnected"。
您只需要执行 adb -s handheldDeviceName forward tcp:5601 tcp:5601
这样手持设备就会与模拟器配对,然后您就可以开始调试而无需担心了。
问题在于,在 Android Studio 中,您一次只能调试一个模块,调试图标为:
如果您想同时调试两个模块以便跟踪所有断点,您必须对一个模块使用调试按钮,然后将调试器附加到另一个设备
配对后,两个设备都将出现在显示其进程的列表中。
我在使用 moto 360 时遇到了这个问题并通过本教程解决了:
http://melix.github.io/blog/2014/10/android-moto360.html
So you were looking at a solution, and here it is. Basically, the problem is that the Android companion app doesn’t store its settings under its cache. They are stored in the Google Play Services space, so here is the procedure that worked for me, and I sincerely hope it will do for you. On your handheld:
open the applications settings, search for the Android Wear application, then force stop it
clear its data and cache
now search for Google Play Services (depending on your language settings, it can appear with a different name, on m y device it is "Services Google Play".
click on Manage space. You will see that there’s a section for connected devices. I tried to clear data here, but it didn’t help, so you have to click on delete all data.
reboot your phone
reboot your Moto 360
I am unsure that the two last steps are really necessary, but I did it because I wanted to make sure that force stopping and clearing data did not introduce some weird behavior after that. When you reopen the Android Wear companion app, it should now be as if it was the first time you opened it and ask you to associate it with your watch. Do it, and now, you should be able to follow the normal procedure described in the Android documentation and…
如果您使用的是 Mac,请在不必要地重置所有内容之前尝试此操作(注意 127.0.0.1 而不是 localhost):
adb forward tcp:4444 localabstract:/adb-hub
adb connect 127.0.0.1:4444
当 localhost
解析为 ::1
(IPv6) 和 127.0.0.1
(IPv4) 时,连接到 127.0.0.1
也可能有助于 Linux,不只是 Mac:
$ adb forward tcp:4444 localabstract:/adb-hub $ adb connect localhost:4444 unable to connect to localhost:4444: Connection refused $ adb connect 127.0.0.1:4444 connected to 127.0.0.1:4444 $ adb devices List of devices attached 127.0.0.1:4444 device ... $