English | 简体中文
这是 MaaFramework 的Go语言绑定,为Go开发者提供了一种简单而有效的方式,在他们的Go应用程序中使用MaaFramework的功能。
无需 Cgo!
要安装MaaFramework Go绑定,请在终端中运行以下命令:
go get github.com/MaaXYZ/maa-framework-go
此外,请下载MaaFramework的Release 包,以获取必要的动态库文件。
要在您的Go项目中使用MaaFramework,请像导入其他Go包一样导入此包:
import "github.com/MaaXYZ/maa-framework-go"
然后,您可以使用MaaFramework提供的功能。有关详细用法,请参阅仓库中提供的 文档 和 示例。
注意: 使用 maa-framework-go 构建的程序依赖于 MaaFramework 的动态库运行。请确保以下条件之一满足:
- 程序的工作目录包含 MaaFramework 的动态库。
- 设置了指向动态库的环境变量(如 LD_LIBRARY_PATH 或 PATH)。
否则,程序可能无法正确运行。
目前没有太多详细的文档。请参阅源代码,并与MaaFramework项目中的接口进行比较,以了解如何使用这些绑定。我们正在积极添加更多注释和文档到源代码中。
以下是一些可能对您有帮助的MaaFramework文档:
有关详细信息,请参阅 quick-start。
以下是一个基本示例,帮助您快速入门:
package main
import (
"fmt"
"github.com/MaaXYZ/maa-framework-go"
"os"
)
func main() {
toolkit := maa.NewToolkit()
toolkit.ConfigInitOption("./", "{}")
tasker := maa.NewTasker(nil)
defer tasker.Destroy()
device := toolkit.FindAdbDevices()[0]
ctrl := maa.NewAdbController(
device.AdbPath,
device.Address,
device.ScreencapMethod,
device.InputMethod,
device.Config,
"path/to/MaaAgentBinary",
nil,
)
defer ctrl.Destroy()
ctrl.PostConnect().Wait()
tasker.BindController(ctrl)
res := maa.NewResource(nil)
defer res.Destroy()
res.PostPath("./resource").Wait()
tasker.BindResource(res)
if tasker.Initialized() {
fmt.Println("Failed to init MAA.")
os.Exit(1)
}
detail := tasker.PostPipeline("Startup").Wait().GetDetail()
fmt.Println(detail)
}
有关详细信息,请参阅 custom-recognition。
以下是一个实现自定义识别器的基本示例:
package main
import (
"fmt"
"github.com/MaaXYZ/maa-framework-go"
"os"
)
func main() {
toolkit := maa.NewToolkit()
toolkit.ConfigInitOption("./", "{}")
tasker := maa.NewTasker(nil)
defer tasker.Destroy()
device := toolkit.FindAdbDevices()[0]
ctrl := maa.NewAdbController(
device.AdbPath,
device.Address,
device.ScreencapMethod,
device.InputMethod,
device.Config,
"path/to/MaaAgentBinary",
nil,
)
defer ctrl.Destroy()
ctrl.PostConnect().Wait()
tasker.BindController(ctrl)
res := maa.NewResource(nil)
defer res.Destroy()
res.PostPath("./resource").Wait()
tasker.BindResource(res)
if tasker.Initialized() {
fmt.Println("Failed to init MAA.")
os.Exit(1)
}
res.RegisterCustomRecognition("MyRec", &MyRec{})
detail := tasker.PostPipeline("Startup").Wait().GetDetail()
fmt.Println(detail)
}
type MyRec struct{}
func (r *MyRec) Run(ctx *maa.Context, arg *maa.CustomRecognitionArg) (maa.CustomRecognitionResult, bool) {
ctx.RunRecognition("MyCustomOCR", arg.Img, maa.J{
"MyCustomOCR": maa.J{
"roi": []int{100, 100, 200, 300},
},
})
ctx.OverridePipeline(maa.J{
"MyCustomOCR": maa.J{
"roi": []int{1, 1, 114, 514},
},
})
newContext := ctx.Clone()
newContext.OverridePipeline(maa.J{
"MyCustomOCR": maa.J{
"roi": []int{100, 200, 300, 400},
},
})
newContext.RunPipeline("MyCustomOCR", arg.Img)
clickJob := ctx.GetTasker().GetController().PostClick(10, 20)
clickJob.Wait()
ctx.OverrideNext(arg.CurrentTaskName, []string{"TaskA", "TaskB"})
return maa.CustomRecognitionResult{
Box: maa.Rect{0, 0, 100, 100},
Detail: "Hello World!",
}, true
}
有关详细信息,请参阅 custom-action。
以下是一个实现自定义动作的基本示例:
package main
import (
"fmt"
"github.com/MaaXYZ/maa-framework-go"
"os"
)
func main() {
toolkit := maa.NewToolkit()
toolkit.ConfigInitOption("./", "{}")
tasker := maa.NewTasker(nil)
defer tasker.Destroy()
device := toolkit.FindAdbDevices()[0]
ctrl := maa.NewAdbController(
device.AdbPath,
device.Address,
device.ScreencapMethod,
device.InputMethod,
device.Config,
"path/to/MaaAgentBinary",
nil,
)
defer ctrl.Destroy()
ctrl.PostConnect().Wait()
tasker.BindController(ctrl)
res := maa.NewResource(nil)
defer res.Destroy()
res.PostPath("./resource").Wait()
tasker.BindResource(res)
if tasker.Initialized() {
fmt.Println("Failed to init MAA.")
os.Exit(1)
}
res.RegisterCustomAction("MyAct", &MyAct{})
detail := tasker.PostPipeline("Startup").Wait().GetDetail()
fmt.Println(detail)
}
type MyAct struct{}
func (a *MyAct) Run(_ *maa.Context, _ *maa.CustomActionArg) bool {
return true
}
有关详细信息,请参阅 pi-cli。
以下是一个使用PI CLI的基本示例:
package main
import (
"github.com/MaaXYZ/maa-framework-go"
)
func main() {
toolkit := maa.NewToolkit()
toolkit.RegisterPICustomAction(0, "MyAct", &MyAct{})
toolkit.RunCli(0, "./resource", "./", false, nil)
}
type MyAct struct{}
func (m MyAct) Run(ctx *maa.Context, arg *maa.CustomActionArg) bool {
ctx.OverrideNext(arg.CurrentTaskName, []string{"TaskA", "TaskB"})
img := ctx.GetTasker().GetController().CacheImage()
ctx.GetTasker().GetController().PostClick(100, 100).Wait()
ctx.RunRecognition("Cat", img, maa.J{
"recognition": "OCR",
"expected": "cat",
})
return true
}
我们欢迎对MaaFramework Go绑定的贡献。如果您发现了bug或有功能请求,请在GitHub仓库上打开一个issue。如果您想贡献代码,欢迎fork仓库并提交pull request。
本项目使用 LGPL-3.0 许可证。详细信息请参阅 LICENSE 文件。
QQ 群: 595990173