我想集成一个新功能,需要调用js,可以通过调用其他网站的js集成到hamibot运行吗?有什么方法?有例子吗?REST API 可以用不?
http://123/com/1.js 这样的js,如何调用运行? 在1.js要不要有特别的写法?
hamibot有没有这种调用方法?
runtime.loadDex('fishhid.apk')
importClass(com.fishhidpro.hid.HidBridge);
远程下载的文件,是否能指定存储目录?
回答
是的,你可以通过 REST API 集成外部 JavaScript 功能到 Hamibot 中运行。具体方法如下:
调用外部网站 JS 的方法:
- 使用
http.get()或http.request()获取外部 JS 文件内容 - 通过
eval()函数执行获取到的 JS 代码(注意安全性风险) - 或者将代码保存为本地文件再用
require()导入
REST API 使用示例:
你可以通过 Hamibot 的 API 触发脚本执行。例如,用以下代码通过 API 运行指定脚本:
// 文档地址 https://docs.hamibot.com/
http.request('https://api.hamibot.com/v1/scripts/脚本_id/run', {
method: 'POST',
contentType: 'application/json',
headers: {
authorization: '你的令牌(hmp 开头)',
},
body: JSON.stringify({
devices: [{ _id: '设备ID', name: '设备名' }],
}),
});
注意事项:
- 确保你有权限访问目标 JS 资源(避免跨域问题)
- 评估执行外部代码的安全风险
- API 调用需要有效的个人访问令牌(hmp 开头)
如果你需要更具体的集成示例,请提供你想调用的外部 JS 功能的具体信息。
补充回答 1
在Hamibot中运行远程JS文件,你需要先下载该文件到本地存储,然后使用engines.execScriptFile()执行。1.js不需要特殊写法,但要注意JavaScript兼容性。
具体步骤如下:
// 文档地址 https://docs.hamibot.com/
// 下载远程JS文件到本地
var url = "http://123/com/1.js";
var savePath = "/sdcard/script.js";
// 使用http.get获取文件内容
var res = http.get(url);
if (res.statusCode == 200) {
// 将文件内容写入本地
files.writeBytes(savePath, res.body.bytes());
// 执行下载的脚本文件
engines.execScriptFile(savePath);
} else {
toast("下载失败,状态码: " + res.statusCode);
}
关于1.js的写法:
- 不需要特殊的前缀或后缀
- 使用标准的JavaScript语法
- 避免使用ES6+特性(箭头函数、let/const、模板字符串等)
- 可以使用Hamibot提供的API(如auto、device、app等)
如果你需要定期从远程更新并执行脚本,可以结合定时任务来实现自动化更新。
补充回答 2
Hamibot 目前不支持 runtime.loadDex() 方法,无法直接加载外部的 APK 文件作为 Dex 库并使用 importClass 导入类。
关于远程下载文件,Hamibot 提供了 downloadManager.download() 方法,可以指定存储目录。具体用法如下:
// 文档地址 https://docs.hamibot.com/
var url = 'https://example.com/file.txt';
var dirPath = '/sdcard/Download/'; // 指定存储目录
var fileName = 'myfile.txt'; // 指定文件名
var result = downloadManager.download(url, dirPath, fileName);
if (result) {
toast('下载成功');
} else {
toast('下载失败');
}
注意:dirPath 参数需要传入有效的目录路径,且应用需要有该目录的写入权限。
如果你需要实现 HID 相关功能,建议查看 Hamibot 官方文档中是否提供了相关的内置模块或 API。