尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Autojs基础-Shell命令(shell)
1.前言autojs的shell命令类似于adb执行“adb shell”命令就是将adb命令中的前缀“adb shell”去掉后缀部分通过autojs给出的方式执行。当然shell命令执行需要在root环境下才能生效。autojs对adb shell命令大多数情况是支持的但涉及内存信息获取或者操作部分的shell命令是无法执行的这种命令既不报错也不会返回信息。2.函数1.概况autojs给出了两种执行shell命令的方式第一种是直接调用shell函数另一种是构建一个Shell对象再调用对象的函数。我们使用第一种方式时一般会以root权限的方式运行这种方式每次都会自动创建个shell对象运行方式采用同步运行执行速度相对较慢但是权限较高我们使用第二种方式时会先手动创建个包含root权限的shell对象然后调用这个对象的函数来执行shelll命令我们在整个代码可以创建一个shell对象运行方式采用异步运行这种方式执行速度相对较快但是权限较低。一般情况下我们可以在代码开始构建一个shell对象然后通过这个对象来执行命令当shell对象由于权限不够而无法使命令生效时再通过直接调用shell函数的方式执行。但是下面的使用场景中也介绍了两种方式的使用情况可以按照这个使用场景进行使用。2.shell函数用于执行shell命令需要传递两个参数分别为命令和是否以root权限运行默认为false参数类型分别为字符串和boolean返回执行结果返回类型为对象。执行结果对象属性有code、result和error分别表示返回码、运行结果和运行错误信息。其中code为0时表示运行成功不为0时代表运行失败。以“adb shell pm list packages”命令为例怎么在autojs中执行这个命令。我前面介绍了很多关于root权限才能使用的函数我的autojs早已经获取了root权限忽略了这个情况。我下面代码会把我认为比较好用获取root权限方式告诉大家。如果使用root权限的功能获取root权限代码一般放在脚本开头。但是学习阶段防止代码干扰之后不再介绍获取root权限的功能。这是电脑cmd中调用adb shell命令查看雷电模拟器应用信息的情况大家会发现每次执行abd shell命令都会重启adb因为我电脑上拥有adb的应用Android Studio、按键精灵手机助手、雷电模拟器4、雷电模拟器9太多了出现这种情况主要是abd版本冲突导致的。幸好不影响功能我这里就处理了大家知道就好了。在autojs可以通过以下方式获取root权限和执行shell命令。// 获取root权限 if (!hasRootAccess()) { toast(请开启Root权限); // 如果请求root权限失败 if (!requestRoot()) { // 清理缓存退出脚本 // 由于这是学习阶段没有缓存就直接退出了 exit(); } } let result shell(pm list packages, true); // 如果执行成功 if (result.code 0) { console.log(执行shell命令成功); console.log(result.result); } else { console.log(执行shell命令失败); console.log(result.error); } // 检查是否有Root权限 function hasRootAccess() { let result shell(id, true).result; // 执行Linux系统命令 return (result.indexOf(uid0) 0); // uid0表示Root用户 } // 请求Root权限 function requestRoot() { let sh new Shell(true); // 创建交互式Shell sh.exec(su); // 发送Root权限请求 // 等待用户手动授权弹出系统授权弹窗 sleep(5000); // 留出5秒操作时间 if (hasRootAccess()) { toast(Root权限已获取); return true; } else { toast(Root权限请求失败); return false; } }3.Shell对象Shell对象构造函数允许传递一个是否以root权限运行默认为false一个参数参数类型为boolean我们一般会以root权限创建对象返回shell对象。返回shell对象的函数有exec、exit、exitAndWaitFor和setCallback分别用于执行shell命令、退出shell命令、等待命令运行结束和运行回调。exec函数用于执行shell命令需要传递命令一个参数参数类型为字符串这个函数无返回值如果想获取返回数据需要通过setCallback回调函数。exit函数用于退出命令运行正在运行的命令也会终止一般出现特殊情况下才会调用这个函数正常结束的函数可以不调用这个函数。exitAndWaitFor函数用于等待命令运行结束通过exec函数运行方式是异步运行的需要调用这个函数保证命令执行完成避免后面代码提前运行而导致出错。setCallback函数用于获取运行过程中的数据包含onOutput和onNewLine两个函数onOutput函数每次返回数据加载完成都会调用一次onNewLine函数每次返回数据加载一行都会调用一次。实际上通过回调的方式获取返回数据非常不友好会包含大量干扰信息最终导致onOutput函数会获取各种空信息和结束信息以及onNewLine函数获取多行数据才调用一次和获取onOutput函数类似的无用信息。let currentShell new Shell(true); // 执行shell命令 currentShell.exec(pm list packages); // 保存通过新行拼接的字符串 let lineString; // 保存通过新内容拼接的字符串 let contentString; // 执行回调函数 currentShell.setCallback({ onNewLine: function (line) { console.log(新行 line); }, onOutput: function (content) { console.log(新内容 content); } }) // 等待命令运行结束 currentShell.exitAndWaitFor(); // 退出命令行 currentShell.exit();4.使用场景通过上面的比较可以发现Shell对象执行命令的方式局限性还是很大的但是这种能够共用一个对象执行速度快也是一个优点。我给出几个常用的场景如果想快速执行shell命令并且能够保证命令成功执行可以使用Shell对象的方式如果需要获取返回信息无法保证执行命令的正确性或者需要很高的执行权限可以使用shell函数的方式。3.命令官方文档介绍了很多命令我就不一一介绍了。这些命令并不是包含所有adb shell命令而且找起来很不方便。一般我需要哪个功能的adb shell就会通过AI搜索一下然后通过autojs使用。这些命令不如函数一样方便查找可以通过用到啥搜索啥的方式然后直接使用和调试。我目前没有遇到命令不能执行的情况除了查询和操作内存信息的时候。我们一般情况下很少使用adb shell的方式完成某个功能当我们有特殊需求时可以使用。
RELATED

相关推荐

使用Zerynth在索尼Spresense上以Python获取GNSS数据

使用Zerynth在索尼Spresense上以Python获取GNSS数据

1. 项目缘起:当索尼Spresense遇上Python,GNSS数据获取的轻量化之路 最近在折腾一个户外数据采集的小项目,核心需求是能实时获取高精度的地理位置信息。市面上常见的方案要么是集成度高的成品模块,价格不菲且二次开发受限&#xff…

📅 2026/10/7 9:23:45
基于ESP32与WS2812B的MacBook发光Logo改造全流程解析

基于ESP32与WS2812B的MacBook发光Logo改造全流程解析

1. 项目概述:让苹果Logo“呼吸”的创意之光几年前,当苹果公司决定在新一代MacBook上取消那个经典的、会发光的Logo时,不少老用户都感到一丝惋惜。那个背光苹果标志,曾经是咖啡馆里、图书馆中一道独特的风景线,是身份与…

📅 2026/10/7 7:08:47
Arduino驱动OLED显示屏全攻略:从硬件连接到图形界面开发

Arduino驱动OLED显示屏全攻略:从硬件连接到图形界面开发

1. 项目概述:当Arduino遇见OLED 如果你玩过Arduino,大概率会从点亮一个LED灯开始,然后可能是控制舵机、读取传感器。但当你觉得串口监视器里滚动的数字和字符不够直观、不够“酷”时,一个显示设备就成了刚需。这时候,O…

📅 2026/9/15 10:06:44
MORE NEWS

更多资讯

📰

为新的数据库编写 Quartz.NET Driver Delegate:方言驱动委托完整指南

任务调度后端 【免费下载链接】quartznet Quartz Enterprise Scheduler .NET 项目地址: https://gitcode.com/gh_mirrors/qu/quartznet 点击查看 免费下载 本文以 Quartz.NET 官方 4.x 文档《A Driver Delegate for a New Database》为骨架,完整讲解如何…

📰

Czkawka 磁盘清理完整指南:14 项本地任务如何挑出重复文件与相似图片

Czkawka 磁盘清理完整指南:14 项本地任务如何挑出重复文件与相似图片 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka 磁盘容量红线逼近…

📰

防抖装饰器(Debounce Decorator):在 JavaScript 中合并高频函数调用的实现与原理

文档教程前端 【免费下载链接】zh.javascript.info 现代 JavaScript 教程(The Modern JavaScript Tutorial),以最新的 ECMAScript 规范为基准,通过简单但足够详细的内容,为你讲解从基础到高阶的 JavaScript 相关知识。…

📰

Superpowers:开发者认知增强工作流的原理与落地实践

1. 项目概述:Superpowers 不是超能力,而是开发者工作流的“认知增强套件” 你最近在技术社区、GitHub Trending 或 Discord 开发者频道里,大概率已经反复刷到 superpowers 这个词——它不是漫威电影里的变种人设定,也不是某款新…

📰

golden-layout LocationSelectors 完全指南:用父级搜索算法精确定位新组件插入位置

前端UI组件 【免费下载链接】golden-layout A multi window layout manager for webapps 项目地址: https://gitcode.com/gh_mirrors/go/golden-layout 点击查看 免费下载 导读 本文是 golden-layout(一个多窗口布局管理器)中 LocationSele…

📰

Vivado综合后门级网表导出:GUI/Tcl、SDF反标与后仿真避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬