HTTP Server runs on android device
运行再Android手机上的http服务器,旨在希望通过Wifi控制手机,完成手机的自动化功能。
从https://github.com/openatx/atx-agent/releases下载以linux_armv7.tar.gz
结尾的二进制包。绝大部分手机都是linux-arm架构的。
解压出atx-agent
文件,然后打开控制台
$ adb push atx-agent /data/local/tmp
$ adb shell chmod 755 /data/local/tmp/atx-agent
# launch atx-agent in daemon mode
$ adb shell /data/local/tmp/atx-agent -d
默认监听的端口是7912。
-
0.0.8
- 支持连接Server获取最新版本,并自动升级
-
0.0.7
- 响应服务端的websocket PING请求
- 如果安装失败,尝试先卸载,然后继续安装
-
0.0.6
- 支持文件上传
-
0.0.5
- 移除每次启动时自动安装minicap, com.github.uiautomator应用
-
0.0.4
- 增加网页版的控制台
- 支持daemon模式运行
-
0.0.3
- 增加安装应用支持
假设手机的地址是$DEVICE_URL (eg: http://10.0.0.1:7912
)
# jpeg format image
$ curl $DEVICE_URL/screenshot
# 使用内置的uiautomator截图
$ curl "$DEVICE_URL/screenshot/0?minicap=false"
$ curl $DEVICE_URL/version
# expect example: 0.0.2
$ curl $DEVICE_URL/info
{
"udid": "bf755cab-ff:ff:ff:ff:ff:ff-SM901",
"serial": "bf755cab",
"brand": "SMARTISAN",
"model": "SM901",
"hwaddr": "ff:ff:ff:ff:ff:ff",
"agentVersion": "dev"
}
$ curl -X POST -d url="http://some-host/some.apk" $DEVICE_URL/install
# expect install id
2
# get install progress
$ curl -X GET $DEVICE_URL/install/1
{
"id": "2",
"titalSize": 770571,
"copiedSize": 770571,
"message": "success installed"
}
$ curl $DEVICE_URL/raw/sdcard/tmp.txt
# 上传到/sdcard目录下 (url以/结尾)
$ curl -F "file=@somefile.txt" $DEVICE_URL/upload/sdcard/
# 上传到/sdcard/tmp.txt
$ curl -F "file=@somefile.txt" $DEVICE_URL/upload/sdcard/tmp.txt
# 离线下载,返回ID
$ curl -F url=https://.... -F filepath=/sdcard/some.txt -F mode=0644 $DEVICE_URL/download
1
# 通过返回的ID查看下载状态
$ curl $DEVICE_URL/download/1
{
"message": "downloading",
"progress": {
"totalSize": 15000,
"copiedSize": 10000
}
}
# 启动
$ curl -X POST $DEVICE_URL/uiautomator
Success
# 停止
$ curl -X DELETE $DEVICE_URL/uiautomator
Success
升级程序从gihub releases里面直接下载,升级完后自动重启
升级到最新版
$ curl 10.0.0.1:7912/upgrade
指定升级的版本
$ curl "10.0.0.1:7912/upgrade?version=0.0.2"
开始录制
$ curl -X POST 10.0.0.1:7912/screenrecord
停止录制并获取录制结果
$ curl -X PUT 10.0.0.1:7912/screenrecord
{
"videos": [
"/sdcard/screenrecords/0.mp4",
"/sdcard/screenrecords/1.mp4"
]
}
之后再下载到本地
$ curl -X GET 10.0.0.1:7912/raw/sdcard/screenrecords/0.mp4
Websocket连接 $DEVICE_URL/minitouch
, 一行行的按照JSON的格式写入
注: 坐标原点始终是手机正放时候的左上角,使用者需要自己处理旋转的变化
请先详细阅读minitouch的Usage文档,再来看下面的部分
-
Touch Down
坐标(X: 50%, Y: 50%), index代表第几个手指,
pressure
是可选的。{"operation": "d", "index": 0, "pX": 0.5, "pY": 0.5, "pressure": 50}
-
Touch Commit
{"operation": "c"}
-
Touch Move
{"operation": "m", "index": 0, "pX": 0.5, "pY": 0.5, "pressure": 50}
-
Touch Up
{"operation": "u", "index": 0}
-
点击x:20%, y:20,滑动到x:40%, y:50%
{"operation": "d", "index": 0, "pX": 0.20, "pY": 0.20, "pressure": 50} {"operation": "c"} {"operation": "m", "index": 0, "pX": 0.40, "pY": 0.50, "pressure": 50} {"operation": "c"} {"operation": "u", "index": 0} {"operation": "c"}
- 目前安全性还是个问题,以后再想办法改善
- 补全接口文档
- 内置的网页adb shell的安全问题
log path /sdcard/atx-agent.log
GOOS=linux GOARCH=arm go build
with html resource buildin
go get github.com/shurcooL/vfsgen
go generate
go build -tags vfs