站点图标 起风网

autojs Shell – Shell命令

shell即Unix Shell,在类Unix系统提供与操作系统交互的一系列命令。

很多程序可以用来执行shell命令,例如终端模拟器。

在Auto.js大致等同于用adb执行命令”adb shell”。其实现包括两种方式:

shell函数#

Stability: 2 – Stable

shell(cmd[, root])#

一次性执行命令cmd, 并返回命令的执行结果。返回对象的其属性如下:

示例(强制停止微信) :

var result = shell("am force-stop com.tencent.mm", true);
log(result);
console.show();
if(result.code == 0){
  toast("执行成功");
}else{
  toast("执行失败!请到控制台查看错误信息");
}

Shell#

Stability: 2 – Stable

shell函数通过用来一次性执行单条命令并获取结果。如果有多条命令需要执行,用Shell对象的效率更高。这是因为,每次运行shell函数都会打开一个单独的shell进程并在运行结束后关闭他,这个过程需要一定的时间;而Shell对象自始至终使用同一个shell进程。

new Shell(root)#

Shell对象的”构造函数”。

var sh = new Shell(true);
//强制停止微信
sh.exec("am force-stop com.tencent.mm");
sh.exit();

Shell.exec(cmd)#

执行命令cmd。该函数不会返回任何值。

注意,命令执行是”异步”的、非阻塞的。也就是不会等待命令完成后才继续向下执行。

尽管这样的设计使用起来有很多不便之处,但受限于终端模拟器,暂时没有解决方式;如果后续能找到解决方案,则将提供Shell.execAndWaitFor函数。

Shell.exit()#

直接退出shell。正在执行的命令会被强制退出。

Shell.exitAndWaitFor()#

执行”exit”命令并等待执行命令执行完成、退出shell。

此函数会执行exit命令来正常退出shell。

Shell.setCallback(callback)#

设置该Shell的回调函数,以便监听Shell的输出。可以包括以下属性:

例如:

var sh = new Shell();
sh.setCallback({
    onNewLine: function(line){
        //有新的一行输出时打印到控制台
        log(line);
    }
})
while(true){
    //循环输入命令
    var cmd = dialogs.rawInput("请输入要执行的命令,输入exit退出");
    if(cmd == "exit"){
        break;
    }
    //执行命令
    sh.exec(cmd);
}
sh.exit();

附录: shell命令简介#

以下关于shell命令的资料来自AndroidStudio用户指南:Shell命令

am命令#

am命令即Activity Manager命令,用于管理应用程序活动、服务等。

以下命令均以”am “开头,例如shell('am start -p com.tencent.mm');(启动微信)

start [options] intent#

启动 intent 指定的 Activity(应用程序活动)。
请参阅 intent 参数的规范

选项包括:

startservice [options] intent#

启动 intent 指定的 Service(服务)。
请参阅 intent 参数的规范
选项包括:

force-stop package#

强行停止与 package(应用包名)关联的所有应用。

kill [options] package#

终止与 package(应用包名)关联的所有进程。此命令仅终止可安全终止且不会影响用户体验的进程。
选项包括:

kill-all#

终止所有后台进程。

broadcast [options] intent#

发出广播 intent。 请参阅 intent 参数的规范

选项包括:

instrument [options] component#

使用 Instrumentation 实例启动监控。通常,目标 component 是表单 test_package/runner_class。
选项包括:

dumpheap [options] process file#

转储 process 的堆,写入 file。

选项包括:

选项包括:

monitor [options] 启动对崩溃或 ANR 的监控。#

选项包括:

display-size [reset|widthxheight]#

替换模拟器/设备显示尺寸。此命令对于在不同尺寸的屏幕上测试您的应用非常有用,它支持使用大屏设备模仿小屏幕分辨率(反之亦然)。
示例:

shell("am display-size 1280x800", true);

display-density dpi#

替换模拟器/设备显示密度。此命令对于在不同密度的屏幕上测试您的应用非常有用,它支持使用低密度屏幕在高密度环境环境上进行测试(反之亦然)。
示例:

shell("am display-density 480", true);

to-uri intent#

将给定的 intent 规范以 URI 的形式输出。 请参阅 intent 参数的规范

to-intent-uri intent#

将给定的 intent 规范以 intent:URI 的形式输出。 请参阅 intent 参数的规范。

intent参数的规范#

对于采用 intent 参数的 am 命令,您可以使用以下选项指定 intent:

应用包名#

所谓应用包名,是唯一确定应用的标识。例如微信的包名是”com.tencent.mm”, QQ的包名是”com.tencent.mobileqq”。
要获取一个应用的包名,可以通过函数getPackageName(appName)获取。参见帮助->其他一般函数。

pm命令#

pm命令用于管理应用程序,例如卸载应用、冻结应用等。
以下命令均以”pm “开头,例如”shell(\”pm disable com.tencent.mm\”);”(冻结微信)

list packages [options] filter#

输出所有软件包,或者,仅输出包名称包含 filter 中的文本的软件包。
选项:

list permission-groups#

输出所有已知的权限组。

list permissions [options] group#

输出所有已知权限,或者,仅输出 group 中的权限。
选项:

list instrumentation [options]#

列出所有测试软件包。
选项:

list features#

输出系统的所有功能。

list libraries#

输出当前设备支持的所有库。

list users#

输出系统上的所有用户。

path package#

输出给定 package 的 APK 的路径。

install [options] path#

将软件包(通过 path 指定)安装到系统。
选项:

uninstall [options] package#

从系统中卸载软件包。
选项:

enable package_or_component#

启用给定软件包或组件(作为“package/class”写入)。

disable package_or_component#

停用给定软件包或组件(作为“package/class”写入)。

disable-user [options] package_or_component#

选项:

revoke package_name permission#

从应用中撤销权限。在运行 Android 6.0(API 级别 23)及更高版本的设备上,可以是应用清单中声明的任何权限。在运行 Android 5.1(API 级别 22)和更低版本的设备上,必须是应用定义的可选权限。

set-install-location location#

更改默认安装位置。位置值:

注:此命令仅用于调试目的;使用此命令会导致应用中断和其他意外行为。

get-install-location#

返回当前安装位置。返回值:

set-permission-enforced permission [true|false]#

指定是否应强制执行给定的权限。

trim-caches desired_free_space#

减少缓存文件以达到给定的可用空间。

create-user user_name#

使用给定的 user_name 创建新用户,输出新用户的标识符。

remove-user user_id#

移除具有给定的 user_id 的用户,删除与该用户关联的所有数据。

get-max-users#

输出设备支持的最大用户数。

其他命令#

进行屏幕截图#

screencap 命令是一个用于对设备显示屏进行屏幕截图的 shell 实用程序。在 shell 中,此语法为:

screencap filename

例如:

$ shell("screencap /sdcard/screen.png");

列表文件#

ls filepath

例如:

log(shell("ls /system/bin").result);
退出移动版