Socket
Socket
Sign inDemoInstall

android-bot

Package Overview
Dependencies
27
Maintainers
1
Versions
36
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    android-bot

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


Version published
Weekly downloads
5
decreased by-58.33%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

翻译

中文 | 英文-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 clientNode 环境下使用 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列出文件夹
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 目录

Keywords

FAQs

Last updated on 22 Mar 2024

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc