maa-framework 1.0.0

Rust bindings for MaaFramework
docs.rs failed to build maa-framework-1.0.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: maa-framework-1.4.0

Rust bindings for MaaFramework, a next-generation automation framework based on image recognition.

✨ Features

  • Full API Coverage - Complete bindings for MaaFramework APIs
  • Safe Rust - Memory-safe wrappers with proper lifetime management
  • DLL Auto-Copy - Runtime libraries are copied to target/ automatically

📦 Installation

1. Add Dependency

[dependencies]
maa-framework = "0.6"

2. Download SDK

Download from MaaFramework Releases:

Platform Architecture Download
Windows x86_64 MAA-win-x86_64-*.zip
Windows aarch64 MAA-win-aarch64-*.zip
Linux x86_64 MAA-linux-x86_64-*.zip
Linux aarch64 MAA-linux-aarch64-*.zip
macOS x86_64 MAA-macos-x86_64-*.zip
macOS aarch64 MAA-macos-aarch64-*.zip

3. Extract to Project

my-project/
├── Cargo.toml
├── src/
│   └── main.rs
└── MAA-win-x86_64-v5.4.1/    # Extracted SDK
    ├── bin/
    ├── lib/
    └── include/

Or set MAA_SDK_PATH environment variable.

4. Build & Run

cargo build
cargo run

DLLs are automatically copied to target/debug/ or target/release/.

🚀 Quick Start

use maa_framework::toolkit::Toolkit;
use maa_framework::controller::Controller;
use maa_framework::resource::Resource;
use maa_framework::tasker::Tasker;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    Toolkit::init_option("./", "{}")?;

    let devices = Toolkit::find_adb_devices()?;
    if devices.is_empty() {
        eprintln!("No ADB device found");
        return Ok(());
    }

    let device = &devices[0];
    let controller = Controller::new_adb(
        device.adb_path.to_str().unwrap(),
        &device.address,
        &device.config.to_string(),
        None,
    )?;
    controller.post_connection()?;

    let resource = Resource::new()?;
    resource.post_bundle("./resource")?;

    let tasker = Tasker::new()?;
    tasker.bind_controller(&controller)?;
    tasker.bind_resource(&resource)?;

    if !tasker.inited() {
        eprintln!("Failed to initialize MAA");
        return Ok(());
    }

    tasker.post_task("Startup", "{}")?;
    println!("Task started!");

    Ok(())
}

🔧 Features

Feature Description Default
toolkit Device discovery utilities
adb ADB controller support
win32 Win32 controller (Windows)
custom Custom recognizer/action
image image crate integration

📚 Documentation

📄 License

LGPL-3.0 - see LICENSE