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

codeskyblue · 2019年04月30日 · 最后由 翻滚的豆子 回复于 2022年02月14日 · 22494 次阅读
本帖已被设为精华帖!

前言

在一年前写过一篇安卓设备集群管理 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,然后重新运行即可。

其他问题欢迎留言

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

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

楼主 V5,前排占楼

思寒_seveniruby 将本帖设为了精华贴 05月02日 08:24
剪烛 回复

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

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

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

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

atxserver1 怎么设计成 atxserver2 呢?

剪烛 回复

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

群主是狗 回复

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

剪烛 回复

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

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

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

卡农Lucas 回复

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

0x88 回复

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

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

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

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

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

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

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

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

怒赞啊!!!!

楼主牛逼

现在是不是不支持 wifi

蓝眼墨 回复

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

蓝眼墨 回复

额,难道用 wifi 可以解决?

蓝眼墨 回复

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

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

支持楼主 👍

0x88 回复

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

剪烛 回复

wifi 连接就不用 打开 usb 调试

蓝眼墨 回复

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

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

ltyd5788 回复

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

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

枫叶 回复

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

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

赞一个

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

啵板 回复

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

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

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

0x88 回复

确实有点反人类

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

codeskyblue 回复

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

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

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

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

luo000luo123 回复

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

蓝眼墨 回复

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

仅楼主可见
240581580 回复

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

Sutune 回复

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

Sutune 回复

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

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

codeskyblue 回复

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

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

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

stronger 回复

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

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

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 回复

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

Ann0309 回复

bug

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

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

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

simple [精彩盘点] TesterHome 社区 2019 年 度精华帖 中提及了此贴 12月24日 22:32

支持模拟器吗?
还有输入框一直是 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 设备的话,还需要准备一台苹果电脑吗?

熊雅慧 回复

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

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

熊雅慧 回复

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

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

熊雅慧 回复

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

codeskyblue 回复

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

熊雅慧 回复

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

codeskyblue 回复

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

仅楼主可见
仅楼主可见

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 ,试了七八个手机都没有问题了,只有我自己的一台旧手机还有问题,暂时忽略不计了

stride83 回复

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

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

stride83 回复

可以 usb 连接哈

codeskyblue 回复

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

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

求大佬搭救.
比如连了 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

枫叶 回复

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


RethinkDB 启动是 ok 的,但是运行 py3 main.py 时报错

hello 回复

换成 python3.7 应该就 ok 了

codeskyblue 回复

多谢大哥

设备停用后,为什么会一直处于释放中?

不二 atx2 小白改造之旅一 (弹窗) 中提及了此贴 04月24日 15:02

如何 通过 WiFi 连接?有具体的教程么?
目前通过 adb connect 192.168.1.100 连接手机后
再执行再运行 atxserver2-android-provider,会跳过远程设备

如果是插着 USB,运行 atxserver2-android-provider 是可以连上,拔掉之后 就不行了


大佬,我在一台电脑上部署完之后,用另一台电脑能进入 atx,但是不能控制设备,屏幕是灰的。求帮忙

codeskyblue 回复

帮忙看下,我把所有文件权限都改成 777 了,还是提示某些无权限,谢谢!!

秦岭 回复

你换个 linux 试试

一直起不来,有谁遇到过吗

我遇到一个新问题:atxserver2 安装完成,连接手机后,可以显示手机,但手机桌面不能显示,当用鼠标点击桌面和滑动时 ,真实手机是有动作的。 手机系统 小米 mix2 系统为 android 9 ,小米系统为 11.0.2 浏览器为 Chrome 。另外的一台手机 华为 android10 是 ok 的。 我看了后台服务没有报错信息。

codeskyblue 回复

大佬提了个 SSO 的 PR, 有空看下啊 https://github.com/openatx/atxserver2/pull/58

Trevor Wang 回复

hi,我在 git 上拉的代码,按理说是最新的

还有其他地方有新的代码吗

谢谢!!!

@xsz979 哥们你的问题解决了吗?

秦岭 回复

就是 git 上 你看最后修改记录是改那个执行权限的 我 docker 跑起来么有问题


我的部署好后 运行报错 楼主能帮忙排下原因不

请问下 adb -s id shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -P 宽 1x 高 1@ 宽 2x 高 2/方向 -S,这里的宽 1 除以宽 2(或高 1 除以高 2)是否一定要整数倍的才可以呢,或者你不是整数倍,但是他手机还是会自动给你搞成整数倍呢?

试了几台安卓 10 的手机,页面能画面,但是无法点击操作,不知道啥原因。

将 uiautomator2 版本回退为 2.5.6 安卓 10 可以使用。用最新的 uiautomator2 版本 2.15.0 不能正常使用

请问下,屏幕是会灰的是因为 minicap 的问题吗?

8 成是

也分享个我之前遇到的情况及解决方案,供参考:

当机器连接比较久的时候,发现会由于打开控制界面自动创建输入法的 websocket 通讯,导致 adb 连接整个卡住(运行 adb shell 都卡在那里),影响到屏幕会没有加载的情况。(特别明显的界面特征是,想获取设备的应用列表都获取不到)

解决方案是去掉了自动创建输入法通讯这个代码,要输入的时候手动点【修复输入法】来手动创建。

仅楼主可见
剪烛 回复

笑死,平安不给接 USB😂

0x88 回复

至今如此,但是现在 mac 是可以的

cloudwind 回复

2.5.6 安卓 10,可以控制手机画面,但是 WEB 上的画面的禁止的,不会实时刷新,而最新版的 U2,WEB 画面是实时的,手机是无法控制的


我这执行 docker-compose up 提示如图问题,求问怎么解决

iOS 底层是用了 WDA,是不是只能支持 iOS12+ 的系统?

38楼 已删除
匿名 #44 · 2019年05月08日

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

49楼 已删除
啵板 回复

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

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

72楼 已删除
71楼 已删除
秦岭 回复

更新下代码 貌似修复了这个问题

先装起来试试

感谢!非常好用,弄了 Ubuntu 跑 atxserver2,很稳定好用。在 windows 下开发代码同步到 Ubuntu 上运行。

【请教一个小问题:电脑上没法输入,一直显示 Input disabled?怎么解决】

点击修复输入法也没用,然后手机上默认输入法已经切换 FastInputIME 了,通过 USB 连接的,VIVO,MI 手机

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册