# @devicefarmer/adbkit-monkey 中文文档

规范地址：https://npmcn.com/package/%40devicefarmer/adbkit-monkey/

版本：2\.0\.0
npm 元数据更新时间：2026-10-24T23:36:52.777Z
中文译文更新时间：2026-11-12T03:14:52.760Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40devicefarmer/adbkit-monkey
原文对照：https://npmcn.com/package/%40devicefarmer/adbkit-monkey/?lang=original
项目主页：https://github.com/DeviceFarmer/adbkit-monkey#readme
源码仓库：https://github.com/DeviceFarmer/adbkit-monkey

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：37.9 kB，27 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>= 22
- 运行依赖：0 个
- 首次发布：2020-05-16T11:44:44.748Z
- 最新版本发布：2026-10-24T23:36:52.448Z
- 近 30 天下载量：2709436（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：5（近 12 个月 1 个）

## 中文简介

Android猴子工具的节点界面.js.

## 安装

```sh
npm install @devicefarmer/adbkit-monkey
```

也可以使用：`pnpm add @devicefarmer/adbkit-monkey`、`yarn add @devicefarmer/adbkit-monkey`、`bun add @devicefarmer/adbkit-monkey`

## README

# ad-猴

**ad-猴** 页:1 [节点.js](http://nodejs.org/) 用于与 Android 合作的界面 [`monkey` 工具](http://developer.android.com/tools/help/monkey.html)。尽管没有记录,它们可以以 TCP 模式启动猴子程序 `--port` 参数。 在此模式下,它接受 [命令范围](https://github.com/android/platform_development/blob/master/cmds/monkey/README.NETWORK.txt) 这可以用来以非随机方式与UI互动. 此模式也用于内部 [`monkeyrunner` 工具](http://developer.android.com/tools/help/monkeyrunner_concepts.html),尽管文档声称与猴子工具无关.

## 开始

通过国家预防机制安装:

```bash
npm install --save @devicefarmer/adbkit-monkey
```

adbkit-monkey需要节点.js 22或后. 它以 TypeScript 写成,并以 CommonJS JavaScript 的形式发布,并附有类型声明,所以它与两者合作 `require()` 和类型脚本.

### 实例

以下例子假设猴子已经在运行(通过 `adb shell monkey --port 1080`)和一个端口转发(`adb forward tcp:1080 tcp:1080`)已经建立.

#### 按主按钮

```javascript
var assert = require('assert');
var monkey = require('@devicefarmer/adbkit-monkey');

var client = monkey.connect({ port: 1080 });

client.press(3 /* KEYCODE_HOME */, function(err) {
  assert.ifError(err);
  console.log('Pressed home button');
  client.end();
});
```

#### 拖出通知栏

```javascript
var assert = require('assert');
var monkey = require('@devicefarmer/adbkit-monkey');

var client = monkey.connect({ port: 1080 });

client.multi()
  .touchDown(100, 0)
  .sleep(5)
  .touchMove(100, 20)
  .sleep(5)
  .touchMove(100, 40)
  .sleep(5)
  .touchMove(100, 60)
  .sleep(5)
  .touchMove(100, 80)
  .sleep(5)
  .touchMove(100, 100)
  .sleep(5)
  .touchUp(100, 100)
  .sleep(5)
  .execute(function(err) {
    assert.ifError(err);
    console.log('Dragged out the notification bar');
    client.end();
  });
```

#### 获取显示大小

```javascript
var assert = require('assert');
var monkey = require('@devicefarmer/adbkit-monkey');

var client = monkey.connect({ port: 1080 });

client.getDisplayWidth(function(err, width) {
  assert.ifError(err);
  client.getDisplayHeight(function(err, height) {
    assert.ifError(err);
    console.log('Display size is %dx%d', width, height);
    client.end();
  });
});
```

#### 类型文本

请注意,您应该首先手动聚焦文本字段.

```javascript
var assert = require('assert');
var monkey = require('@devicefarmer/adbkit-monkey');

var client = monkey.connect({ port: 1080 });

client.type('hello monkey!', function(err) {
  assert.ifError(err);
  console.log('Said hello to monkey');
  client.end();
});
```

## API 密码

### 猴头

#### 猴子. 连接( 选项)

用途 [网易连通( )](http://nodejs.org/api/net.html) 打开新的 TCP 连接到猴子。 结合时有用 `adb forward`。 。 。 .

-   **选项** 任何选项 [`Net.connect()`](http://nodejs.org/api/net.html) 接受这个建议.
-   返回:新猴子 `Client` 举个例子.

#### 猴子. 连接Stream( 流)

将猴子客户端附加到现有的猴子协议流中.

-   **流线** 猴子协议 [`Stream`](http://nodejs.org/api/stream.html)。 。 。 .
-   返回:新猴子 `Client` 举个例子.

### 客户端

执行 `Api`详情见下文.

#### 活动

现有活动如下:

-   **错误** **(rr) (中文(简体) )** 发生错误时被允许 .
    -   **错误** 一个 `Error`。 。 。 .
-   **结束** 溪出后出.
-   **结束** 溪出后出.

#### 客户端. end ()

结束基础流/连接.

-   回归: `Client` 举个例子.

#### 客户端. multi ()

返回新的 API 包装器, 缓冲命令同时发送, 而不是单独发送 。 使用时 `api.sleep()`,允许执行简单的手势.

-   回返:一个新的 `Multi` 举个例子 见 `Multi` 见下文.

#### 客户端. send( 命令, 回调)

向猴子发送原始协议命令.

-   **命令** 要发送的命令。 何时 `String`,发出单一命令。 何时 `Array`,立即发送一系列命令.
-   **回调( err, 值, 命令)** 当猴子响应命令时呼叫。 如果发送了多个命令,每个命令都会召回一次.
    -   **错误** `null` 当成功的时候, `Error` 否则.
    -   **价值** 反应值,如果有的话.
    -   **命令** 命令是回应的.
-   回归: `Client` 举个例子.

### 阿庇语Name

猴子 API 执行 `Client` 财务报告和审定财务报表 `Multi`。 。 。 .

#### api.done( 回调)

关闭当前猴子会话并允许连接新会话 .

-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.flip 关闭( 回调)

模拟关闭键盘.

-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.flip 打开( 回调)

模拟打开键盘.

-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.get(名称、召回)

获得变量的值。 使用 `api.list()` 以获取所支持的变量列表.

-   **名称** 变相名.
-   **回调( err, 值)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
    -   **价值** 变量的值 .
-   回归: `Api` 执行实例.

#### api.get AmCurrent 动作( 回调)

别名 `api.get('am.current.action', callback)`。 。 。 .

#### api.get AmCurrentCategores( 回调)

别名 `api.get('am.current.categories', callback)`。 。 。 .

#### api.get AmCurrent CompClass( 回调)

别名 `api.get('am.current.comp.class', callback)`。 。 。 .

#### api.get AmCurrent 压缩包( 回调)

别名 `api.get('am.current.comp.package', callback)`。 。 。 .

#### api.geet CurrentData( 回调)

别名 `api.get('am.current.data', callback)`。 。 。 .

#### api.get AmCurrent 包( 回调)

别名 `api.get('am.current.package', callback)`。 。 。 .

#### api.get BuildBoard( 召回)

别名 `api.get('build.board', callback)`。 。 。 .

#### api.get Build Brand( 回调)

别名 `api.get('build.brand', callback)`。 。 。 .

#### api.get BuildCpuAbi( 回调)

别名 `api.get('build.cpu_abi', callback)`。 。 。 .

#### api.get BuildDevice( 回调)

别名 `api.get('build.device', callback)`。 。 。 .

#### api.get BuildDisplay( 回调)

别名 `api.get('build.display', callback)`。 。 。 .

#### api.get BuildFingerprint (召回) (中文(简体) )

别名 `api.get('build.fingerprint', callback)`。 。 。 .

#### api.get BuildHost( 回调)

别名 `api.get('build.host', callback)`。 。 。 .

#### api.get 构建 Id( 回电)

别名 `api.get('build.id', callback)`。 。 。 .

#### api.get 构建制造商(召回)

别名 `api.get('build.manufacturer', callback)`。 。 。 .

#### api.get Build Model( 回调)

别名 `api.get('build.model', callback)`。 。 。 .

#### api.get Build Product(召回) (中文(简体) )

别名 `api.get('build.product', callback)`。 。 。 .

#### api.get Build Tags( 回调)

别名 `api.get('build.tags', callback)`。 。 。 .

#### api.get BuildType( 回调)

别名 `api.get('build.type', callback)`。 。 。 .

#### api.get Build User( 回调) (调用)

别名 `api.get('build.user', callback)`。 。 。 .

#### api.get BuildVersion 代码名( 回调)

别名 `api.get('build.version.codename', callback)`。 。 。 .

#### api.get BuildVersion 递增(召回)

别名 `api.get('build.version.incremental', callback)`。 。 。 .

#### api.get BuildVersion 释放(召回)

别名 `api.get('build.version.release', callback)`。 。 。 .

#### api.get BuildVersionSdk(回调)

别名 `api.get('build.version.sdk', callback)`。 。 。 .

#### api.get ClockMillis( 回调)

别名 `api.get('clock.millis', callback)`。 。 。 .

#### api.get 时钟时间( 回调)

别名 `api.get('clock.realtime', callback)`。 。 。 .

#### api.get 时钟升起时间( 回调)

别名 `api.get('clock.uptime', callback)`。 。 。 .

#### api.get Display 敏感度( 回调)

别名 `api.get('display.density', callback)`。 。 。 .

#### api. getDisplayHeight( 回调)

别名 `api.get('display.height', callback)`。请注意,高度可能排除任何虚拟主按钮行.

#### api.getDisplayWidth(回调)

别名 `api.get('display.width', callback)`。 。 。 .

#### api.keyDown( 键代码, 回调)

发送下键事件 。 应该与 `api.keyUp()`。注意: `api.press()` 自动执行两个事件.

-   **键代码** 这个 [密钥代码](http://developer.android.com/reference/android/view/KeyEvent.html)。所有猴子都支持数字密钥代码,一些猴子支持从密钥名称自动转换到密钥代码(例如. `'home'` 改为 `KEYCODE_HOME`) (中文(简体) ). 但这对数字密钥是行不通的。 最便携的方法就是简单地使用数字密钥代码.
-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.keyUp( 键代码, 回调)

发送密钥事件 。 应该与 `api.keyDown()`。注意: `api.press()` 自动执行两个事件.

-   **键代码** 见 `api.keyDown()`。 。 。 .
-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.list( 回调)

列表支持的变量 .

-   **调用( err, vars)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
    -   **火星** 一组支持的可变名称,用于 `api.get()`。 。 。 .
-   回归: `Api` 执行实例.

#### api.press( 键代码, 回调)

发送密钥新闻事件 .

-   **键代码** 见 `api.keyDown()`。 。 。 .
-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.quit( 回调)

关闭当前猴子会话并退出猴子.

-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.sleep( ms, 回调)

睡眠的时间给定。 可以用来模拟手势.

-   **分钟** 多少毫秒的睡眠时间.
-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.tap(x,y,回调)

给定坐标.

-   **页:1** X坐标.
-   **尔** Y坐标.
-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.touchDown( x, y, 回调)

在给定坐标上发送一个触地下移事件.

-   **页:1** X坐标.
-   **尔** Y坐标.
-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.touchMove(x,y,回调)

在给定坐标上发送触摸移动事件.

-   **页:1** X坐标.
-   **尔** Y坐标.
-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.touchUp(x,y,回调)

在给定坐标上发送触摸事件 .

-   **页:1** X坐标.
-   **尔** Y坐标.
-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api. trackball( x, y, 回调)

在给定坐标上发送轨道球事件.

-   **页:1** X坐标.
-   **尔** Y坐标.
-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.type(文本,回调)

键入给定文本.

-   **文本** 文本 `String`。请注意,只有字符 [密钥代码](http://developer.android.com/reference/android/view/KeyEvent.html) 可输入存在。 也注意到正在使用的任何综合海洋生态系统可能改变或不会改变案文.
-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

#### api.wake( 召回)

从睡眠中唤醒设备并允许用户输入.

-   **回调( err)** 猴子回应时打来的.
    -   **错误** `null` 当成功的时候, `Error` 否则.
-   回归: `Api` 执行实例.

### 多个

缓冲 `Api` 命令并同时交付,以更好地控制时间.

全部执行 `Api` 方法,但没有最后 `callback` 参数.

#### multi. execut( 召回)

发送所有缓冲命令 .

-   **回调( err, 值)** 当猴子响应了所有命令(即只在结尾一次)时调用.
    -   **错误** `null` 当成功的时候, `Error` 否则.
    -   **数值** 所有响应值的数组, 与单个相同 `Api` 回应.

## 更多信息

-   [猴头](http://developer.android.com/tools/help/monkey.html)
    -   [源代码](https://github.com/android/platform_development/blob/master/cmds/monkey/)
    -   [议定书](https://github.com/android/platform_development/blob/master/cmds/monkey/README.NETWORK.txt)
-   [猴子跑车](http://developer.android.com/tools/help/monkeyrunner_concepts.html)

## 捐款

见 [捐款额](https://npmcn.com/package/%40devicefarmer/adbkit-monkey/CONTRIBUTING.md)。 。 。 .

## 许可证

见 [自由主义](https://npmcn.com/package/%40devicefarmer/adbkit-monkey/LICENSE)。 。 。 .

版权所有 网络代理公司,所有权利保留.

## 常见问题

### @devicefarmer/adbkit-monkey 是什么？

Android猴子工具的节点界面\.js\.

### 如何安装 @devicefarmer/adbkit-monkey？

在项目目录运行 npm install @devicefarmer/adbkit-monkey，或使用 pnpm add / yarn add / bun add。

### @devicefarmer/adbkit-monkey 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @devicefarmer/adbkit-monkey 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @devicefarmer/adbkit-monkey 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>= 22。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @devicefarmer/adbkit-monkey 可以商用吗？

@devicefarmer/adbkit-monkey 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @devicefarmer/adbkit-monkey 的下载量有多少？

根据 npm 官方下载统计，@devicefarmer/adbkit-monkey 在 2026/10/12 – 2026/11/10 这 30 天内被下载 2,709,436 次，日均约 90,315 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @devicefarmer/adbkit-monkey 还在维护吗？

最新版本 2\.0\.0 发布于 2026/10/25（18 天前）；至今共发布 5 个版本，其中过去 12 个月发布了 1 个；首次发布于 2020/05/16。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

