起因是看到stf(设施治理平台)有开源了adbkit这个精简的adb交互库,又感觉部署stf太麻烦了,就想着用adbkit实现一个精简的设施治理,用于自动化测试
先提供一个思路
后期
首先这是一个node我的项目,先引入adbkit
npm install adbkit --save
监听设施
把多个android手机插入同一台电脑,如果每次都用adb devices去查问,未免有些太过麻烦,而adbkit提供了监听的办法
const client = AdbInteraction.getInstance().getClient()client.trackDevices().then((tracker) => { tracker.on("add", async (device) => { console.log(device.id) }}
其中的device.id就是设施的serial号(即adb devices中的id)
设施治理
当设施连贯后,能够在监听事件中对设施调配一个端口,并绑定端口
const client = AdbInteraction.getInstance().getClient()const bridge = {}client.trackDevices().then((tracker) => { tracker.on("add", async (device) => { // 指定一个端口,或者能够写一个办法去调配 const availablePort = 3000 // 创立一个adb usb连贯 bridge[serial] = client.createTcpUsbBridge(serial, { auth: () => Promise.resolve() }) // 绑定端口 bridge[serial].listen(availablePort).on("error", (e) => { console.log("err" + e) }) // 设施信息写入数据库 // 如serial号,port号 }}
这里咱们假如调配3001端口给刚刚连贯到的设施,间接执行命令
adb connect ip:3001
这里的ip是插着android设施的那台主机,这样咱们就胜利连贯了设施
治理多个设施
依照这个思路,咱们能够同时开发出一套服务,通过调用接口来查问以后连贯着的设施
咱们选用koa2的框架
git clone https://github.com/javieraviles/node-typescript-koa-rest.git
而后进行这个我的项目的教学进行惯例部署
npm installnpm run watch-server
在controller层定义接口(有点像spring)
咱们能够从controller定义一个接口,去从数据库中读取咱们方才保留过的数据
@request("get", "/devices")@summary("Find devices")public static async deviceList(ctx: any): Promise<void> { console.log(ctx.query.biz) ctx.status = 200; // 这里的数据来源于数据库,可自定义实现 ctx.body = DeviceDbManager.getInstance().fetchDeviceList();}
咱们能够返回这样的格局
[ { "serial": "#####", "ip": "192.168.x.x", "port": 3001, "connStatus": 1, "updateTime": "2023-08-31T04:53:55.113Z" }]
至此就能够实现一个简略的设施治理,查问
也能够对设施进行借用、开释等操作
残缺的我的项目也在这个地址分享
https://github.com/sonar-su/android-device-manager