回答
在 Hamibot 中使用 Shell 命令
Hamibot 提供了多种方式来执行 Shell 命令,主要用于与 Android 系统进行底层交互。以下是详细的使用方法和注意事项。
1. 一次性执行单条命令(推荐使用 shell()
函数)
适用于仅需执行一次命令的场景,每次调用 shell()
都会启动一个新的 Shell 进程并执行命令。
语法:
var result = shell(cmd, root);
cmd
:要执行的命令(字符串)。root
:是否以 root 权限运行,默认为false
。
返回值:
返回一个对象,包含以下属性:
code
:返回码,执行成功为0
,失败为非0
。result
:命令的标准输出(stdout)。error
:命令的错误输出(stderr)。
示例:
// 强制停止微信
var result = shell("am force-stop com.tencent.mm", true);
log(result);
if (result.code === 0) {
toast("执行成功");
} else {
toast("执行失败!请查看错误信息:" + result.error);
}
2. 多次执行命令(推荐使用 Shell
对象)
适用于需要多次执行命令的场景,通过 Shell
对象可以复用同一个 Shell 进程,提高效率。
语法:
var sh = new Shell(root); // 创建 Shell 对象
sh.exec(cmd); // 执行命令
sh.exit(); // 退出 Shell 进程
root
:是否以 root 权限运行,默认为false
。exec(cmd)
:执行命令(异步、非阻塞)。exit()
:退出当前 Shell 进程。
示例:
var sh = new Shell(true); // 以 root 权限运行
sh.exec("am force-stop com.tencent.mm"); // 强制停止微信
sh.exit(); // 退出 Shell
3. 监听命令输出(使用 setCallback
)
如果需要实时查看命令执行的输出结果,可以使用 setCallback
方法绑定回调函数。
语法:
sh.setCallback({
onOutput: function(output) {}, // 每次有输出时调用
onNewLine: function(line) {} // 每次有新行输出时调用
});
示例:
var sh = new Shell();
sh.setCallback({
onNewLine: function(line) {
log(line); // 实时输出每一行结果
}
});
sh.exec("ping -c 4 www.hamibot.com"); // 执行 ping 命令
sh.exit(); // 退出 Shell
4. 注意事项
-
权限问题:某些命令需要 root 权限才能执行(如修改系统设置、强制停止系统应用)。如果你不确定是否需要 root 权限,可以先尝试不加
true
参数,如果报错Permission denied
再加上。 -
异步执行:
Shell.exec()
是异步执行的,不会等待命令完成就继续执行后续代码。如果你需要等待命令执行完毕,目前只能通过shell()
函数实现。 -
命令格式:确保命令格式正确,尤其是与
am
、pm
等命令相关的参数。例如:- 启动微信:
am start -n com.tencent.mm/.ui.LauncherUI
- 卸载应用:
pm uninstall com.example.app
- 启动微信:
-
调试建议:在调试过程中,建议使用
log()
输出结果,或通过setCallback
监听输出,以便快速定位问题。
总结
方法 | 适用场景 | 是否异步 | 是否复用 Shell 进程 | 推荐使用场景 |
---|---|---|---|---|
shell(cmd, root) |
单次执行 | 否 | 否 | 简单、快速执行单条命令 |
Shell 对象 |
多次执行 | 是 | 是 | 需要连续执行多条命令,提高效率 |
setCallback |
实时监听输出 | 否 | 是 | 需要查看命令执行过程的输出 |
如需进一步帮助,请参考 Hamibot 官方文档 或发送邮件至 support@hamibot.cn
。
ℹ️ 本回答由 AI 生成,内容仅供参考