Skip to main content

懒人, EC, 其它语言调用

我们只需要掌握java的反射调用, 就能轻松调用Yyds.Auto的功能 调用这个函数, 即可调用到引擎的所有功能

uiautomator.ExportHandle
public String http(String uri, Map<String, String> params) {

}

更多的接口用法, 以及封装参考auto.js

在js中调用

DEMO:在easyclick中调用Yyds.Auto
// 动态加载插件类, 只需要加载一次作为全局变量使用
// 以下代码的作用是动态调用其它apk的java方法
let ext_apk_path = shell.execCommand("pm path com.yyds.auto").replace("package:", "");
yydsCls = java.lang.Class.forName("dalvik.system.DexClassLoader");
c1 = java.lang.Class.forName("java.lang.String");
c2 = java.lang.Class.forName("java.lang.ClassLoader");
c3 = java.lang.Class.forName("java.util.HashMap")
console.log(yydsCls)
yydsDex = yydsCls.getConstructor(
c1,c1,c1,c2
).newInstance(new java.lang.String(ext_apk_path), context.getCacheDir().toString(), context.getCacheDir().toString(),
context.getClassLoader());
yydsHandle = yydsDex.loadClass("uiautomator.ExportHandle");
yydsMethod = yydsHandle.getMethod("http", c1, c3)

function yydsCall(method, params_js) {
if (typeof params_js == "undefined") params_js = {};
let params_map = new java.util.HashMap();
for (var k in params_js) {
params_map[k] = new java.lang.String(params_js[k])
}
return yydsMethod.invoke(null, "/" + method, params_map);
}

// 开始调用
console.log(yydsCall("ping")) // 输出 pong

console.log(yydsCall("shell", {cmd: "date"})) // 输出 Mon Feb 20 18:56:05 CST 2023

// 保存截图到/sdcard/2.png
console.log(yydsCall("screenshot", {path: "/sdcard/2.png"}))

在java中调用

java调用
try {
Context appContext = contextInstace.createPackageContext("com.yyds.auto", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
// 获取目标app的路径
String apkPath = appContext.getPackageCodePath();

// 加载目标APK的ClassLoader
ClassLoader targetClassLoader = new PathClassLoader("/path/to/your/other.apk", ClassLoader.getSystemClassLoader());

// 获取ExportHandle类
Class<?> exportHandleClass = Class.forName("uiautomator.ExportHandle", true, targetClassLoader);

// 创建ExportHandle实例
Object exportHandleInstance = exportHandleClass.newInstance();

// 获取http方法
Method httpMethod = exportHandleClass.getDeclaredMethod("http", String.class, Map.class);

// 设置访问权限
httpMethod.setAccessible(true);

// 准备参数
String uri = "/ping";
Map<String, String> params = new HashMap<>();
// 添加参数到params

// 调用http方法
String result = (String) httpMethod.invoke(exportHandleInstance, uri, params);

// 处理返回结果
// ...

} catch (ClassNotFoundException e) {
// 处理类未找到异常
} catch (InstantiationException e) {
// 处理实例化异常
} catch (IllegalAccessException e) {
// 处理非法访问异常
} catch (NoSuchMethodException e) {
// 处理方法不存在异常
} catch (InvocationTargetException e) {
// 处理反射调用目标方法抛出的异常
}

在shell中调用或者http调用

无论你是使用易语言还是python, auto.js, lua, 程序在手机运行还是在电脑运行, 都可以使用http与引擎进行通讯, 进行自动化操作

(需要Yyds.Auto在后台运行)

// 调用方法如下
content call --uri content://yyds.boot --method toast --arg \"%s\"

# 如果有curl, 可以使用curl直接请求自动化引擎与脚本进行引擎

# 查看脚本执行引擎运行状态
curl http://手机IP:61140

# 与自动化引擎进行通讯

# 操作例子: 进行点击 更多函数请查看官方示例工程
curl -X POST -d '{"x":677, "y":1773 }' http://127.0.0.1:61140/api/touch

使用python调用

其它语言自行举一反三

import requests

print(requests.post("http://192.168.2.192:61140/api/touch", json={"x": 933, "y": 1410}))