Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

分享一下自己的经验----多个本地机器用adb同时连接同一个Android设备 #4

Open
linhua55 opened this issue Aug 26, 2016 · 15 comments
Projects

Comments

@linhua55
Copy link

linhua55 commented Aug 26, 2016

名词:
adbd server: Android设备上运行的adbd程序,即adb服务端
adb server: 本地运行的adb server,即adb客户端创建的server

===多个本地机器用adb同时连接同一个Android设备
需要使用adb无线连接(高版本可以不需要,见下)

低版本Android(Android5.0以下,不包含)可以直接使用adb connect命令连接,高版本Android不行,原因见下。

高版本adbd(Android5.0以上)只支持一个adb server,再创建adb server(如adb -P 5038 start-server),然后adb -P 5038 connect ... ,再使用 adb -P 5038 devices ,会显示设备为offline状态。 如果要实现多adb客户端,只能共用adb server

高版本adb支持 -H -P参数,从而支持连接到远程的adb server。 -H 参数可以指定目标adb server的ip地址。可以使用 本地端口映射工具(如netsh) 将第一个机器的adb server监听的地址如127.0.0.1:5037,映射到0.0.0.0:5038供外网访问。

netsh interface portproxy add v4tov4 listenport=8001 connectport=80 connectaddress=127.0.0.1
@mzlogin
Copy link
Owner

mzlogin commented Aug 26, 2016

这个好高级~我回头整理整理补充进去,感谢分享!!! 👍 @linhua55

@codeskyblue
Copy link

其实还有将本地的USB设备,转化成可以TCP连接设备的程序。比如USB连接了一个设备,叫emulator-0023 有了这个转化程序就可以用 adb connect some-ip:port来连接了。具体可以参考 https://github.com/openstf/adbkit 目前只有nodejs的实现,作者把这套转化协议实现了,看代码实在是不容易。

另外lz的adb版本也太低了,现在都 1.0.36了

@mzlogin
Copy link
Owner

mzlogin commented Aug 29, 2016

哈哈 那我是得赶紧升级一下 adb 了,还是 1.0.32。

你们都是在什么场景下有这种需求的啊? @codeskyblue

@codeskyblue
Copy link

codeskyblue commented Aug 29, 2016

我平常是做安卓游戏的自动化测试的,所以adb这东西天天都在用。这种需要是因为设备少人多的原因,设备经常需要公用

@mzlogin
Copy link
Owner

mzlogin commented Aug 29, 2016

👍 原来如此,了解啦。

@codeskyblue
Copy link

说错了,iOS其实也包括游戏测试里面,你要是在出个awesome-idevice我也能帮上点忙

@mzlogin
Copy link
Owner

mzlogin commented Sep 5, 2016

哈哈 可惜我对 iOS 相关的东西并无了解,感觉你有空可以出一个。 👍 @codeskyblue

@codeskyblue
Copy link

        我等别人写,帮那位补充 :)发自网易邮箱大师
        在2016年09月05日 09:55,Zhuang Ma 写道:哈哈 可惜我对 iOS 相关的东西并无了解,感觉你有空可以出一个。 👍  @codeskyblue 

—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/mzlogin/awesome-adb","title":"mzlogin/awesome-adb","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/mzlogin/awesome-adb"}},"updates":{"snippets":[{"icon":"PERSON","message":"@mzlogin in #4: 哈哈 可惜我对 iOS 相关的东西并无了解,感觉你有空可以出一个。 👍 @codeskyblue "}],"action":{"name":"View Issue","url":"https://github.com/mzlogin/awesome-adb/issues/4#issuecomment-244643423"}}}

@mzlogin
Copy link
Owner

mzlogin commented Sep 5, 2016

@yangchuang64 ❓ 你贴的这个链接就是本仓库……

@yangchuang64
Copy link

好多命令需要root才能使,有什么好办法绕过?

@mzlogin
Copy link
Owner

mzlogin commented Sep 5, 2016

@yangchuang64 这个我也没什么好办法……但一些权限和功能受限是对的,不然 Android 手机也太不安全了。

@mzlogin
Copy link
Owner

mzlogin commented Sep 7, 2016

@linhua55

关于共用 adb server,adb 的 -H -P 参数配合 netsh 我试了几次都没有用成功……能否麻烦用一个实例来说一下你的操作步骤与参数?

@linhua55
Copy link
Author

linhua55 commented Sep 7, 2016

ip1:192.168.1.2

adb server 运行在ip1对应的主机上。

netsh interface portproxy add v4tov4 listenport=5512  connectport=5037 connectaddress=127.0.0.1

ip2:192.168.1.3

adb start-server 不需要,使用ip1的adb server
关于 adb -H 192.168.1.2 -P 5512 connect adbd-server-ip:adbd-server-port命令,因为控制的是ip1adb server,所以这里的adbd-server-ipadbd-server-port 应该是ip1可以访问到的

adb -H 192.168.1.2 -P 5512  devices
adb -H 192.168.1.2 -P 5512  shell

因为低版本的adb没有-H -P参数,为了兼容低版本的adb客户端(因为低版本的adb,可以连接 高版本adb创建的adb server),需要在ip2再做一次本地端口转发

netsh interface portproxy add v4tov4 listenport=5037  listenaddress=127.0.0.1  connectport=5512 connectaddress=192.168.1.2

netsh命令需要以管理员权限运行

https://events.linuxfoundation.org/images/stories/pdf/lf_abs12_kobayashi.pdf
https://android.googlesource.com/platform/system/core/+/master/adb/OVERVIEW.TXT
http://www.cnblogs.com/pixy/p/4739040.html
http://blog.csdn.net/liranke/article/details/4999210
http://blog.csdn.net/stpeace/article/details/24933813

@Richard1ybb
Copy link

adb server和client通讯本质是就是个socket。但是为什么我们在本地启动服务时,无法通过本机的IP访问。是因为adb服务启动时,默认绑定的是localhost,没有监听所有的网络接口。
不知道是adb的bug还是什么,使用start-server命令启动时,指定绑定的端口是无效的,只有明确指定使用server模式启动时,才会listen to all network interfaces.
server:
adb -a -P <PORT_NUMBER> nodaemon server
client:
adb -H <REMOTE_IP> -P <PORT_NUMBER> devices

@ZedeX
Copy link

ZedeX commented Jun 24, 2020

我平常是做安卓游戏的自动化测试的,所以adb这东西天天都在用。这种需要是因为设备少人多的原因,设备经常需要公用

本机模拟器可以么?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
GTD
In Progress
Development

No branches or pull requests

6 participants