Shell 命令与设备管理——通过 Root Shell 或 ADB 执行系统命令
什么时候需要 Shell
Auto.js 自带的 API 覆盖了绝大多数自动化场景,但以下操作需要 Shell 才能做到:
- 修改系统设置(如 adb shell settings put)
- 读写受保护的系统目录
- 执行第三方命令行工具(curl、python 等)
- 批量文件操作
无 Root 模式(沙箱)
// 默认无 Root,只能执行有限命令
var result = shell("ls /sdcard");
log(result.stdout); // 输出
log(result.code); // 退出码
无 Root 时能执行的命令很少,主要是 Android 自带的基础工具。
有 Root 模式
// 需要设备已 Root 并授予 Auto.js Root 权限
var result = shell("pm list packages", true); // 第二个参数 = 是否用 Root
log(result.stdout);
// 修改系统设置(修改动画速度)
shell("settings put global window_animation_scale 0.0", true);
shell("settings put global transition_animation_scale 0.0", true);
ADB 模式
如果有电脑连接,可以通过 adb 执行命令:
// 手机端连接 adb 调试后
var result = shell("dumpsys window windows", false);
常用 Shell 命令速查
查看当前前台应用
var r = shell("dumpsys activity top | grep ACTIVITY");
log(r.stdout); // 输出类似 ACTIVITY com.taobao.taobao/.main.MainActivity
列出已安装应用
var r = shell("pm list packages");
log(r.stdout);
强制停止应用
shell("am force-stop com.taobao.taobao", true);
截屏(不使用 MediaProjection)
shell("screencap -p /sdcard/screenshot.png", true);
模拟按键(另一种方式)
shell("input keyevent 4", true); // 返回键
shell("input text 'hello'", true); // 输入文字
shell("input tap 540 1200", true); // 点击
安全提示
有 Root 的脚本能力极大,但也最危险:
- 执行前确认你知道命令会做什么
- 破坏性命令(rm、reboot 等)加二次确认
- 不要把 Root 版脚本分发到不信任的设备上
实战:自动关闭系统动画
auto.waitFor();
// 需要 Root
var needRoot = true;
function cmd(c) {
return shell(c, needRoot);
}
cmd("settings put global window_animation_scale 0.0");
cmd("settings put global transition_animation_scale 0.0");
cmd("settings put global animator_duration_scale 0.0");
toast("动画已关闭,操作会快很多");