npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

android-bot

v2.8.11

Published

Android-bot is built on the AutoBot JavaScript library and provides features such as wireless screen casting and real-time control within a local network, key simulation, screen recording, screenshot capture, layout analysis, file management, application

Downloads

155

Readme

翻译

中文 | 英文-GPT

android-bot

android-bot 是基于 AutoBot 得 JavaScript SDK,同时支持 浏览器环境 和 Node 环境,Node 环境下,支持自动扫描局域网客户端

NPM| Github| AutoBot 文档

目前已经实现了什么功能 API?

  • 获取系统信息(型号信息,硬件信息...)
  • 屏幕图像(支持 jpg,base64,支持 websocket 实时输出)
  • 触控输入(单指手势,多指手势,支持 websocket 实时输入)
  • 按键输入(按键模拟,文字输入,支持中文)
  • 屏幕布局(支持 XML,JSON)
  • 文件管理(上传,查询,删除)
  • 剪切板管理(读取和修改)
  • 应用管理(安装,卸载,清除数据,启动停止,详情查看)
  • 联系人管理 (增删改查)
  • 录制屏幕,熄屏控制,播放音乐,短信查询等
  • 通知监听,剪切板监听等

成功案例

相关案例

它可以用来干什么?

  • 局域网内无线投屏/实时控制,按键模拟,录制屏幕,布局分析,文件管理,应用管理,通讯录管理
  • 通过 NodeJS,Python,Java,C++等语言,只需要调用 Http Api,即可开发譬如:远程投屏控制,自动化测试,自动化运营、批量处理、机器人、自动回复等等

支持浏览器和 NodeJS 环境

在 Node 环境下,支持局域网的网络发现,能自动扫描同个局域网下的设备, 在浏览器环境下,则需要获取设备的 ip 和端口,手动连接

使用方法

准备工作

需要设备安装 AutoBot APP,且成功运行服务,具体可以参考AutoBot 官网->准备工作部分

重要的事情说三遍:

  • 此库是基于 AutoBot 官方 Http API 和 WebSocket API 封装,请你务必先仔细阅读AutoBot 文档
  • 此库是基于 AutoBot 官方 Http API 和 WebSocket API 封装,请你务必先仔细阅读AutoBot 文档
  • 此库是基于 AutoBot 官方 Http API 和 WebSocket API 封装,请你务必先仔细阅读AutoBot 文档

安装支持库

npm i android-bot -s

浏览器内使用

  • 浏览器环境下由于不支持 udp,需要主动创建设备
//引入库
import { BrowserWebSocket, Device } from "android-bot";

async function main() {
  //创建一个设备,设备的ip和端口来源于AutoBot APP,此处需要修改为你自己设备的ip和端口
  const device = new Device("192.168.1.100:18080");
  //获取屏幕信息
  let iScreenInfo = await device.screenInfo();
  //获取屏幕截图
  let screenImg = await device.screenShot();
  //获取系统信息
  let iDeviceInfo = await device.getSystemInfo();
  //获取屏幕ui布局的JSON格式
  let iuiObjectJSON = await device.screenJson();
  //获取屏幕ui布局的XML格式,可以使用
  let iuiObjectXML = await device.screenXml();
  //手势滑动(左滑)
  await device.gesture({
    duration: 200,
    points: [
      { x: 168, y: 558 },
      { x: 172, y: 562 },
      { x: 276, y: 562 },
      { x: 306, y: 560 },
      { x: 348, y: 552 },
      { x: 390, y: 548 },
      { x: 442, y: 540 },
      { x: 470, y: 540 },
      { x: 500, y: 538 },
      { x: 520, y: 538 },
      { x: 548, y: 538 },
      { x: 566, y: 538 },
      { x: 596, y: 540 },
    ],
  });
  //....
}

main();

Node 使用

  • Node 环境下,可以使用 AdbDevice 扫描局域网内的设备
import { AdbDevice, NodeWebSocket, Device } from "android-bot";
import FormData from "form-data";
import fs from "fs";
async function main() {
  //node环境下可以自动扫描局域网内的设备
  const devices = await AdbDevice.listWifiDevices();
  if (devices[0]) {
    let device = devices[0];
    //使用Node环境下的websocket client
    device.setWebSocketClient(new NodeWebSocket());
    let mScreenControl = device.mScreenControl;
    //监听屏幕方向发生改变的消息
    mScreenControl.addScreenOrentationChangeListener(function (
      width,
      height,
      rotation,
      isLandscape
    ) {
      console.log(
        "屏幕发生改变:" +
          `宽度:${width},高度:${height},是否横屏:${isLandscape},方向:${rotation}`
      );
    });
    //获取屏幕截图
    let screenImg = await device.screenShot();
    //获取系统信息
    let iDeviceInfo = await device.getSystemInfo();
    console.log(iDeviceInfo);
    //获取屏幕ui布局的JSON格式
    let iuiObject = await device.screenJson();
  }
}

main();

实时屏幕图像

//引入库
import { BrowserWebSocket, Device } from "android-bot";

async function main() {
  //创建一个设备,设备的 ip 和端口来源于 AutoBot APP
  const device = new Device("192.168.7.119:18080");

  //如果你需要实时;投屏控制(实时屏幕 jpg 图像流,实时触摸文本输入),通知监听,剪切板监听
  //那么你需要设置 websocket client,Node 环境下使用 NodeWebSocket,浏览器环境下你需要使用 BrowserWebSocket
  //mScreenControl 为实时信息的代理对象,你可以用来监听屏幕图像,通知,剪切版信息
  device.setWebSocketClient(new BrowserWebSocket());

  //接收到新的通知信息
  device.mScreenControl.addNotificationChangeListener(function (
    notificationMessage
  ) {
    console.log("接收到新的通知:", notificationMessage);
  });

  //接收到剪切板发生改变的信息
  device.mScreenControl.addClipTextChangeListener(function (text) {
    console.log("接收到粘贴板发生改变通知:", text);
  });

  //实时的屏幕图像回调,注意浏览器环境下 img 为 Blob,Node 环境下为 arrayBuffer
  device.mScreenControl.addScreenChangeListener(function (screenImg) {
    console.log("接收到新的屏幕图像:", screenImg);
  });

  //弱网环境下使用被动式屏幕帧,网络好的情况下可以使用主动式获取屏幕图像帧;
  //只有调用了下边2种方法,屏幕图像的回调才能收到消息
  //device.mScreenControl.startScreenStream();//主动式
  device.mScreenControl.startScreenStreamByPassive(); //被动式
}

main();

更多案例

核心类

Device

| function | 含义 | 备注 | | ---------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | addErrorListener | 添加全局错误监听 | | setWebSocketClient | 设置 websocket client | Node 环境下使用 NodeWebSocket,浏览器环境下你需要使用 BrowserWebSocket | | hello | 欢迎信息 | | version | 获取核心库版本 | | checkNotification | 检查此设备是否能监听通知 | 监听通知需要 android 系统版本>=android9 | | getDeviceId | 获取设备的 DeviceId | 此 Id 有 AutoBot 生成,非 andorid id | | startRecoreScreen | 启动屏幕录像 | | stopRecoreScreen | 停止屏幕录像 | | getSystemInfo | 获取系统信息 | | screenInfo | 屏幕信息 | | screenJson | 屏幕 UI 布局的 json 格式 | | screenXml | 屏幕 Ui 布局的 XML 格式 | | screenShotBase64 | 屏幕截图的 jpeg base64 格式 | | screenShot | 屏幕截图 jpeg 二进制 | | screenRotation | 屏幕旋转方向 | | getAllContact | 获取所有的联系人 | | insertContact | 插入新的联系人 | | deleteContact | 删除联系人 | | getClipText | 获取粘贴板数据 | | setClipText | 设置粘贴板数据 | | clearText | 清除输入框数据 | 需要设备的输入框处于获取焦点的状态,类似 ctrl+A,然后在执行 delete 的效果 | | turnScreenOff | 开启熄屏控制模式 | | getIp | 获取设备的所有 ip | | getAllSms | 获取所有的短信,支持获取指定号码的短信 | | deleteSms | ~~删除短信~~ | 此方法已弃用 ,由于 android 设备安全限制,请到短信应用删除短信 | | getTopActivity | 获取设备顶层的活动 Activity 信息 | | getStartActivity | 根据包名获取启动类 | 不传获取顶层 activity 的启动 activity 信息 | | startPackage | 根据包名启动应用 | | stopPackage | 根据包名停止应用 | | clearPackage | 根据包名清除应用数据 | | getAllPackage | 获取设备应用所有应用列表 | | getPackageInfo | 根据包名获取详细的应用信息 | | cancelAllNotifications | ~~移除所有的通知 ~~ | 此方法已弃用 | | callPhone | 拨打电话 | | endCall | 挂断电话 | | inputText | 输入字符串,支持多种语言 | | inputChar | 输入字符仅支持 ACSII 码 | | execCmd | 执行 shell 命令 | | pressKeyCode | 模拟按键 | 查询对应的 keyCode 可以参考 adb 用法文档,也可以参考 android sdk 的 KeyEvent.java 类 | | click | 点击 | 支持百分比坐标和绝对坐标 | | longClick | 长按 | 支持百分比坐标和绝对坐标 | | press | 长按 x 毫秒 | 支持百分比坐标和绝对坐标 | | swipe | 滑动 | 支持百分比坐标和绝对坐标 | | gesture | 单指手势 | | gestures | 多指手势 | | listFile | 列出文件夹 | | turnSafeModeOn | 开启安全模式 | 安全模式下无法使获取屏幕布局,无法使用文字查找,选择器查找功能,且 websocket 通知信息将不再通知用 | | turnSafeModeOff | 关闭安全模式 | | isSafeMode | 判断是否是安全模式 | | upload | 上传一个文件 | | | uploadUrl | 获取上传文件得 url | 需要构建一个 FormData 对象,file 为 file 对象,path 为要上传到得文件夹 | | delFile | 删除一个文件或文件夹 | 传入一个路径,文件夹:/sdcard/tmp,文件/sdcard/hello.txt | | downloadUrl | 获取一个文件得下载路径 | 传入一个路径,获取下载链接,浏览器环境你可以直接打开这个链接进行下载,node 环境下你可以使用 download 库或其他一些下载库 | | getDisplayName | 获取设置的自定义设备名称 | | setDisplayName | 设置的自定义设备名称 | | playMusic | 播放网络音乐 | 传入一个音乐的 url 实现自定义播放网络音乐 ,此接口需要 android 版本>=9.0 | | stopMusic | 停止播放网络音乐 | 停止正在播放的网络音乐 ,此接口需要 android 版本>=9.0 | | execScript | 执行 autox.js 脚本 | 注意调用此功能必去安装带 autox 执行环境的 autobot,否则无法运行 | | stopAllScript | 停止所有的 autox.js 脚本 | 注意调用此功能必去安装带 autox 执行环境的 autobot,否则无法运行 | | exit | 停止 AutoBot 服务端 | 注意,停止后你将无法调用任何接口,你需要重新在 AutoBot 端激活服务端 |

ScreenControl

| function | 含义 | 备注 | | --------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | | startScreenStream | 通知服务端主动推送屏幕图像 | | startScreenStreamByPassive | 被动式通知服务端推送屏幕图像 | 弱网环境下,主动式推送屏幕图像会有较大的延迟,被动式会在接受到屏幕图像后,发送消息通知服务端传输新的屏幕图像,因此获取的屏幕图像更及时 | | setScreenStreamConfig | 设置屏幕图像的帧率,缩放和压缩比 | 注意这里的 fps 为延迟多少 ms(毫秒)收取新的屏幕图像 | | stopScreenStream | 停止屏幕图像推送 | | pressKeyCode | 模拟按键 | 和 Device 的 pressKeyCode 参数一致,不一样的是这里通过 websocket 发送数据,因此实时性更高 | | sendSpaceKey | 发送空格按键 | | | sendBackSpaceKey | 发送退格按键 | | | sendInputText | 输入字符串,支持多种语言 | | | sendInputChar | 输入字符仅支持 ACSII 码 ,按键模拟方式实现,支持屏幕密码解锁,支付密码输入等场景 | | | addScreenOrentationChangeListener | 添加屏幕方向发生改变的监听 | 此通知会在初次链连接成功后就通知一次,方便你为渲染做好准备 | | addNotificationChangeListener | 添加通知消息发生改变的监听 | | | addScreenChangeListener | 添加屏幕图像的监听 | 当你调用主动式(startScreenStream)或者被动式(startScreenStreamByPassive)通知服务端传输屏幕图像后,此监听才有数据返回 | | addClipTextChangeListener | 添加粘贴板发生改变的监听 | |

FAQ

我使用了实例代码,为什么代码报错?

由于 Node 环境默认是不支持 websocket 的,需要通过第三方库来实现 WebSocket,因此 Node 环境下的 WebSocket 和浏览器环境下的 WebSocket 有少许不一样

  • 因此,如果你的代码在浏览器环境运行请导入 BrowserWebSocket,在 Node 环境下请导入 NodeWebSocket,另外请一定不要导入多余的对象,比如在浏览器环境下错误的导入了 AdbDevice,NodeWebSocket

  • Node 导入示例

import { AdbDevice, NodeWebSocket, Device } from "android-bot";
  • 浏览器导入示例
import { BrowserWebSocket, Device } from "android-bot";

有些方法的参数我还是有疑问?

android-bot是对 AutoBot 的 Http API 和 WebSocket API 的封装,你可以查看对应的AutoBot 官

二次开发

获取代码

git clone https://github.com/automan-bot/android-bot.git
npm i

NPM scripts

  • demo_browser:运行浏览器 demo
  • demo_node:运行 Node 环境下 demo
  • dev: 以监听模式监听 src/的文件改变,在 dist 下生成新的 Node 环境编译包
  • dev:browser:以监听模式监听 src/的文件改变,在 dist 下生成浏览器环境编译包
  • build : 编译生成 Node 环境和浏览器环境的编译包
  • clean : 清空/dist 目录