logo
1
0
WeChat Login
wallbreaker<wallbreaker8@users.noreply.gitcode.com>
refactor: merge container files into container.go

魔云腾 Go SDK

Go Version License

魔云腾设备管理 Go SDK,提供设备发现、安卓云机管理、应用管理、文件管理等功能。

功能特性

  • 🔍 设备发现 - 自动搜索局域网内的魔云腾设备
  • 📱 安卓云机管理 - 创建、启动、停止、删除安卓云机
  • 📦 应用管理 - 列出、启用/禁用、卸载、导出应用
  • 📁 文件管理 - 浏览、上传、下载文件
  • 🖥️ 交互式 CLI - 提供类 Shell 的命令行交互体验
  • 🤖 安卓 API - 34 个接口(截图、点击、剪贴板、代理、摄像头等)

安装

go get cnb.cool/openmyt/myt-sdk-golang

快速开始

1. 搜索设备

package main

import (
	"context"
	"fmt"

	"cnb.cool/openmyt/myt-sdk-golang/common"
)

func main() {
	ctx := context.Background()
	
	// 搜索局域网设备(超时3秒)
	devices, err := common.Search(ctx, 3)
	if err != nil {
		fmt.Printf("搜索失败: %v\n", err)
		return
	}
	
	for _, d := range devices {
		fmt.Printf("设备: IP=%s, ID=%s, Type=%s\n", d.IP, d.ID, d.Type)
	}
}

2. 管理安卓云机

package main

import (
	"context"
	"fmt"

	"cnb.cool/openmyt/myt-sdk-golang/device"
)

func main() {
	ctx := context.Background()
	
	// 创建设备控制器
	ctrl := device.New("192.168.1.100")
	
	// 获取设备内的安卓云机列表
	res, err := ctrl.ListAndroid(ctx)
	if err != nil {
		fmt.Printf("获取失败: %v\n", err)
		return
	}
	
	for _, a := range res.Androids {
		fmt.Printf("云机: %s, 状态: %s, IP: %s\n", a.Name, a.Status, a.Ip)
	}
}

3. 应用管理 (pkg)

package main

import (
	"context"
	"fmt"

	"cnb.cool/openmyt/myt-sdk-golang/pkg"
)

func main() {
	ctx := context.Background()
	
	// 创建客户端(设备IP + 安卓云机ID)
	client := pkg.New("192.168.1.100", "your-android-id")
	
	// 列出用户应用
	res, err := client.ListPackage(ctx, &pkg.ListPackageReq{Type: pkg.PackageTypeUser})
	if err != nil {
		fmt.Printf("Error: %v\n", err)
		return
	}
	
	for _, p := range res.Packages {
		fmt.Printf("应用: %s, 启用: %v\n", p.PackageName, p.Enabled)
	}
	
	// 禁用应用
	_, err = client.SetEnabled(ctx, &pkg.SetEnabledReq{
		PackageName: "com.example.app",
		Enabled:     false,
	})
	
	if err != nil {
		fmt.Printf("禁用失败: %v\n", err)
	}
	
	// 导出应用 APK
	exportRes, err := client.Export(ctx, &pkg.ExportReq{
		PackageName: "com.example.app",
	})
	
	if err != nil {
		fmt.Printf("导出失败: %v\n", err)
		return
	}
	fmt.Printf("APK路径: %v\n", exportRes.APKPaths)
}

4. 安卓云机 API (android)

package main

import (
	"context"
	"fmt"

	"cnb.cool/openmyt/myt-sdk-golang/android"
)

func main() {
	ctx := context.Background()
	
	// 创建安卓云机控制器
	ctrl := android.New("192.168.1.100", "device-id", 9082)
	
	// 截图
	img, err := ctrl.Snapshot(ctx, 80)
	if err != nil {
		fmt.Printf("截图失败: %v\n", err)
		return
	}
	fmt.Printf("截图大小: %d bytes\n", len(img))
	
	// 点击
	err = ctrl.Tap(ctx, 500, 800)
	if err != nil {
		fmt.Printf("点击失败: %v\n", err)
	}
	
	// 设置剪贴板
	err = ctrl.SetClipboard(ctx, "hello world")
	if err != nil {
		fmt.Printf("设置剪贴板失败: %v\n", err)
	}
	
	// 获取剪贴板
	clipboard, err := ctrl.GetClipboard(ctx)
	if err != nil {
		fmt.Printf("获取剪贴板失败: %v\n", err)
		return
	}
	fmt.Printf("剪贴板内容: %s\n", clipboard.Text)
	
	// 设置代理
	err = ctrl.SetProxy(ctx, &android.SetProxyReq{
		IP:   "192.168.1.100",
		Port: 8080,
		User: "test",
		Pwd:  "123456",
		Type: 2,
	})
	if err != nil {
		fmt.Printf("设置代理失败: %v\n", err)
	}
	
	// 查询代理状态
	status, err := ctrl.GetProxyStatus(ctx)
	if err != nil {
		fmt.Printf("查询代理状态失败: %v\n", err)
		return
	}
	fmt.Printf("代理状态: %d (%s)\n", status.Status, status.StatusText)
}

5. 文件管理 (file)

package main

import (
	"context"
	"fmt"

	"cnb.cool/openmyt/myt-sdk-golang/file"
)

func main() {
	ctx := context.Background()
	
	// 创建文件管理客户端
	client := file.New("192.168.1.100", "android-name")
	
	// 列出文件
	res, err := client.List(ctx, &file.ListReq{Path: "/sdcard"})
	if err != nil {
		fmt.Printf("Error: %v\n", err)
		return
	}
	
	for _, f := range res.Files {
		fmt.Printf("%s %s %s\n", f.Name, f.Size, f.Time)
	}
}

示例代码

pkg 示例

# 列出应用
go run sample/pkg/main.go -ip 10.10.11.3 -id <安卓云机ID>

项目结构

.
├── api/
│   ├── v1/          # API V1 接口(设备 81 端口)
│   │   ├── api.go           # 接口定义(DeviceV1)
│   │   ├── client.go        # 构造函数
│   │   ├── impl.go          # 实现
│   │   └── list_test.go     # 测试
│   └── v3/          # API V3 接口(设备 8000 端口)
│       ├── api.go           # 接口定义(DeviceV3)
│       ├── client.go        # 构造函数
│       ├── impl.go          # 实现
│       ├── *_container.go   # 容器操作
│       └── *_test.go
├── android/         # 安卓云机 API 接口(34 个接口)
│   ├── api.go           # 接口定义和请求/响应结构体
│   ├── controller.go    # Controller 结构体、构造函数、HTTP 辅助方法
│   ├── docmd.go         # DoCmd 执行命令
│   ├── download.go      # Download 下载文件、GetClipboard/SetClipboard 剪贴板
│   ├── proxy.go         # GetProxyStatus/SetProxy/StopProxy/SetProxyDomains 代理相关
│   ├── sms.go           # ReceiveSMS 接收短信、UploadKeybox 上传证书
│   ├── adb.go           # GetADBStatus/EnableADBRoot/DisableADBRoot ADB 权限
│   ├── backup.go        # BackupApp/RestoreApp 应用备份恢复
│   ├── camera.go        # StartCamera/StopCamera/SetCameraSource 摄像头
│   ├── background.go    # GetBackgroundApps/AddBackgroundApp/RemoveBackgroundApp/UpdateBackgroundApps 后台保活
│   ├── keyshield.go     # EnableKeyShield/DisableKeyShield 按键屏蔽
│   ├── install.go       # InstallApks 批量安装
│   ├── version.go       # QueryVersion 版本查询
│   ├── snapshot.go      # Snapshot 截图
│   ├── click.go         # AutoClick/Tap/TouchDown/TouchUp/TouchMove/KeyPress 自动点击
│   ├── upload.go        # UploadFile/UploadFileFromURL 文件上传
│   ├── container.go     # GetContainerInfo 容器信息
│   ├── calllog.go       # AddCallLog 通话记录
│   ├── location.go      # RefreshLocation 刷新定位
│   ├── googleid.go      # SetGoogleID/GenerateGoogleID 谷歌 ID
│   ├── module.go        # CheckModule/InstallModule/UninstallModule 模块管理
│   ├── contact.go       # AddContact 添加联系人
│   ├── root.go          # GetRootApps/SetRootApp Root 授权
│   ├── bootstart.go     # GetBootStartApps/SetBootStartApps 开机启动
│   └── locale.go        # SetIPLocation/SetLanguageCountry 语言定位
├── common/          # 公共工具
│   ├── search.go    # 设备发现(UDP 广播)
│   └── http.go      # HTTP 工具
├── device/          # 设备管理
│   ├── api.go       # 接口定义(Device, Android)
│   ├── device.go    # 设备控制器实现
│   ├── android/     # 安卓云机控制器实现
│   └── device_test.go
├── pkg/             # 安卓应用管理
│   ├── api.go       # 接口和类型定义
│   ├── controller.go # Controller 实现
│   ├── listpackage.go    # 列出应用
│   ├── cleardata.go      # 清除数据
│   ├── setenabled.go     # 启用/禁用应用
│   ├── uninstall.go       # 卸载应用
│   ├── export.go          # 导出 APK
│   └── *_test.go
├── file/            # 安卓文件管理
│   ├── api.go       # 接口定义
│   ├── controller.go # Controller 实现
│   ├── list.go      # 获取文件列表
│   ├── download.go  # 下载文件
│   ├── upload.go    # 上传文件
│   ├── delete.go    # 删除文件
│   ├── mkdir.go     # 创建目录
│   ├── utils.go     # 工具函数
│   └── utils_test.go
└── sample/cli/     # 交互式 CLI 示例
    └── main.go

核心接口

安卓云机 API (android)

// Android 安卓云机 API 接口
type Android interface {
    // 基础操作
    DoCmd(ctx context.Context, cmdline string) (string, error)
    Download(ctx context.Context, path string) ([]byte, error)
    
    // 剪贴板
    GetClipboard(ctx context.Context) (*ClipboardRes, error)
    SetClipboard(ctx context.Context, text string) error
    
    // 代理
    GetProxyStatus(ctx context.Context) (*ProxyStatusRes, error)
    SetProxy(ctx context.Context, req *SetProxyReq) error
    StopProxy(ctx context.Context) error
    
    // 截图和点击
    Snapshot(ctx context.Context, quality int) ([]byte, error)
    Tap(ctx context.Context, x, y int) error
    KeyPress(ctx context.Context, code int) error
    
    // 摄像头
    StartCamera(ctx context.Context, path string) error
    SetCameraSource(ctx context.Context, req *CameraSourceReq) error
    
    // 更多接口...(共34个)
}

设备管理 (device)

// Device 设备接口
type Device interface {
    ListAndroid(ctx context.Context) (res *ListAndroidRes, err error)
    DoCmd(ctx context.Context, req *DoCmdReq) (res *DoCmdRes, err error)
    GetAndroid(ctx context.Context, id string) (android.Android, error)
    GetAPIPort(ctx context.Context, id string) (int, error)
    GetAndroidName(ctx context.Context, id string) (string, error)
}

// android.Android 安卓云机接口
type Android interface {
    DoCmd(ctx context.Context, cmdline string) (string, error)
}

应用管理 (pkg)

// Pkg 包管理接口
type Pkg interface {
    ListPackage(ctx context.Context, req *ListPackageReq) (res *ListPackageRes, err error)
    ClearData(ctx context.Context, req *ClearDataReq) (res *ClearDataRes, err error)
    SetEnabled(ctx context.Context, req *SetEnabledReq) (res *SetEnabledRes, err error)
    Uninstall(ctx context.Context, req *UninstallReq) (res *UninstallRes, err error)
    Export(ctx context.Context, req *ExportReq) (res *ExportRes, err error)
}

文件管理 (file)

// File 文件管理接口
type File interface {
    List(ctx context.Context, req *ListReq) (res *ListRes, err error)
    Download(ctx context.Context, req *DownloadReq) (data []byte, err error)
    Upload(ctx context.Context, req *UploadReq) (res *UploadRes, err error)
    Delete(ctx context.Context, req *DeleteReq) (res *DeleteRes, err error)
    Mkdir(ctx context.Context, req *MkdirReq) (res *MkdirRes, err error)
}

交互式 CLI

项目包含一个交互式命令行工具,提供类似 Shell 的操作体验。

cd sample/cli
go run main.go

详见 sample/README.mdsample/cli/README.md

API 版本说明

  • V1 - 设备 81 端口接口(安卓云机管理、文件操作)
  • V3 - 设备 8000 端口接口(设备信息、容器列表、镜像管理等)

设备控制器会自动检测设备类型并选择合适的 API 版本。

测试

测试文件中使用占位符代替真实设备信息:

// 请替换为实际的设备IP和ID进行测试
ctrl := device.New("192.168.1.100")
client := pkg.NewV1("192.168.1.100", "your-android-id")

运行测试:

go test ./...

相关链接

许可证

MIT License

About

No description, topics, or website provided.
Language
Go100%