其实整个过程很简单,但是刚开始的我,有点乱。整明白了,留一笔。
环境:
Centos7 内网服务器地址:192.168.0.189 (上面搭建了docker的stf)
本机地址 windows:192.168.16.123
需求:
我要将本机上的Android,展示在STF界面上
讲一波通俗易懂的原理:
现在如果将Android直接连在Centos上,使用192.168.0.189:7100 直接可以看到已经看到了。
原来开启stf的命令是:
##docker run -d --name stf --net host openstf/stf stf local --public-ip 本地ip
大概意思是:只要连在本地ip这台电脑上的机器,都可以显示出现。
现在需要显示其他电脑上的Android机器(本机电脑),那就得指定电脑,告诉stf,到底局域网中需要显示哪台电脑上的
那就用到新的一条docker命令:
##docker run -d --name stf_provider --privileged=true --net host openstf/stf stf local --public-ip 192.168.0.189 --adb-host 192.168.16.123 --adb-port 5037 --allow-remote
表演正式开始===>步骤:
1.先将docker中原有的stf,stop
2.杀掉docker宿主机中的5037端口 ==> ps -ef | grep 5037 也就是说,docker中的adb容器是不需要打开的
3.再将局域网中电脑(本机电脑windows)的5037端口暴露给其他机器:
adb -a -P 5037 fork-server server
或者 adb nodaemon server -a -P 5037
如果第三步操作后有这个提示:
C:\Users\2018>adb nodaemon server -a
adb F 08-04 23:20:29 15316 9996 main.cpp:153] could not install *smartsocket*
istener: cannot bind to 0.0.0.0:5037: 閫氬父姣忎釜濂楁帴瀛楀湴鍧€(鍗忚/缃戠粶
鍦板潃/绔彛)鍙厑璁镐娇鐢ㄤ竴娆°€?(10048)
那么需要将局域网中的电脑(本机windows)的5037端口删了:
C:\Users\2018>netstat -ano | findstr "5037"
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 15920
C:\Users\20180>taskkill /pid 15920 /f
成功: 已终止 PID 为 15920 的进程。
4.执行命令:docker run -d --name stf_provider --privileged=true --net host openstf/stf stf local --public-ip 192.168.0.189 --adb-host 192.168.16.123 --adb-port 5037 --allow-remote
关键词: --adb-host:局域网中那台机器的ip,可以对应上面说的环境
--name stf_provider 这里的name不要和原来stf的名字一样,不然会提示你已经存在。你也可以删了原来stf的容器
此时,没有意外的话,192.168.0.189:7100就可以显示局域网中的Android机了
可以使用docker logs stf_provider来查看stf_provider容器的日志。
如果觉得前台没有显示,那就查看下docker日志
>>docker logs stf_provider
看到这样的提示就对了
2020-08-06T09:05:17.684Z INF/device:plugins:touch 117 [1181cef8] Touch origin is top left
2020-08-06T09:05:17.685Z INF/device:plugins:touch 117 [1181cef8] Requesting touch consumer to start
2020-08-06T09:05:17.686Z INF/device:plugins:touch 117 [1181cef8] Launching touch service
2020-08-06T09:05:17.694Z INF/device:plugins:touch 117 [1181cef8] Connecting to minitouch service
2020-08-06T09:05:17.843Z INF/device:plugins:touch 117 [1181cef8] minitouch says: "Note: device /dev/input/mice is not supported by libevdev"
2020-08-06T09:05:17.883Z INF/device:plugins:touch 117 [1181cef8] minitouch says: "Type B touch device ft5x06_ts (720x1440 with 5 contacts) detected on /dev/input/event1 (score 22022)"
2020-08-06T09:05:18.013Z INF/device:plugins:touch 117 [1181cef8] Reading minitouch banner
2020-08-06T09:05:18.014Z INF/device:plugins:touch 117 [1181cef8] minitouch says: "Connection established"
2020-08-06T09:05:18.057Z INF/device:plugins:vnc 117 [1181cef8] Starting VNC server on port 7402
2020-08-06T09:05:18.059Z INF/device:plugins:browser 117 [1181cef8] Loading browser list
2020-08-06T09:05:18.081Z INF/device:plugins:browser 117 [1181cef8] Updating browser list
2020-08-06T09:05:18.081Z WRN/device:plugins:browser 117 [1181cef8] Unmapped browser "com.alibaba.android.rimet"
2020-08-06T09:05:18.082Z WRN/device:plugins:browser 117 [1181cef8] Unmapped browser "com.ss.android.article.news"
2020-08-06T09:05:18.083Z INF/device:plugins:mute 117 [1181cef8] Will not mute master volume
2020-08-06T09:05:18.215Z INF/device:resources:minirev 117 [1181cef8] Installing "/app/vendor/minirev/arm64-v8a/minirev" as "/data/local/tmp/minirev"
2020-08-06T09:05:18.261Z INF/device:plugins:forward 117 [1181cef8] Launching reverse port forwarding service
2020-08-06T09:05:18.267Z INF/device:plugins:forward 117 [1181cef8] Connecting to reverse port forwarding service
2020-08-06T09:05:19.271Z INF/device 117 [1181cef8] Fully operational
2020-08-06T09:05:20.734Z INF/provider 46 [*] Providing all 1 device(s)
如果log中有这个提示:
INF/provider 46 [*] Receiving input from "tcp://127.0.0.1:7114"
Unhandled rejection Error: spawn adb ENOENT
at _errnoException (util.js:1024:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
at onErrorNT (internal/child_process.js:372:16)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
就说明第二步没有做好。是宿主机的5037端口,删除端口就好了。