@aiot-toolkit/emulator
Version:
vela emulator tool.
174 lines (136 loc) • 4.35 kB
Markdown
## emulator
Vela 模拟器 SDK
模拟器的介绍可参考[开发帮助文档](https://xiaomi.f.mioffice.cn/docx/doxk4Rk6x67GanHlzQ8bEOrxtEe)里的「模拟器」章节
## 目录结构
| 目录 | 描述 |
| -------- | ------------------------------------------------------------------------ |
| avd | 模拟器的AVD,配置统一放置$HOME/.vela/vvd 目录下 |
| instance | 模拟器实例,不同的Vela镜像版本会使用不同的instance,通过findInstance确定 |
| static | 创建AVD时需要用到的静态资源,常量配置文件 |
| typing | 接口定义 |
| utils | 工具函数 |
## 安装
```bash
npm install @aiot-toolkit/emulator
```
## 使用
### 初始化环境
```ts
import os from 'os'
import path from 'path'
import { VvdManager } from '@aiot-toolkit/emulator'
async function main() {
const sdkHome = path.resolve(os.homedir(), '.export_dev')
const velaAvdCls = new VvdManager({ sdkHome })
const downloder = await velaAvdCls.downloadSDK({
force: true,
cliProgress: false,
parallelDownloads: 6
})
downloder.on('progress', (progress) => {
console.log(
`progress: ${progress.formattedSpeed} ${progress.formattedPercentage} ${progress.formatTotal} ${progress.formatTimeLeft}`
)
})
await downloder.downlodPromise
console.log('download success')
}
main()
```
### 创建 VVD
```ts
import os from 'os'
import path from 'path'
import { IAvdArchType, VvdManager, VelaImageType, getDefaultImage } from '@aiot-toolkit/emulator'
const velaAvdCls = new VvdManager({
sdkHome: path.resolve(os.homedir(), '.export_dev')
})
/** 创建一个 466 × 466 带 miwear 的模拟器 */
export async function createVVd() {
const defaultImage = getDefaultImage()
velaAvdCls.createVvd({
name: avdName,
imageType: defaultImage,
arch: IVvdArchType.arm,
imageDir: path.dirname(velaAvdCls.getLocalSystemPath(defaultImage)),
width: '466',
height: '466'
})
}
```
### 启动 VVD
```ts
import os from 'os'
import path from 'path'
import { IAvdArchType, VvdManager, VelaImageType } from '@aiot-toolkit/emulator'
const velaAvdCls = new VvdManager({
sdkHome: path.resolve(os.homedir(), '.export_dev')
})
export async function startVvd(vvdName: string) {
/**
* coldBoot:boolean 是否冷启动
* emulatorInstance: EmulatorInstance 模拟器实例, 可以通过它与模拟器进行命令交互
* getAgent: () => Promise<GrpcEmulator> 获取模拟器的Agent,可以通过它与模拟器进行屏幕交互
*/
const { coldBoot, emulatorInstance, getAgent } = await velaAvdCls.startVvd({
vvdName
})
// 启动应用
emulatorInstance.startApp('com.xiaomi.mipicks')
const velaAgent = await getAgent()
// 获取模拟器截图
const imgBuffer = await velaAgent.getScreenshot()
// 点击模拟器指定位置,
await velaAgent.sendMouse({
x: 100,
y: 100,
// 按下
buttons: 1
})
await velaAgent.sendMouse({
x: 100,
y: 100,
// 松开
buttons: 0
})
}
```
### 完整示例
```ts
// 安装 npm install @aiot/emulator
import os from 'os'
import path from 'path'
import { IAvdArchType, VvdManager, VelaImageType } from '@aiot-toolkit/emulator'
const velaAvdCls = new VvdManager({
sdkHome: path.resolve(os.homedir(), '.export_dev')
})
/** 创建一个 466 × 466 带 miwear 的模拟器 */
velaAvdCls.createVvd({
name: 'O62',
arch: IAvdArchType.arm64,
height: '466',
width: '466',
imageType: VelaImageType.REL
})
/** 启动名为 'O62' 的模拟器 */
velaAvdCls.startVvd({
vvdName: 'O62'
})
export async function startVvd(vvdName: string) {}
export async function createVVd() {}
async function main() {
const downloder = await velaAvdCls.downloadSDK({
force: true,
cliProgress: false,
parallelDownloads: 6
})
downloder.on('progress', (progress) => {
console.log(
`progress: ${progress.formattedSpeed} ${progress.formattedPercentage} ${progress.formatTotal} ${progress.formatTimeLeft}`
)
})
await downloder.downlodPromise
console.log('download success')
}
main()
```