adb 命令速查与参考文档:
https://quickref.me/zh-CN/docs/adb.html
https://adbshell.com/
http://developer.android.com/tools/help/adb.html 手机启用 adb 调试步骤
https://developer.android.com/tools/adb?hl=zh-cn#Enabling
要点:点按手机版本号选项七次才会显示开发者选项 process.adb.startServer 启动 adb 服务端,这个函数实际上会自动调用一次,
adb 需要一个常驻服务端(启动一个 adb.exe 进程),也只能有一个服务进程,多个服务进程会工作不正常。
这个扩展库会自动查找之前启动的 adb 服务端,如果找到就直接重用。
进程退出时不会退出常驻服务端(一般无此必要 )。 每次发送 adb 指令时也会启动一个 adb 客户端,这也是一个 adb.exe 进程。
所有 adb 客户端在执行完成后,或当前进程退出后将会自动关闭(由 process.job.limitKill 实现)。 只有首次连接需要配对。
在手机无线调试页面可以看到动态端口,首次用该端口连接。
然后执行下面的命令设置固定端口,并保存连接地址到 APPDATA。
process.adb.tcpip("5555",true) 也可以用 USB 线连接手机直接执行上面的 tcpip 函数。 以后就可以无参数直接调用 process.adb.connect() 连接手机了。
入门必读
执行 adb 命令,返回 process.popen 进程管道对象。
可传入一个或多个启动命令行参数(字符串)。
传入单个字符串参数时,可用空格分开多个命令行参数。
如果有多个命令行参数,则不在双引号内、且包含空白或需要转义的参数时,
转义处理该参数后并在首尾添加双引号。
也可用一个数组传入多个参数
使用管道调用 adb。
调用 process.adb.startServer 函数启动 adb 服务端,
该函数会重用已启动的 adb 服务端而不会重复启动。
该函数启动的 adb 服务端为驻留进程,不会随程序退出,
发送其他 adb 指定则启动 adb 客户端。
此扩展库启动的所有 adb 客户端在执行结束或程序退出时自动关闭。
执行 adb 命令,返回 process.popen 进程管道对象。
λ(l) key(0,l);
无线连接手机设备,
需要先调用 pair 函数配对。
无线连接手机设备。
可选参数 @2 指定连接成功是否自动调用 setSerialNo 函数设为默认设备,
不指定参数 @2 则默认设为 true。
请打开『手机开发者设置/无线调试』获取动态无线端口。
或用 tcpip 函数设置固定端口并获取连接地址。
如果 tcpip 函数保存了默认地址,那么 connect 函数可省略连接地址参数。
连接成功返回连接地址,失败返回 null,错误信息。
首次连接需要先调用 pair 函数配对设备。
注意配对端口与连接端口不一样
可用一个数组指定添加到所有 ADB 命令的默认参数,默认为 null。
默认参数会添加到其他参数前面。
如果默认参数添加了 {"-s","设备序号"} 以发送到特定设备,
则覆盖 setSerialNo 函数指定的目标设备
断开连接
查找已连接设备,并自动设置一个默认设备。
如果当前仅连接一个设备,则不限定默认设备。
如果参数 @1 为 true,则优先选择有线连接设备。
如果参数为设备序号,优先选择指定设备。
成功返回选择的默认设备序号
查找已运行的 adb 服务端端口
执行 adb 命令。
成功返回进程输出,出错返回 null,错误信息 。
可传入一个或多个启动命令行参数(字符串)。
传入单个字符串参数时,可用空格分开多个命令行参数。
如果有多个命令行参数,则不在双引号内、且包含空白或需要转义的参数时,
转义处理该参数后并在首尾添加双引号。
也可用一个数组传入多个参数
返回所有连接设备。
如果参数 @1 为 true ,则允许返回离线设备。
返回值为一个数组,数组元素为设备信息。
设备信息的 serialNo 字段为设备串号,
state 字段为连接状态,"device" 为已连接,"offline" 表示离线。
info 为设备信息,其中 product 为产品代号,model 为设备型号
监听输入事件。
可指定一个或多个参数,添加 "-l" 以文本代替数值显示事件类型与名称。
返回值为 process.popen 对象。
调用返回对象的 lines 函数可以遍历所有回显行并匹配需要的值。
调用返回对象的 ctrlEvent(0) 函数可退出监听进程。
回显事件格式:设备 事件类型 事件名 事件值
返回最大 x 坐标与最大 y 坐标。
用于调用 getEvent 函数时转换输出的事件坐标值
获取属性。
成功返回字符串类型的属性值,
失败返回 null, 错误信息
process.adb.getProp("ro.build.version.getProp("ro.build.version.release")/*返回 android 系统版本,
成功返回一个字符串类型的数值*/
返回设备宽度与高度,有 2 个返回值。
返回当前连接的设备串号,
出错返回 null,错误信息。
如果当前连接了多个设备,且未用 setSerialNo 函数指定设备,
此函数返回 null 值,错误信息
成功返回设备状态,"device" 为连接成功。
出错返回 null,错误信息
发送输入事件,用法请 tap,swip 等函数源码与 adb 文档。
安装应用到手机。
安装应用到手机。
可用 process.adb.logger 预先设置进程回显对象
自指定的网址下载 APK 并安装到手机。
自指定的网址下载 APK 并安装到手机。
如果参数 @1 指定 HTML 页面,则自动自 HTML 页面提取 apk 下载链接。
参数 @1 也可以指定本地 APK 文件路径。
可用 process.adb.logger 预先设置进程回显对象。
如果 APK 文件太大,建议改用 inet.downBox 或者 inet.httpFile 下载
返回手机 IP 地址
当前是否连接设备
模拟手机按键。
需要在手机开发者设置中打开模拟按键权限。
可以使用其他 key 前缀的函数发送指定键码
发送按键事件。
code 可以为数值或文本键名。
用法请参考 adb 文件。
或改用 key 前缀的其他函数。
参数 @2 为 true 时表示长按
λ(l) key(7,l);
λ(l) key(8,l);
λ(l) key(227,l);
λ(l) key(228,l);
λ(l) key(9,l);
λ(l) key(10,l);
λ(l) key(206,l);
λ(l) key(11,l);
λ(l) key(12,l);
λ(l) key(13,l);
λ(l) key(14,l);
λ(l) key(15,l);
λ(l) key(16,l);
λ(l) key(29,l);
λ(l) key(284,l);
λ(l) key(57,l);
λ(l) key(58,l);
λ(l) key(75,l);
λ(l) key(187,l);
λ(l) key(219,l);
λ(l) key(77,l);
λ(l) key(182,l);
λ(l) key(181,l);
λ(l) key(30,l);
λ(l) key(4,l);
λ(l) key(73,l);
λ(l) key(174,l);
λ(l) key(121,l);
λ(l) key(220,l);
λ(l) key(221,l);
λ(l) key(188,l);
λ(l) key(197,l);
λ(l) key(198,l);
λ(l) key(199,l);
λ(l) key(200,l);
λ(l) key(201,l);
λ(l) key(202,l);
λ(l) key(203,l);
λ(l) key(189,l);
λ(l) key(190,l);
λ(l) key(191,l);
λ(l) key(192,l);
λ(l) key(193,l);
λ(l) key(194,l);
λ(l) key(195,l);
λ(l) key(196,l);
λ(l) key(96,l);
λ(l) key(97,l);
λ(l) key(98,l);
λ(l) key(102,l);
λ(l) key(104,l);
λ(l) key(110,l);
λ(l) key(103,l);
λ(l) key(105,l);
λ(l) key(109,l);
λ(l) key(108,l);
λ(l) key(106,l);
λ(l) key(107,l);
λ(l) key(99,l);
λ(l) key(100,l);
λ(l) key(101,l);
λ(l) key(31,l);
λ(l) key(210,l);
λ(l) key(208,l);
λ(l) key(5,l);
λ(l) key(27,l);
λ(l) key(115,l);
λ(l) key(175,l);
λ(l) key(167,l);
λ(l) key(166,l);
λ(l) key(28,l);
λ(l) key(55,l);
λ(l) key(207,l);
λ(l) key(278,l);
λ(l) key(113,l);
λ(l) key(114,l);
λ(l) key(277,l);
λ(l) key(32,l);
λ(l) key(67,l);
λ(l) key(23,l);
λ(l) key(20,l);
λ(l) key(269,l);
λ(l) key(271,l);
λ(l) key(21,l);
λ(l) key(22,l);
λ(l) key(19,l);
λ(l) key(268,l);
λ(l) key(270,l);
λ(l) key(173,l);
λ(l) key(33,l);
λ(l) key(212,l);
λ(l) key(6,l);
λ(l) key(66,l);
λ(l) key(65,l);
λ(l) key(70,l);
λ(l) key(111,l);
λ(l) key(64,l);
λ(l) key(34,l);
λ(l) key(131,l);
λ(l) key(140,l);
λ(l) key(141,l);
λ(l) key(142,l);
λ(l) key(132,l);
λ(l) key(133,l);
λ(l) key(134,l);
λ(l) key(135,l);
λ(l) key(136,l);
λ(l) key(137,l);
λ(l) key(138,l);
λ(l) key(139,l);
λ(l) key(80,l);
λ(l) key(125,l);
λ(l) key(112,l);
λ(l) key(119,l);
λ(l) key(35,l);
λ(l) key(68,l);
λ(l) key(172,l);
λ(l) key(36,l);
λ(l) key(79,l);
λ(l) key(259,l);
λ(l) key(214,l);
λ(l) key(3,l);
λ(l) key(37,l);
λ(l) key(165,l);
λ(l) key(124,l);
λ(l) key(38,l);
λ(l) key(39,l);
λ(l) key(218,l);
λ(l) key(215,l);
λ(l) key(40,l);
λ(l) key(204,l);
λ(l) key(229,l);
λ(l) key(71,l);
λ(l) key(41,l);
λ(l) key(205,l);
λ(l) key(222,l);
λ(l) key(128,l);
λ(l) key(129,l);
λ(l) key(90,l);
λ(l) key(87,l);
λ(l) key(127,l);
λ(l) key(126,l);
λ(l) key(85,l);
λ(l) key(88,l);
λ(l) key(130,l);
λ(l) key(89,l);
λ(l) key(273,l);
λ(l) key(272,l);
λ(l) key(275,l);
λ(l) key(274,l);
λ(l) key(86,l);
λ(l) key(226,l);
λ(l) key(82,l);
λ(l) key(117,l);
λ(l) key(118,l);
λ(l) key(69,l);
λ(l) key(123,l);
λ(l) key(122,l);
λ(l) key(213,l);
λ(l) key(209,l);
λ(l) key(91,l);
λ(l) key(42,l);
λ(l) key(262,l);
λ(l) key(261,l);
λ(l) key(263,l);
λ(l) key(260,l);
λ(l) key(83,l);
λ(l) key(78,l);
λ(l) key(143,l);
λ(l) key(144,l);
λ(l) key(145,l);
λ(l) key(146,l);
λ(l) key(147,l);
λ(l) key(148,l);
λ(l) key(149,l);
λ(l) key(150,l);
λ(l) key(151,l);
λ(l) key(152,l);
λ(l) key(153,l);
λ(l) key(157,l);
λ(l) key(159,l);
λ(l) key(154,l);
λ(l) key(158,l);
λ(l) key(160,l);
λ(l) key(161,l);
λ(l) key(162,l);
λ(l) key(155,l);
λ(l) key(163,l);
λ(l) key(156,l);
λ(l) key(43,l);
λ(l) key(44,l);
λ(l) key(93,l);
λ(l) key(92,l);
λ(l) key(225,l);
λ(l) key(279,l);
λ(l) key(56,l);
λ(l) key(94,l);
λ(l) key(81,l);
λ(l) key(18,l);
λ(l) key(26,l);
λ(l) key(186,l);
λ(l) key(184,l);
λ(l) key(183,l);
λ(l) key(185,l);
λ(l) key(45,l);
λ(l) key(46,l);
λ(l) key(285,l);
λ(l) key(72,l);
λ(l) key(217,l);
λ(l) key(47,l);
λ(l) key(116,l);
λ(l) key(84,l);
λ(l) key(74,l);
λ(l) key(176,l);
λ(l) key(59,l);
λ(l) key(60,l);
λ(l) key(76,l);
λ(l) key(223,l);
λ(l) key(1,l);
λ(l) key(2,l);
λ(l) key(276,l);
λ(l) key(62,l);
λ(l) key(17,l);
λ(l) key(180,l);
λ(l) key(179,l);
λ(l) key(265,l);
λ(l) key(266,l);
λ(l) key(267,l);
λ(l) key(264,l);
λ(l) key(95,l);
λ(l) key(63,l);
λ(l) key(120,l);
λ(l) key(281,l);
λ(l) key(282,l);
λ(l) key(283,l);
λ(l) key(280,l);
λ(l) key(48,l);
λ(l) key(61,l);
λ(l) key(170,l);
λ(l) key(242,l);
λ(l) key(252,l);
λ(l) key(254,l);
λ(l) key(253,l);
λ(l) key(256,l);
λ(l) key(230,l);
λ(l) key(178,l);
λ(l) key(249,l);
λ(l) key(250,l);
λ(l) key(247,l);
λ(l) key(248,l);
λ(l) key(243,l);
λ(l) key(244,l);
λ(l) key(245,l);
λ(l) key(246,l);
λ(l) key(251,l);
λ(l) key(257,l);
λ(l) key(241,l);
λ(l) key(234,l);
λ(l) key(177,l);
λ(l) key(232,l);
λ(l) key(237,l);
λ(l) key(238,l);
λ(l) key(239,l);
λ(l) key(240,l);
λ(l) key(233,l);
λ(l) key(235,l);
λ(l) key(236,l);
λ(l) key(258,l);
λ(l) key(255,l);
λ(l) key(49,l);
λ(l) key(50,l);
λ(l) key(231,l);
λ(l) key(25,l);
λ(l) key(164,l);
λ(l) key(24,l);
λ(l) key(51,l);
λ(l) key(224,l);
λ(l) key(171,l);
λ(l) key(52,l);
λ(l) key(53,l);
λ(l) key(216,l);
λ(l) key(54,l);
λ(l) key(211,l);
λ(l) key(168,l);
λ(l) key(169,l);
停止 adb 服务端,无返回值,
adb 服务端为驻留进程用于接收命令并向手机转发指令,
注意所有 adb 客户端共用也只能共用一个服务端
无参数返回当前系统账号最后连接的手机 IP 地址与端口。
参数 @1 指定字符串则修改最后自动连接地址与端口,
传入空字符串清除保存的连接地址。
一般不要修改此地址,应由 process.adb 自动维护。
列出所有应用。
可选指定一个或多个字符串参数,
"-s" 参数指定只返回系统应用,"-3"参数限定返回第三方应用。
成功返回一个数组,不指定"-f","-i"参数时数组元素为包名。
设置 push,pull,install,uninstall 等命令的默认回显对象。
此对象用于 process.popen 的 logger 对象,
可以设为函数或文本框控件,如果引入了 console 库则会默认回显到控制台。
无线配对手机设备
Android 11 及更高版本支持
无线配对手机设备
参数 @1 示例 "192.168.1.103:35151"。
请打开『手机开发者设置/无线调试/使用配对码配对设备』获取IP端口与配对码。
注意配对端口与连接端口是不一样的。
成功返回包含设备guid 的字符串,
失败返回 null,错误信息
扫描二维码后无线配对手机设备
请打开『手机开发者设置/无线调试/使用二维码配对设备』扫描二维码。
请调用 process.adb.qrCode 并传入相同参数生成二维码。
注意配对端口与连接端口是不一样的。
成功返回包含设备 guid 的字符串,
失败返回 null,错误信息
adb.exe 路径
自手机下载文件。
此函数调用 process.adb.logger 显示进程输出。
如果要直接返回结果,请改用 pullGet 函数
自手机下载文件。
注意本地当前目录为 process.adb.workDir 指定的目录,默认为"/"。
如果进程输出 Permission Denied 无权限,
建议请打开手机 USB 调试模式,尝试 root 修改目录权限。
可用 process.adb.logger 预先设置进程回显对象
自手机下载文件。
成功返回 true ,失败返回 null, 错误信息。
此函数不会调用 process.adb.logger 输出
自手机下载文件。
注意本地当前目录为 process.adb.workDir 指定的目录,默认为"/"
上传文件到手机
此函数调用 process.adb.logger 显示进程输出。
如果要直接返回结果,请改用 pushGet 函数
上传文件到手机。
注意本地当前目录为 process.adb.workDir 指定的目录,默认为"/"。
如果进程输出 Permission Denied 无权限,
建议请打开手机 USB 调试模式,尝试 root 修改目录权限。
可用 process.adb.logger 预先设置进程回显对象
上传文件到手机。
成功返回 true ,失败返回 null, 错误信息。
此函数不会调用 process.adb.logger 输出
上传文件到手机。
注意本地当前目录为 process.adb.workDir 指定的目录,默认为"/"
手机截屏到指定文件。
成功返回 true ,失败返回 null,错误信息
发送输入文本事件,text 指定要输入的字符串
发送输入事件,参数示例:
"sendevent /dev/input/event3 3 57 0"
指定设将命令发送至特定设备。
参数 @1 指定设备序号,设为 null 则不指定特定设备。
此函数返回参数 @1 。
如果 process.adb.defaultArguments 添加了 {"-s","设备序号"} 以发送到特定设备,
则覆盖 setSerialNo 函数指定的目标设备
启动 adb 客户端并返回 process.popen 对象,
指定参数则直接执行参数指定的命令后关闭进程。
不指定参数则进入 shell 命令交互模式,
交互模式下可使用 expect 函数检测并等待进程输出。
更多用法请参考 process.popen 库函数文档
执行 adb shell 命令。
成功返回进程输出,出错返回 null,错误信息 。
可传入一个或多个启动命令行参数(字符串)。
传入单个字符串参数时,可用空格分开多个命令行参数。
如果有多个命令行参数,则不在双引号内、且包含空白或需要转义的参数时,
转义处理该参数后并在首尾添加双引号。
也可用一个数组传入多个参数
拔打指定电话,需要在手机开发者选项中打开权限
启动 adb 服务端,成功返回 true ,
此函数如果找到之前已启动的服务端会直接重用该服务并返回 true 。
失败返回 false, 错误信息 。
adb 服务端为驻留进程用于接收命令并向手机转发指令
而 adb 客户端进程在向服务端发送完指令后退出
这个函数会在程序启动时自动调用一次
用浏览器打开参数 @url 指定的网址
从 x1,y1 坐标滑动到 x2,y2 坐标。
可选用 duration 指定持续时间,以毫秒为单位。
原地滑动发送长按事件
发送触模事件,参数 x,y 指定坐标
已连接手机后修改无线连接端口。
参数@1 使用数值或字符串指定端口号,不指定则默认为 5555。
成功返回"IP:端口"格式地址,失败返回 null,错误信息。
如参数@2 为 true,则保存IP与端口以自动设置 connect 函数的默认参数。
如果参数 @1 为 false 则关闭此固定端口并切换到默认的 USB 模式。
成功返回进程输出,失败返回 null,错误输出。
此函数开启 TCPIP 固定端口以后,
手机无线调试页面仍然会显示另一个动态端口号。
并且每次调用这个函数,动态端口号都会变更
卸载应用。
可用 process.adb.logger 预先设置进程回显对象
卸载应用,但保留配置和缓存
用于下载 APK 的 Android 设备 User-Agent
返回 ADB 版本信息。
返回手机设备 Android 版本。
等待设备连接
工作目录,默认为 "/"(应用程序根目录);