This commit is contained in:
suguo.yao 2023-03-31 08:32:10 +08:00
commit cc1674b255
4 changed files with 87 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
go.sum
totalcontrol-demo
*.exe

10
go.mod Normal file
View File

@ -0,0 +1,10 @@
module myschools.me/suguo/totalcontrol-demo
go 1.19
require github.com/tidwall/gjson v1.14.4
require (
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
)

72
main.go Normal file
View File

@ -0,0 +1,72 @@
package main
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"time"
"github.com/tidwall/gjson"
)
func main() {
// 查找设备
resp, err := http.Get("http://localhost:5037/devices")
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
// 解析设备信息
serial := gjson.GetBytes(body, "devices.0.serial").String()
// 连接设备
resp, err = http.Post(fmt.Sprintf("http://localhost:5037/devices/%s/connect", serial), "", nil)
if err != nil {
panic(err)
}
defer resp.Body.Close()
// 获取应用程序内容页信息
resp, err = http.Post(fmt.Sprintf("http://localhost:5037/devices/%s/activities", serial), "application/json", bytes.NewBufferString(`{"package":"com.example.myapp"}`))
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err = ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
// 解析应用程序内容页信息
layout := gjson.GetBytes(body, "layout")
// 查找关闭按钮位置
var x, y int
layout.ForEach(func(key, value gjson.Result) bool {
if value.Get("class").String() == "android.widget.Button" && value.Get("text").String() == "Close" {
x = int(value.Get("bounds.0").Float())
y = int(value.Get("bounds.1").Float())
return false
}
return true
})
// 发送模拟点击指令
cmd := fmt.Sprintf("input tap %d %d", x, y)
resp, err = http.Post(fmt.Sprintf("http://localhost:5037/devices/%s/shell", serial), "application/octet-stream", bytes.NewBufferString(cmd))
if err != nil {
panic(err)
}
defer resp.Body.Close()
// 等待点击操作完成
time.Sleep(time.Second)
}

2
readme.md Normal file
View File

@ -0,0 +1,2 @@
Total Control 控制演练