ATX atxserver2 手机设备管理平台 重装上阵

codeskyblue · April 30, 2019 · Last by songshu12 replied at April 05, 2020 · 19980 hits
本帖已被设为精华帖!

前言

在一年前写过一篇安卓设备集群管理 atx-server的文章,主推设备的无线接入,服务端用的是我最喜欢的Go语言。承蒙大家厚爱,文章不仅加精,而且还有1万6千多的阅读量,很多人将这套工具部署到了公司内部,给ATX的QQ群带了源源不断的人群。我作为开发者,也在内部部署了一套,在陆陆续续的使用中,体会到了它的优点,也渐渐的发现了它的不足。

优点主要体现在设备接入方便,手机通过数据线完成初始化后,就可以拿在手里到处跑了。平台可以直接连接手机运行自动化脚本,下载日志,甚至远程操作。
缺点则主要体现在稳定性上,数据线的速度传输速度显然要比WIFI连接快的多,而且还不用担心手机没电的问题。

重构计划

atx-server在使用的过程中不断的优化,当有一天最终优化不下去了。于是开始了atxserver2的筹备计划。这个项目2019/01/15号开始开发的,目前开发了大概3个月了。已经比较稳定了。以前的服务端是用的Go+RethinkDB,现在则是用的Python3+NodeJS+RethinkDB。

架构图

thanks to 坚果云绘图工具

主要希望提供的Features(不过有些完成了,有些没完成)

  • [x] 使用Python重写服务端和客户端(Go语言写服务端速度有点慢,没有Python弄的快)
  • [x] 网页控制手机提供更全的功能(原有的atx-server功能非常的少,只有操作手机和一个手机shell终端)
  • [x] 支持USB设备的接入 (主要是为了提高稳定性)
  • [x] 支持iOS设备 (这个功能的呼声一直很高)
  • [x] 全面的REST API文档。(原来可能有,但是不全)
  • [ ] 支持WIFI设备的接入(这个暂时还没搞完,不过很快了)
  • [ ] 支持跨网段的设备接入 (假如有这个功能的话,感觉家里闲置的手机也能派上用场了)

有个用户迫切需要WIFI设备的接入功能,我问他为什么。他的理由真的让人无法反驳,他说:“我们的电脑没有USB接口”。

如果还想要其他的Feature,可以留言,或提Issue到这里 https://github.com/openatx/atxserver2/issues/1 虽然我不一定会有时间做

网页功能预览

远程控制原理简介

Android的远程控制主要还是基于 minicap+minitouch+atx-agent (不过感觉最近openstf的作者们,有点太忙了,没空管这个项目。之前adbkit有个bug,我提了一个pr,很久都没有收到回复。)我估计下个版本我就不用minicap+minitouch了。有个 scrcpy看起来不错,或许以后可以合并进来。

iOS的远程控制主要还是基于appium fork的WebDriverAgent。因为appium在WDA中增加了MJPEG Server,所以让远程投屏成为了可能。不过只支持iOS 12.0以上。

REST API接口

这个版本相比之前的atx-agent,有着更全面的权限控制。一旦你释放了设备,安卓或苹果的远程连接地址就会立刻换掉,防止平台上没有占用设备,但是却可能控制设备的事情发生。

See also: https://github.com/openatx/atxserver2/blob/master/API.md

项目地址和部署方法

https://github.com/openatx/atxserver2

目前这个版本提供了Docker的部署方式,可谓是简单快捷。一句docker-compose up命令就能将服务端启动起来。而provider的部署,用docker run ...就可以运行起来。手机连接上去之后,就会自动安装需要的apk和二进制文件。如果需要支持iOS,可能步骤要多点,不要有很详细的步骤供参考。

因为大部分是Python写的,我想这个版本贡献代码的人应该会多起来吧。

FAQ

为什么还在用RethinkDB?

总有人问我RethinkDB不是停止维护了吗?为什么要选这个数据库。因为这玩意实在太好用了,功能多,内存占用少,支持各种各样的平台部署。见过好的之后,你就再也不想用以前的。实际上这个数据库已经转交Linux基金会了,Github上这个项目还是有断断续续的提交,且它运行的一直还都很稳定。所以就先这样吧。

提示错误:zipfile.BadZipFile: File is not a zip file

因为用到了git-lfs,用来往项目中塞二进制文件。没有安装它,就不会下载哪些必要的二进制文件。修复方法:根据https://git-lfs.github.com/的安装提示完成git-lfs的安装,之后执行git lfs install && git lfs pull,然后重新运行即可。

其他问题欢迎留言

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 118 条回复 时间 点赞

这我可就忍不住要赞你了。

楼主V5,前排占楼

先装起来试试

有个用户迫切需要WIFI设备的接入功能,我问他为什么。他的理由真的让人无法反驳,他说:“我们的电脑没有USB接口”。

就是我本人了。。。。 我们暂时解决了这个问题了,通过ws传送python-uiautomator2的指令,但是stf的数据还没有解决。

atxserver1怎么设计成atxserver2呢?

剪烛 回复

没有USB接口的电脑,是啥电脑?

watchdog 回复

不是没有usb接口的手机,是有usb口,但是只能向里传送数据,adb是无法使用的(一般外包使用的都是这种电脑,我们其实希望组织起大部分的功能测试人员来写用例,所以有这种需求)

剪烛 回复

咱们平安的电脑还是可以开usb连接的,需要找桌面运维把Usb驱动装上,再装上相应的手机驱动。这个事情我花了一个星期去找人,嗯就是这样。

剪烛 回复

用WiFi 电脑和手机通信 互相传输内容,安全应该还会找事吧

Rethinkdb没有做性能测试还是担心有问题,不像mongo这类经过大量项目的实践,最好是换掉的好。工作量也不大。

rethinkdb在做统计方面坑的很,而且有个已知的bug,缺少周函数。

Lucas 回复

缺少周函数,应该不属于bug范围吧

0x88 回复

本来这个系统也不需要rethinkdb有多好的性能,只能稳定就够了

6666大佬厉害了。马上去体验一波先。

大佬厉害,已经搭建用起来了,provider多地设计太方便了,相比v1好很多了。正在试用ios。

666大赞,假期结束就拿公司试试,哈哈哈哈

思寒_seveniruby 将本帖设为了精华贴 02 May 08:24

感觉你在重做stf了。。。
绘图可以用下plantuml,
改天上社区公开课演示下吧。

codeskyblue #22 · May 02, 2019 作者

一开始重做是因为stf部署麻烦,现在感觉还是重做的用起来顺手,并且bug也更好修了

之前写的atx-test已经支持atxserver2

android修改config下的Url和token就可以可以和以前一样运行了
ios写了个简单的网易云音乐的demo
https://github.com/pengchenglin/ATX-Test

怒赞啊!!!!

楼主牛逼

现在是不是不支持wifi

请教个问题,oppoUSB调试,10分钟不操作就会关闭,定时传输adb命令也没有用,如果不用wifi怎么解决?

codeskyblue #28 · May 06, 2019 作者
蓝眼墨 回复

据说输入个什么命令改下oppo的配置就行了。这个可能需要问问OPPO的开发们

蓝眼墨 回复

额,难道用wifi可以解决?

支持楼主 👍

蓝眼墨 回复

为什么断掉呢?了解一下android的回收机制。android手机一开始和苹果手机差别在哪里呢?其中一个就是android手机开机久了就会越来越卡,而且耗电非常快,于是厂商就不断优化手机。说了这么多,解决办法就是把stfservice加入耗电白名单或是允许后台运行的类似关键字。这个问题不仅仅是在oppo手机上出现,不同的手机还有不一样的界面入口。

0x88 回复

oppo 手机有个 10分钟 不使用 自动关闭开发者选项的 功能,然后 开发者选项里usb调试也就被关闭了,设备就断线了

剪烛 回复

wifi连接就不用 打开usb调试

蓝眼墨 回复

oppo还有个坑爹的就是点击到开发者的黄色下拉就会断掉,这个只能把点击区域这块去掉,如果是用monkey一定要定制坐标点,不给点击到那个下拉条。当然最好是让oppo那边的开发者不要设计这么反人类的功能。

iOS 常用功能注:iOS的弹窗不能通过屏幕点击选择,请问是出于什么考虑呢

codeskyblue #36 · May 07, 2019 作者
ltyd5788 回复

我的OC不咋地,不太会改WDA的源码

嗨,遇到一个问题,当执行这个命令(docker-compose up)后,出现这样的报错 for rethinkdb Cannot create container for service rethinkdb: b'Drive has not been shared',麻烦看下啥问题

38Floor has been deleted
枫叶 回复

找到原因了:
因为没有共享磁盘!右击“docker desktop is runing”,就是电脑右下角的一个图标。
点击“settings”
再点击“shared Drives”
然后把磁盘都勾上,就可以了

一个新问题,执行这个命令后(python main.py --server localhost:4000)报错,如截图

赞一个

蓝眼墨 回复

好像是拨号 *#8011# 就行,之前试过感觉怪怪的,就没用OPPO手机了

codeskyblue #43 · May 07, 2019 作者
啵板 回复

ios提示 设备屏幕同步中断,大神们是咋回事?

这个管理平台是否Android与ios的手机都支持?

啵板 回复

*#8011# 应该只是R9 R11 效果比较好, R15 R17 等最新的手机还是会自动关闭.

*#8011#有问题,还不如,过9分钟调用下adb shell echo online

Maxdong24 回复

ios-provider 执行下 npm install 然后再启动看看

49Floor has been deleted
0x88 回复

确实有点反人类

楼主好,上面截图的问题按照你的方法执行git lfs install提示安装了,但是执行git lfs pull后提示Not in a git repository.这个怎么处理

其实通过无线+有线 这种双重保活的方式,有可能让真机的稳定性更好一些.

大佬,网页上的版本号不会更新吗?
我 pull 下了新代码,版本号还是显示第一次部署的编号。

codeskyblue #54 · May 14, 2019 作者
啵板 回复

用来记录我代码有重大更新时用,不是每次都更新

codeskyblue 回复

主要是我换电脑装部署,那个版本号又是新的,我以为是部署的时候出了问题

大佬,请教atxserver2能实现跨网段接入设备么?云服务器上部署了项目,无法通过adb去连接设备,互相也ping不通,有没啥解决方案呢?

luo000luo123 回复

服务器如果是win 可以在远程桌面连接里面设置把本地的端口映射到远程

蓝眼墨 回复

之前oppo手机是通过设备是否处于充电状态来判断的,现在新机型不知道还是不是以这个来判断,你可以试一下,用adb命令修改电池的充电状态 adb shell dumpsys battery set ac 1

Author only
codeskyblue #60 · May 23, 2019 作者
240581580 回复

我们又不是在美国本土开发的,跟我们没多大关系。就算有关系到时候再换个地方好了

可以支持多设台iOS设备连接吗?

codeskyblue #62 · May 29, 2019 作者
Sutune 回复

多少台吗?我手里就两台iphone手机,你可以试试更多台。

codeskyblue 回复

打算接入10台左右的iOS设备,这个框架iOS设备支持有上限吗?

Sutune 回复

能做到一拖六,不过我们用的不是codeskyblue的开源框架,但是修改wda的原理类似。

yca 回复

那挺不错的😀

Sutune 回复

iOS的远程控制主要还是基于appium fork的WebDriverAgent。因为appium在WDA中增加了MJPEG Server,所以让远程投屏成为了可能。不过只支持iOS 12.0以上。

我们方法类似,不过我们做的支持iOS 11及以上,老哥攻坚一下,尝试兼容iOS10呗。

ios提示 设备屏幕同步中断,大神们是咋回事?

发现一个很烦恼的问题:从remoteControl界面切换到另外一个浏览器页面后,再切回来,页面就会报【设备屏幕同步中断】,只能通过停止使用设备,再重新占用设备后显示才正常。有人知道怎么回事么?

强烈建议大佬多加点代码注释😂

小白求助,在局域网一台linux服务器上部署完atxserver2 及atxserver2-android-provider后,必须把手机通过USB连接到部署了该服务linux服务器去吗? 我现在插到使用的windows机器上没用,打开atxserver2-android-provider的部署机器web:3500,提示 404: Not Found

71Floor has been deleted
72Floor has been deleted
stronger 回复

你好,”ios提示 设备屏幕同步中断“ 这个问题我也遇到了,在web页面使用真机之后,FPS/Frames数值一直在快速滚动,然后5s左右之后就弹出这个报错,然后真机就不能用了。
请问大家谁有解决方案吗?

开了F12网络包看到服务器返回是{"success": true, "description": "Device activated time updated"}

楼主,请问支持wifi吗,我用usb是可以连接上的,能正常操作,但是拔完线,连接就断了,wifi该怎么连接上,能ping通的。

cszzh 回复

还没做好

hwq8888 回复

新的iproxy貌似有点问题,暂时用一个node写的usbmux客户端代替了,更新一下再重新npm install一下就好了


有没有哪位大佬遇到过这个问题?请指教

请教一下大佬,我在配置环境到最后一步时报错,该怎么处理

ljm1000 回复

没装adb?

codeskyblue 回复

好像是没有安装adb

作者你好我也是遇到73楼一样的问题 启动就设备屏幕中断第一次安装 我打开9100端口查看也是无反应 请问新的iproxy貌似有点问题,暂时用一个node写的usbmux客户端代替了,更新一下再重新npm install一下就好了“
您的这句话可以具体操作代码贴出来吗?小白一枚

stf中的jade改不动,python3比较好改,转战atx,谢谢大佬👍

作者你好 我在运行到这一步的时候SERVER_URL="http://localhost:4000" # 这里修改成atxserver2的地址
python3 main.py -s $SERVER_URL 出现了9100端口无法连接,打开web也是显示设备屏幕同步中断
还发现一个bug
[D 190710 10:42:24 heartbeat:88] websocket send: {'udid': 'fa22e915edd5932b7dbad053fbab506651a1fead', 'provider': {'wdaUrl': 'http://10.211.55.3:20002'}, 'properties': {'ip': '10.168.1.172', 'version': '12.3.1', 'sdkVersion': '12.2'}, 'command': 'update', 'platform': 'apple'}
internal/modules/cjs/loader.js:628
throw err;
^

Error: Cannot find module 'mjpeg-consumer'
Require stack:

/Users/virtual/Desktop/atxserver2/atxserver2-ios-provider/wdaproxy.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:625:15)
at Function.Module._load (internal/modules/cjs/loader.js:527:27)
at Module.require (internal/modules/cjs/loader.js:683:19)
at require (internal/modules/cjs/helpers.js:16:16)
at Object. (/Users/virtual/Desktop/atxserver2/atxserver2-ios-provider/wdaproxy.js:16:23)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:643:32)
at Function.Module._load (internal/modules/cjs/loader.js:556:12)
at Function.Module.runMain (internal/modules/cjs/loader.js:839:10) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/virtual/Desktop/atxserver2/atxserver2-ios-provider/wdaproxy.js'
]
}
[D 190710 10:43:25 idb:261] [fa22e..ad:“hp”的 iPhone-iPhone 7 Plus] is fine

大佬,给力了,后面正要规划一个专用的多设备连接的情况,及时雨啊

我部署使用了下,IOS卡顿比较严重是什么原因呀?

楼主,通过usb是正常的,拔掉后就断掉了,是wifi的功能还不能支持嘛?

yqlArvin 回复

是的,还不支持


老铁这个是欠费了嘛😂 提示空间不足.....

sowfe 回复

是的得交钱才让用了

codeskyblue 回复

老哥,还是提示欠费,多少钱,我们支持下

iOS 提示 设备屏幕中断是什么原因呀

我安卓都提示设备屏幕中断,websocket连接被拒绝,不知道为啥

大佬 支持wifi接入 可以了吗?现在是拔掉USB,设备就断开了,呜呜

支持模拟器吗?
还有输入框一直是disabled,不能通过电脑键盘键入

无线的方式连接设备,adb序列号是ip:port,数据库也是基于这个来创建数据,如果换了ip(或者采用USB方式连接换了新的序列号),设备就变成了“新设备”了,是不是可以通过其他唯一识别码来调整,不创建新的设备数据。刚用没几天,还不会二次开发,提个小意见~~

为了避免大改,尝试着用了一下法子解决不同方式(和不同ip)登录的数据同步问题(前提:保证手机用USB登录过,即数据库有pr_key为"udid": "7PR4C19912015805"的数据,我称之为源数据吧,):
添加了两个方法,具体作用如下:
第一个方法:负责设备断开连接的时候,向源数据同步信息;第二个方法:负责设备连接时候向源数据请求同步信息操作。从websock send发送的数据,我们很容易知道设备做了什么操作的,第二个方法就可以根据需要来判断是否请求同步操作,比如第一次登陆不用同步,USB登陆不用同步,点击停止设备也不用同步。
最终效果:换ip登陆能够同步USB登陆方式的数据(USB数据始终都是最新的数据,因为设备下线有做同步操作),如图所示。
我所设置的同步数据如下,应该不会有遗漏,经过测试貌似没问题~~:
need_syn=["idleTimeout","createdAt","lastActivatedAt","department","idleTimeout","usingBeganAt","usingDuration","userId","owner",("properties","propertyId")]

codeskyblue 回复

ios设备是必须连到苹果电脑上吗?现在我是把服务部署在linux系统上,安卓已经可以连上了,要连接ios设备的话,还需要准备一台苹果电脑吗?

客户端和服务器都部署起来了,试了三四个安卓手机,设备都能列出来,但是只有一个android10系统的可以点击滑动,其他的都不能操作,有人遇到同样的问题了吗

熊雅慧 回复

是最新的代码吗? git rev-parse HEAD 看看当前的sha-id

codeskyblue 回复

是最新的代码,sha-id是这个:b8c821ee6429d7417808afe9c921ac5866e25742

codeskyblue 回复

2020/02/16 17:29:48 httpserver.go:996: dial @minicap err: dial unix @minicap: connect: connection refused, wait 0.5s
2020/02/16 17:29:48 cmdctrl.go:28: DEBUG program pid: 22599
2020/02/16 17:29:48 httpserver.go:919: dial @minitouchagent error: dial unix @minitouchagent: connect: connection refused, wait 0.5s
2020/02/16 17:29:48 cmdctrl.go:28: DEBUG ArgsFunc error: fork/exec /system/bin/pm: exec format error
2020/02/16 17:29:48 cmdctrl.go:28: DEBUG program finished
127.0.0.1 - - [16/Feb/2020:17:29:48 +0800] "GET /shell?command=input%20keyevent%20WAKEUP HTTP/1.1" 200 39
2020/02/16 17:29:49 httpserver.go:919: dial @minitouchagent error: dial unix @minitouchagent: connect: connection refused, wait 0.5s
2020/02/16 17:29:49 httpserver.go:919: dial @minitouchagent error: dial unix @minitouchagent: connect: connection refused, wait 0.5s
2020/02/16 17:29:50 httpserver.go:919: dial @minitouchagent error: dial unix @minitouchagent: connect: connection refused, wait 0.5s
2020/02/16 17:29:50 httpserver.go:919: dial @minitouchagent error: dial unix @minitouchagent: connect: connection refused, wait 0.5s
2020/02/16 17:29:51 httpserver.go:919: dial @minitouchagent error: dial unix @minitouchagent: connect: connection refused, wait 0.5s
2020/02/16 17:29:51 httpserver.go:919: dial @minitouchagent error: dial unix @minitouchagent: connect: connection refused, wait 0.5s
2020/02/16 17:29:52 httpserver.go:919: dial @minitouchagent error: dial unix @minitouchagent: connect: connection refused, wait 0.5s
2020/02/16 17:29:52 httpserver.go:919: dial @minitouchagent error: dial unix @minitouchagent: connect: connection refused, wait 0.5s
2020/02/16 17:29:53 httpserver.go:919: dial @minitouchagent error: dial unix @minitouchagent: connect: connection refused, wait 0.5s
2020/02/16 17:29:53 httpserver.go:919: dial @minitouchagent error: dial unix @minitouchagent: connect: connection refused, wait 0.5s
2020/02/16 17:29:54 httpserver.go:911: unix @minitouchagent connect failed
2020/02/16 17:29:54 httpserver.go:943: readJson err: read tcp 127.0.0.1:7912->127.0.0.1:56588: use of closed network connection
127.0.0.1 - - [16/Feb/2020:17:29:48 +0800] "GET /minitouch HTTP/1.1" 200 0
2020/02/16 17:29:55 cmdctrl.go:28: DEBUG cmd args: [/data/local/tmp/minicap -S -P 1080x1920@800x800/0]
2020/02/16 17:29:55 httpserver.go:1012: minicap read error, try to read again
2020/02/16 17:29:55 httpserver.go:1012: minicap read error, try to read again
2020/02/16 17:29:55 httpserver.go:996: dial @minicap err: dial unix @minicap: connect: connection refused, wait 0.5s
2020/02/16 17:29:55 cmdctrl.go:28: DEBUG program finished
2020/02/16 17:29:55 cmdctrl.go:28: DEBUG Args: [/data/local/tmp/minicap -S -P 1080x1920@800x800/0]
2020/02/16 17:29:55 cmdctrl.go:28: DEBUG start args: [/data/local/tmp/minicap -S -P 1080x1920@800x800/0], env: [LD_LIBRARY_PATH=/data/local/tmp]
2020/02/16 17:29:55 cmdctrl.go:28: DEBUG program pid: 22649
127.0.0.1 - - [16/Feb/2020:17:29:55 +0800] "GET /info/rotation HTTP/1.1" 200 14
127.0.0.1 - - [16/Feb/2020:17:29:55 +0800] "GET /shell?command=input%20keyevent%20WAKEUP HTTP/1.1" 200 39
2020/02/16 17:30:00 httpserver.go:1039: stream finished
127.0.0.1 - - [16/Feb/2020:17:29:48 +0800] "GET /minicap HTTP/1.1" 200 0
2020/02/16 17:30:01 httpserver.go:1008: transfer closed
2020/02/16 17:34:55 httpserver.go:557: startservice com.github.uiautomator/.Service
2020/02/16 17:36:23 httpserver.go:400: stop all service
2020/02/16 17:36:23 cmdctrl.go:28: DEBUG program finished
2020/02/16 17:36:23 httpserver.go:402: service stopped
127.0.0.1 - - [16/Feb/2020:17:36:23 +0800] "GET /stop HTTP/1.1" 200 9
2020/02/16 17:36:23 [Info] main.go:684 server quit: http: Server closed
2020/02/16 17:36:23 [Info] main.go:540 run atx-agent in background
2020/02/16 17:36:23 [Info] main.go:548 - - - - - - - - - - - - - - -
2020/02/16 17:36:23 [Info] main.go:549 daemon started
atx-agent version 0.8.3
Listen on http://192.168.31.17:7912
2020/02/16 17:36:24 cmdctrl.go:28: DEBUG ArgsFunc error: fork/exec /system/bin/pm: exec format error
2020/02/16 17:36:24 cmdctrl.go:28: DEBUG program finished

熊雅慧 回复

看样子是有个bug,刚修复了下,更新uiautomator2到2.5.5 然后重新启动下,应该就没问题了

codeskyblue 回复

还是没有解决,日志如下:

熊雅慧 回复

uiautomator2 升级到 2.5.6 试试,这次应该可以了

Author only
Author only
熊雅慧 回复

加我qq吧 646890627 备注下你的昵称就好

mac平台在终端以后台方式运行atxserver2-android-provider:
nohup python3 main.py --server localhost:4000 > myout.log 2>&1 &
[1] 80146

查看进程信息:
ps -ef | grep 80146
501 80146 80081 0 10:54下午 ttys002 0:00.67 python3 main.py --server localhost:4000
501 80147 80146 0 10:54下午 ttys002 0:00.08 node tcpproxy.js 20020 localhost 20015
501 80148 80146 0 10:54下午 ttys002 0:00.07 node tcpproxy.js 20021 localhost 20017
501 80149 80146 0 10:54下午 ttys002 0:00.26 node node_modules/adbkit/bin/adbkit usb-device-to-tcp -p 20022 GDB6R19A14000888

浏览器可以正常使用设备,关闭浏览器,关闭终端,重新打开浏览器,显示”设备屏幕同步中断”,再查看进程信息:
ps -ef | grep 80146
501 80146 1 0 10:54下午 ?? 0:00.76 python3 main.py --server localhost:4000
501 80190 80146 0 10:56下午 ?? 0:00.00 (node)
501 80191 80146 0 10:56下午 ?? 0:00.00 (node)
501 80192 80146 0 10:56下午 ?? 0:00.00 (node)

node创建的子进程启动不了了,是什么原因呢?

我现在想把minicap干掉,换成scrcpy,请问有什么思路吗

安装 atxserver2-android-provider依赖时,报错如下:
1、在atxserver2-android-provider目录下执行npm install,依赖安装一半报错:

----------> 【基于以上问题,修改了package.json,并将在文件中增加字段 "license": "MIT","repository": { "type": "","url": "" } 】
----------> 修改后再次执行npm install, 依赖安装依然失败(提示:安装了12个包),过程短暂停留在如下界面后安装失败:

2、在依赖未安装成功的情况下,执行:pip3 install -r requirements.txt
3、在atxserver2-android-provider目录下 执行 python3 main.py --server 127.0.0.1:4000,报错如下图:

【续一】经群友提示加入参数 python3 main.py --atx-agengt-version --server 127.0.0.1:4000,启动后报tornado的错。如下:

【续二】问题解决! 原因是我没有晚饭(因为吃了一顿晚饭回来,就能运行起来了;😄)

天哪好难,终于搜到这个贴,我要怎么样能更简单的实现ios系统投屏到电脑远程,有没有大神指点。

熊雅慧 回复

同学,你的问题解决了么?我也遇到了同样的问题,求交流

可以购买这个程序吗?好难

bingzhou 回复

后面更新了作者的uiautomator2 到 2.5.6 ,试了七八个手机都没有问题了,只有我自己的一台旧手机还有问题,暂时忽略不计了

感觉wifi有个大的弊端,针对借用手机进行ran侧的测试的场景,会进行大量的接入飞行的操作,而对于非root的手机很难达到只是进行入网的操作,而不影响wifi的一直连接,因此这块是个弊端。望楼主有好的解决方案

stride83 回复

可以usb连接哈

codeskyblue 回复

usb连接,性能上会有很大的降低吧?主要是看到你这个写着80个手机进行控制很轻松,因为我们目前是直接基于appium的server进行多进程并行,很容易就达到瓶颈了,不过目前大致分析下来可能是usb串行总线这块的限制。

stride83 回复

我现在是多用几台机器连手机

前后端分离的话如何修改前端页面呢?

求大佬搭救.
比如连了3台iphone, 其中1台重启, 就会有概率出现这个报错. 然后另外两台也都在atxserver2里下线了, 但那两台WDA都正常运行的, 用转发的端口也能访问,但就是在atxserver2上不显示了,重启的手机一会也会自动连接成功,但也是在atxserver2上不显示了,尝试了各种方法是在没辙,求大佬搭救 T_T

[D 200331 01:31:59 heartbeat:95] WS read message: None
[W 200331 01:31:59 heartbeat:98] WS closed

ERROR:tornado.application:Exception in callback functools.partial(>, exception=WebSocketClosedError()>)
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/tornado/websocket.py", line 1098, in write_message
fut = self._write_frame(True, opcode, message, flags=flags)
File "/usr/local/lib/python3.7/site-packages/tornado/websocket.py", line 1075, in _write_frame
return self.stream.write(frame)
File "/usr/local/lib/python3.7/site-packages/tornado/iostream.py", line 546, in write
self._check_closed()
File "/usr/local/lib/python3.7/site-packages/tornado/iostream.py", line 1008, in _check_closed
raise StreamClosedError(real_error=self.error)
tornado.iostream.StreamClosedError: Stream is closed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/tornado/ioloop.py", line 743, in _run_callback
ret = callback()
File "/usr/local/lib/python3.7/site-packages/tornado/ioloop.py", line 767, in _discard_future_result
future.result()
File "/Users/jake/atxserver2-ios-provider/heartbeat.py", line 87, in _drain_queue
await self._ws.write_message(message)
File "/Users/jake/atxserver2-ios-provider/heartbeat.py", line 37, in write_message
return await super().write_message(message)
File "/usr/local/lib/python3.7/site-packages/tornado/websocket.py", line 1506, in write_message
return self.protocol.write_message(message, binary=binary)
File "/usr/local/lib/python3.7/site-packages/tornado/websocket.py", line 1100, in write_message
raise WebSocketClosedError()
tornado.websocket.WebSocketClosedError

枫叶 回复

你这个问题是怎么解决的 我也遇到了

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up