全部产品
Search
文档中心

无影云手机:Windows SDK C++版

更新时间:Jun 22, 2026

本文介绍如何使用无影云手机的Windows SDK C++版。

1. 快速开始

1.1 获取SDK和DEMO

下载 SDK 和 Demo

集成环境要求

Windows X64 release

引入SDK

Visual Studio 2019示例:

打开项目属性页->配置属性->VC++目录,在包含目录添加asp-client-sdk的include目录

打开项目属性页->配置属性->VC++目录,在库目录添加asp-client-sdk的lib目录

打开项目属性页->配置属性->链接器->常规,在附加库目录添加asp-client-sdk的lib目录

打开项目属性页->配置属性->链接器->输入,在附加依赖项添加asp-client-sdk.lib、asp-engine.lib、glog.lib

qt creator示例:

项目pro文件添加

INCLUDEPATH+=$$PWD/asp-client-sdk/include \
LIBS+=$$PWD/asp-client-sdk/lib/asp-client-sdk.lib \
      $$PWD/asp-client-sdk/lib/asp-engine.lib \
      $$PWD/asp-client-sdk/lib/glog.lib \

快速使用Demo

下载Windows_Demo_Release,解压缩得到 server 和 client 两个目录,分别是服务端和客户端的DEMO。

启动服务端

修改配置

{
    "httpPort": "8328",
    "accessKeyId": "AK",
    "accessKeySecret": "SK",
    "androidRegionId": "cn-hangzhou"
}

修改其中的 AK 和 SK 即可,androidRegionId填写为实例的RegionId

运行其中的 server/run_server.bat , 会提示

2024-11-01T13:48:27.002Z Server is running on http://127.0.0.1:8328/listAic

服务端启动完成

运行客户端

{
  "CLOUD_SCREENSIZE_HEIGHT": 100,
  "CLOUD_SCREENSIZE_WIDTH": 100,
  "DEBUG_MODE": 2,
  "DISPLAY_COL": 11,
  "DISPLAY_GROUP": 20,
  "GROUPIDS": [
       "ag-1jknz4zyznleim503"
  ],
  "GROUP_SCREENSIZE_HEIGHT": 100,
  "GROUP_SCREENSIZE_WIDTH": 100,
  "LOCAL_SCREENSIZE_HEIGHT": 720,
  "LOCAL_SCREENSIZE_WIDTH": 480,
  "DISPLAY_SCALE": 1,
  "GROUP_SCALE": 8,
  "MAX_PHONE_NUM": 0,
  "PROXY_CONN_TYPE": 0,
  "QUIC_OPTION": false,
  "PHONE_URL": "http://127.0.0.1",
  "PORT": 8328,
  "AUDIO_ENABLE": false,
  "USE_DUMP": false,
  "USE_OPENGL": true
}

GROUPIDS 修改为需要控制的云手机实例组 ID ag-开头, 可以支持多个 GROUPID, 修改为您创建的 ag 开头的云手机实例组 ID,保存。

配置参数说明:

CLOUD_SCREENSIZE_HEIGHT: 初始化云端分辨率高
CLOUD_SCREENSIZE_WIDTH: 初始化云端分辨率宽
DEBUG_MODE: 日志级别 0-无日志 1-debug 2-info
DISPLAY_COL: 10 展示最大列
GROUPIDS: 分组,支持列表
GROUP_SCREENSIZE_HEIGHT: 初始化本地缩略图窗口高
GROUP_SCREENSIZE_WIDTH: 初始化本地缩略图窗口宽
LOCAL_SCREENSIZE_HEIGHT: 初始化本地主控窗口高
LOCAL_SCREENSIZE_WIDTH: 初始化本地主控窗口宽
DISPLAY_SCALE: 主控缩放比例
GROUP_SCALE: 缩略图缩放比例
MAX_PHONE_NUM: 最多连接数量
PROXY_CONN_TYPE: 连接类型,固定
QUIC_OPTION: 是否使用quick 固定
PHONE_URL: 服务端地址,
PORT: 服务端端口
AUDIO_ENABLE: 是否启用音频
EndUserId: 协同流用户名
IS_COO: 是否协同流
SALE_MODE: 是否CPS
SHOW_INSTENCE_NAME: 显示名称还是ID
USE_OPENGL: 是否启用opengl渲染

运行 client/WuyingDemo.exe

1.2 对接流程

image

1.3 最佳实践

方案详见无影云手机快速集成最佳实践。 云手机集成的总体方案如下图所示

image

有多种登录方式,获取集成SDK所需要的连接云手机Ticket凭证,流程图为:

image

具体代码可以参考生命周期接口的参考代码。

2. 生命周期接口

2.1 创建缩略图连接

函数原型: static AspClient* create(AspTicket& ticket, wuying::asp::shared_ptr<IAspClientCallback> callback);

参数说明:

参数名称

参数类型

描述

ticket

AspTicket

AspTicket包含了是否为缩列图、实例信息和连接凭证,参见4.1 AspTicket

callback

IAspClientCallback

连接回调,参见2.5.1 连接回调代理IAspClientCallback

功能描述:该接口建立与云手机缩略图连接。

代码示例:

AspTicket ticket;
// 设置ticket
ticket.ticket = "";
// 设置AppInstanceId
ticket.id = "";//AppInstanceId;
// 设置user
ticket.user = "";//云手机名称
//uuid与后端uuid相同
ticket.uuid = "wyClient";
//固定Windows
ticket.systemType = "Windows";
//固定0
ticket.partner = 0;
//是否缩略图 固定为true
ticket.isThumbnailEnable = true;

//添加连接回调,具体见后文
shared_ptr<AspClientCbImpl> iClient(new AspClientCbImpl(cert.Id));
AspClient *client=AspClient::create(ticket, iClient);

//剪贴板回调,具体见后文
shared_ptr<AspClipboardlmpl> clipboardCallback(new AspClipboardlmpl());
client->setClipboardCallback(clipboardCallback);

//添加Shell命令回调,具体见后文
shared_ptr<AspShellCmdlmpl> shellCmdCallBack(new AspShellCmdlmpl());
client->setShellCmdCallback(shellCmdCallBack);

//设置缩略图窗口大小 with:宽 int height:高 int 1:fps int
client->setThumbnailDisplay(with, height, 1);

//设置连接类型 固定为socket和false
client->setProxyConnType(ASP_CONN_SOCKET);
client->setQuicOption(false);

//设置窗口回调
shared_ptr<IAspDisplayCallback> iDisplay(nullptr);
auto display = client->addDisplay(iDisplay);

//连接手机
client->open();

2.2 创建主控连接

函数原型: static AspClient* create(AspTicket& ticket, wuying::asp::shared_ptr<IAspClientCallback> callback);

参数说明:

参数名称

参数类型

描述

ticket

AspTicket

AspTicket包含了实例信息和连接凭证,参见4.1 AspTicket

callback

IAspClientCallback

连接回调,参见2.5.1 连接回调代理IAspClientCallback

功能描述:该接口建立与云手机主控连接

代码示例:

AspTicket ticket;
// 设置ticket
ticket.ticket = "";
// 设置AppInstanceId
ticket.id = "";//AppInstanceId;
// 设置user
ticket.user = "";//云手机名称
//uuid与后端uuid相同
ticket.uuid = "wyClient";
//固定Windows
ticket.systemType = "Windows";
//固定0
ticket.partner = 0;
//是否缩略图 固定为true
ticket.isThumbnailEnable = true;

//添加连接回调,具体见后文
shared_ptr<AspClientCbImpl> iClient(new AspClientCbImpl(cert.Id));
AspClient *client=AspClient::create(ticket, iClient);

//剪贴板回调,具体见后文
shared_ptr<AspClipboardlmpl> clipboardCallback(new AspClipboardlmpl());
client->setClipboardCallback(clipboardCallback);

//添加Shell命令回调,具体见后文
shared_ptr<AspShellCmdlmpl> shellCmdCallBack(new AspShellCmdlmpl());
client->setShellCmdCallback(shellCmdCallBack);

//设置缩略图窗口大小 with:宽 int height:高 int 1:fps int
client->setThumbnailDisplay(with, height, 1);

//设置连接类型 固定为socket和false
client->setProxyConnType(ASP_CONN_SOCKET);
client->setQuicOption(false);

//设置窗口回调
shared_ptr<IAspDisplayCallback> iDisplay(nullptr);
auto display = client->addDisplay(iDisplay);

//连接云手机
client->open();

2.3 reopen

函数原型:void reopen(std::string& ticket)

功能描述:重新打开连接,或断联后重连,仅close(false)有效。

参数说明:

参数名称

参数类型

描述

ticket

std::string

ticket为连接凭证,有效期一般10分钟。

代码示例:

client->reopen(ticket);

2.4 close

函数原型:void close(bool destroyClient = false) 

功能描述:关闭连接

参数说明:

参数名称

参数类型

描述

destroyClient

bool

是否清理资源,默认false

代码示例:

client->close(false)

2.5 回调说明

2.5.1 连接回调代理IAspClientCallback

代理接口说明:

接口

描述

void onThumbnailUpdate(void* buffer, uint32_t width, uint32_t height, AspImageFormat format)

连接云手机成功缩略图的回调,format参见5.2 AspImageFormat

void onConnectEvent(ConnectEvent& event)

连接云手机状态事件的回调,event参见4.2 ConnectEvent

代码示例:

class AspClientCbImpl : public IAspClientCallback
{
public:
    AspClientCbImpl() {}
    //缩略图回调
    void onThumbnailUpdate(void* buffer, uint32_t width, uint32_t height, AspImageFormat format) override {

    }
    //连接事件
    void onConnectEvent(ConnectEvent& event) override {
       switch(event.type) {
          case ConnectEventType::EVENT_CONNECT_SUCCESS:
              
              break;
          case ConnectEventType::EVENT_CONNECT_FAILED:
              
              break;
          case ConnectEventType::EVENT_DISCONNECT_SUCCESS:
              
              break;
          case ConnectEventType::EVENT_RECONNECT_START:
              
              break;
          case ConnectEventType::EVENT_RECONNECT_FAILED:
              
              break;
          default:
              
              break;
        }
    }
};

2.5.2 主控流回调代理IAspDisplayCallback

代理接口说明:

接口

描述

void onImageFrameReady(AspImageFrame& frame)

连接云手机成功后主控流的回调,frame参见4.3 AspImageFrame

代码示例:

class AspDisplayCbImpl : public IAspDisplayCallback
{
public:
    void onImageFrameReady(AspImageFrame& frame) override {
        //主控的图像byte数组指针,长度为长*宽*4
        uint8_t* ptr = static_cast<uint8_t*>(frame.buffer);
        //图像的宽
        int width = frame.width;
        //图像的高
        int height = frame.height;
        //必须手动释放
        frame.releaseBuffer();
    }
};

2.5.3 音频回调代理AspAudio

代理接口说明:

接口

描述

void onAudioFrameRender(AspAudioFrame &frame)

无需实现, frame参见4.4 AspAudioFrame,目前音频渲染包含在SDK中。

void onAudioVolumeUpdate(uint32_t volume)

无需实现,目前音频渲染包含在SDK中。

void onAudioMuteUpdate(bool isMute)

无需实现,目前音频渲染包含在SDK中。

void onAudioPlaybackUpdate(AspAudioPlayback &playback)

无需实现,playback参见4.5 AspAudioPlayback,目前音频渲染包含在SDK中。

void onAudioPlaybackStart()

无需实现,目前音频渲染包含在SDK中。

void onAudioPlaybackStop()

无需实现,目前音频渲染包含在SDK中。

代码示例:

class AspAudioImpl : public AspAudio
{
public:
    void onAudioFrameRender(AspAudioFrame &frame) override{
    
    }
    void onAudioVolumeUpdate(uint32_t volume) override{
    
    }
    void onAudioMuteUpdate(bool isMute) override{
    
    }

    void onAudioPlaybackUpdate(AspAudioPlayback &playback) override{
    
    }

    void onAudioPlaybackStart() override{
    
    }
    void onAudioPlaybackStop() override{
    
    }
};

3. 业务接口

3.1 日志接口

3.1.1 初始化

功能描述:该接口可以打印SDK内部日志,用于定位问题。

代码示例:

//初始化日志,AspLogSinkImpl为日志回调
auto logSinkImpl = std::make_shared<AspLogSinkImpl>();
AspLogSink::setLogSink(logSinkImpl.get());

3.1.2 回调代理AspLogSink

代理接口说明:

接口

描述

void debug(const std::string& tag, const std::string& msg)

SDK debug日志回调

void info(const std::string& tag, const std::string& msg) 

SDK info日志回调

void warning(const std::string& tag, const std::string& msg)

SDK warning日志回调

void fatal(const std::string& tag, const std::string& msg)

SDK fatal日志回调

void error(const std::string& tag, const std::string& msg)

SDK error日志回调

代码示例:

#include "AspLogSink.h"

using namespace wuying::asp;

class AspLogSinkImpl : public AspLogSink
{
public:
    AspLogSinkImpl() {

    }

    void debug(const std::string& tag, const std::string& msg) override {
        //打印debug日志
    }
    void info(const std::string& tag, const std::string& msg) override {
        //打印info日志
    }
    void warning(const std::string& tag, const std::string& msg) override {
        //打印warning日志
    }
    void fatal(const std::string& tag, const std::string& msg) override {
        //打印fatal日志
    }
    void error(const std::string& tag, const std::string& msg) override {
        //打印error日志
    }
};

3.2 缩略图业务接口

3.2.1 suspendThumbnailDisplay

函数原型:void suspendThumbnailDisplay() 

功能描述:挂起缩略图的图像,不推流

代码示例:

client->suspendThumbnailDisplay();

3.2.2 resumeThumbnailDisplay

函数原型:void resumeThumbnailDisplay() 

功能描述:恢复缩略图的推流,可以强制推一帧

代码示例:

client->resumeThumbnailDisplay();

3.3 主控其他功能

3.3.1 setOutputImageFormat

函数原型:void setOutputImageFormat(AspImageFormat format)

功能描述:设置主控回调帧格式

参数说明:

参数名称

参数类型

描述

format

AspImageFormat

主控回调帧格式,具体参见5.2 AspImageFormat

代码示例:

client->setOutputImageFormat(AspImageFormat::BGRA);

3.3.2 requestGraphicsKeyFrame

函数原型:void requestGraphicsKeyFrame(AspDisplay* display) = 0;

功能描述:推一帧主控的关键帧,参数AspDisplay

参数说明:

参数名称

参数类型

描述

display

AspDisplay*

显示类指针

代码示例:

client->requestGraphicsKeyFrame(display);

3.3.3 setGraphicsQuality

函数原型:void setGraphicsQuality(AspImageQuality quality) = 0;

功能描述:设置画质,画质跟分辨率有关系,一般设置为AUTO,详细参数参见结构体

参数说明:

参数名称

参数类型

描述

quality

AspImageQuality

图像质量参见5.4 AspImageQuality

client->setGraphicsQuality(ASP_IMAGE_QUALITY_AUTO)

3.3.4 setGraphicsFps

函数原型:void setGraphicsFps(int fps) = 0;

功能描述:设置fps

参数说明:

参数名称

参数类型

描述

fps

int

帧率

代码示例:

client->setGraphicsFps(30)

3.3.5 setGraphicsBitrate

函数原型:void setGraphicsBitrate(int32_t bps) = 0;

功能描述:设置码率,码率影响图片的大小

参数说明:

参数名称

参数类型

描述

bps

int32_t

码率

以下码率仅供参考:

画质

码率

低画质

1*1024

中画质

5*1024

高画质

10*1024

不失真

50*1024

代码示例:

client->setGraphicsBitrate(1*1024)

3.4 鼠标

3.4.1 sendMouseClick

函数原型:void sendMouseClick(AspAction action, uint32_t button, uint32_t buttonState) = 0;

功能描述:鼠标点击

参数说明:

参数名称

参数类型

描述

action

AspAction

参见5.5 AspAction

button

uint32_t

参见5.6 AspMouseButtonMask

buttonState

uint32_t

参见5.7 AspMouseButton

代码示例:

//鼠标左键按下
display->sendMouseClick(AspAction::ACTION_DOWN, ASP_MOUSE_BUTTON_MASK_L, ASP_MOUSE_BUTTON_LEFT);
//鼠标左键弹起
display->sendMouseClick(AspAction::ACTION_UP, ASP_MOUSE_BUTTON_MASK_L, ASP_MOUSE_BUTTON_LEFT);

3.4.2 sendMouseMove

函数原型:virtual void sendMouseMove(uint32_t x, uint32_t y, uint32_t buttonState) = 0;

功能描述:鼠标移动

参数说明:

参数名称

参数类型

描述

x

uint32_t

云手机横坐标

y

uint32_t

云手机纵坐标

buttonState

uint32_t

参见5.6 AspMouseButtonMask

代码示例:

//x y 为云机的x y坐标
sendMouseMove(x, y, ASP_MOUSE_BUTTON_MASK_L)

3.5 键盘

3.5.1 sendKeyEvent

函数原型:virtual void sendKeyEvent(AspAction action, int scancode) = 0;

功能描述:键盘事件

参数说明:

参数名称

参数类型

描述

action

AspAction

操作类型参见5.5 AspAction

scancode

int

按键扫描码

代码示例:

//键盘按下
display->sendKeyEvent(AspAction::ACTION_DOWN,scanCode);
//键盘弹起
display->sendKeyEvent(AspAction::ACTION_UP,scanCode);

3.6 剪贴板

本地到云

云到本地

3.6.1 setClipBoardTypes

函数原型:virtual void setClipBoardTypes(std::vector<AspClipboardType> types) = 0;

功能描述:发送剪贴板类型,一般在Ctrl+V调用或写入剪贴板时调用,目前仅支持文本。

参数说明:

参数名称

参数类型

描述

types

std::vector<AspClipboardType>

剪贴板类型数组,参见5.8 AspClipboardType

代码示例:

std::vector<AspClipboardType> types;
types.push_back(AspClipboardType::CLIPBOARD_UTF8_TEXT);
client->setClipBoardTypes(types);

3.6.2 notifyClipboardReadComplete

函数原型:virtual void notifyClipboardReadComplete(AspClipboardType type, uint8_t* buf, size_t len) = 0;

功能描述:将内容传到云机在onClipboardRead(uint8_t selection, AspClipboardType type)触发时调用

参数说明:

参数名称

参数类型

描述

type

AspClipboardType

剪贴板类型目前只支持文本

buf

uint8_t*

剪贴板内容的字节数组指针

len

size_t

buf大小

代码示例:

void onClipboardRead(uint8_t selection, AspClipboardType type) override {
        //本地到云机,通过client->setClipBoardTypes(types)触发
        //触发onClipboardRead,将剪贴板内容写入notifyClipboardReadComplete
        client->notifyClipboardReadComplete(type, reinterpret_cast<uint8_t *>(utf8Data.data()), utf8Data.size());
}

3.6.3 回调代理IClipboardCallback

代理接口说明:

接口

描述

void onClipboardRead(uint8_t selection, AspClipboardType type)

本地到云机,通过setClipBoardTypes(types)触发,触发时调用notifyClipboardReadComplete将剪贴板内容写入,type参见5.8 AspClipboardType

void onClipboardWrite(std::vector<AspClipboardData> dataV) 

云机到本地,触发时将内容写入剪贴板,data参见4.6 AspClipboardData

代码示例:

class AspClipboardlmpl :public IClipboardCallback
{
public:
    AspClipboardlmpl() {};

    void onClipboardRead(uint8_t selection, AspClipboardType type) override {
        //本地到云机,通过client->setClipBoardTypes(types)触发
        //触发onClipboardRead,将剪贴板内容写入notifyClipboardReadComplete
        //client->notifyClipboardReadComplete(type, reinterpret_cast<uint8_t *>(utf8Data.data()), utf8Data.size());
    }
    void onClipboardWrite(std::vector<AspClipboardData> dataV) override {
        //云机到本地剪贴板,将dataV数据写入剪贴板
    }
};

3.7 Shell命令通道

3.7.1 sendStringDataToShell

函数原型:virtual bool sendStringDataToShell(const std::string& val) = 0;

功能描述:发送Shell命令

参数说明:

参数名称

参数类型

描述

val

std::string

发送的ADB Shell命令格式:{"id":"","cmd":""}

代码示例:

client->sendStringDataToShell(jsonString)

常用ADB命令:

功能

命令

返回键

input keyevent KEYCODE_BACK

Home键

input keyevent KEYCODE_HOME

切换键

input keyevent KEYCODE_APP_SWITCH

静音

input keyevent 164

音量增大

input keyevent KEYCODE_VOLUME_UP

音量减小

input keyevent KEYCODE_VOLUME_DOWN

隐藏导航栏

setprop persist.wy.hasnavibar false; killall com.android.systemui

显示导航栏

setprop persist.wy.hasnavibar true; killall com.android.systemui

截图

screencap -p /sdcard/Download/abc.png

3.7.2 回调代理IShellCmdCallback

代理接口说明:

接口

描述

void onReceiveStringData(const std::string& val)

接收字符流Shell命令回执

void onReceiveRawData(const std::vector<uint8_t> val)

接收字节流Shell命令回执

代码示例:

class AspShellCmdlmpl :public IShellCmdCallback
{
public:
    AspShellCmdlmpl() {};

    void onReceiveStringData(const std::string& val) override {
        //发送字符的回调
    }
    void onReceiveRawData(const std::vector<uint8_t> val) override {
       //发送字节的回调
    }
};

4. 参数详细说明

4.1 AspTicket

struct AspTicket {
    std::string ticket; 		//获取云手机的ticket字符串
    std::string id;			//桌面id
    std::string user;			//用户名
    std::string uuid;			//本机uuid,请求ticket的时候使用的uuid
    std::string systemType;		//操作系统类型
    uint8_t partner;			//合作方
    bool isThumbnailEnable = false;	//是否是缩略图模式
};

4.2 ConnectEvent

struct ConnectEvent {
    ConnectEventType type;	//连接成功、连接失败等事件类型
    int reason;				//事件触发的原因
};

4.3 AspImageFrame

struct AspImageFrame {
    uint32_t frameId;
    void* buffer;
    uint32_t width;
    uint32_t height;
    AspImageFormat format;
    ReleaseBuffer releaseBuffer;
};

4.4 AspAudioFrame

struct AspAudioFrame {
    int sample;				//采样率
    int channels;			//通道
    int size;				//数据大小
    uint8_t *data;			//数据地址

    ReleaseBuffer releaseBuffer;	//data释放函数,在data使用完之后必须调用
};

4.5 AspAudioPlayback

struct AspAudioPlayback {
    AspAudioReadType readType;	//音频数据获取方式,包括PUSH和PULL两种方式
    AspAudioMode mode;		//PCM or OPUS
    uint32_t channels;		//通道数
    uint32_t frequency;		//采样率
    AspAudioFormat format;	//RAW or OPUS

    AudioReader audioReader;	//PULL读取方式时,数据读取的函数,请参照demo的实现
};

4.6 AspClipboardData

struct AspClipboardData {
    AspClipboardType type;
    uint8_t* data;
    uint32_t size;
};

5. 枚举类型

5.1 AspConnType

enum AspConnType {
    ASP_CONN_SOCKET = 0,
    ASP_CONN_SOCKPAIR = 1,
    ASP_CONN_PIPE = 2,
    ASP_CONN_SOCKET_UNIX = 3,
    ASP_CONN_END = ASP_CONN_PIPE,
};

5.2 AspImageFormat

enum class AspImageFormat {
    YUV420P,
    YUV422P,
    YUV444P,
    RGB24,
    RGBA,
    BGRA,
    ARGB,
    ABGR,
    NV12
};

5.3 ConnectEventType

enum ConnectEventType {
    EVENT_CONNECT_SUCCESS,
    EVENT_CONNECT_FAILED,
    EVENT_DISCONNECT_SUCCESS,
    EVENT_RECONNECT_START,
    EVENT_RECONNECT_FAILED
};

5.4 AspImageQuality

enum AspImageQuality {
    ASP_IMAGE_QUALITY_LOSSLESS = 0,
    ASP_IMAGE_QUALITY_HIGH = 1,
    ASP_IMAGE_QUALITY_MEDIUM = 2,
    ASP_IMAGE_QUALITY_LOW = 3,
    ASP_IMAGE_QUALITY_AUTO = 4,
};

5.5 AspAction

enum AspAction {
    ACTION_UP,
    ACTION_DOWN
};

5.6 AspMouseButtonMask

enum AspMouseButtonMask {
    ASP_MOUSE_BUTTON_MASK_L = (1 << 0),
    ASP_MOUSE_BUTTON_MASK_M = (1 << 1),
    ASP_MOUSE_BUTTON_MASK_R = (1 << 2),
    ASP_MOUSE_BUTTON_MASK_F = (1 << 3),
    ASP_MOUSE_BUTTON_MASK_B = (1 << 4),

    ASP_MOUSE_BUTTON_MASK = 0x1f
};

5.7 AspMouseButton

enum AspMouseButton {
    ASP_MOUSE_BUTTON_INVALID,
    ASP_MOUSE_BUTTON_LEFT,
    ASP_MOUSE_BUTTON_MIDDLE,
    ASP_MOUSE_BUTTON_RIGHT,
    ASP_MOUSE_BUTTON_UP,
    ASP_MOUSE_BUTTON_DOWN,
    ASP_MOUSE_BUTTON_SIDE_FORWARD,
    ASP_MOUSE_BUTTON_SIDE_BACK,

    ASP_MOUSE_BUTTON_ENUM_END
};

5.8 AspClipboardType

enum AspClipboardType {
    CLIPBOARD_NONE = 0,
    CLIPBOARD_UTF8_TEXT,
    CLIPBOARD_IMAGE_PNG,  /* All clients with image support should support this one */
    CLIPBOARD_IMAGE_BMP,  /* optional */
    CLIPBOARD_IMAGE_TIFF, /* optional */
    CLIPBOARD_IMAGE_JPG,  /* optional */
    CLIPBOARD_FILE,       /* optional, single file */
    CLIPBOARD_DIRECTORY,  /* optional, support directory recrusive */
    CLIPBOARD_HTML,
    CLIPBOARD_RTF,
    CLIPBOARD_XML_SPREAD_SHEET,
};

6. 错误代码

错误码

错误消息(%s表示云手机或云应用)

定义模块

原因

2~26主要是网络相关问题

2

连接%s失败

ASP SDK

无效MAGIC

3

连接%s失败

ASP SDK

数据有误

4

客户端与服务端版本不匹配

ASP SDK

版本不匹配

5

连接需要 TLS

ASP SDK

需要TLS

6

连接不需要 TLS

ASP SDK

不需要TLS而实际使用了TLS

7

您没有权限连接当前%s

ASP SDK

权限问题

8

ASP SDK

迁移过程中client ID无效

9

连接%s失败

ASP SDK

channel不存在

20

连接ASP服务器失败。

ASP SDK

channel 连接错误

21

TLS认证出错了

ASP SDK

TLS 认证错误

22

连接%s失败

ASP SDK

channel link 错误

23

连接%s失败

ASP SDK

连接认证错误

24

连接%s失败

ASP SDK

连接IO错误

25

连接%s失败

ASP SDK

Ticket校验失败。用户连接被断开后,若使用同一个Ticket再次请求建连,也将触发此错误。

26

ASP SDK

xquic 握手失败

1206

一个ticket 可以重复使用,但是每次只能连接一个。如果云手机处于连接中,再新建连接就会报此错。

ASP SDK

1207

实例发生重启,导致Ticket失效了

ASP SDK

sdk流协同错误码

1000

token empty 

ASP SDK

只会出现在流协同的时候,client与server进行二次校验失败

1001

user empty 

ASP SDK

1200

token invalid 

ASP SDK

1201

vm invalid 

ASP SDK

1202

ADMIN internal error 

ASP SDK

1203

user invalid 

ASP SDK

1204

token experied 

ASP SDK

1500

server internal error 

ASP SDK

1501

server net work error 

ASP SDK

连接中断开或遇到某些错误的情况

2000

获取%s数据超时,与服务端断开连接

ASP SDK

正常断开

2001

%s已与服务端断开连接。可能是因为%s进程已被强制终止。

ASP SDK

一般是端上应用被终止进程了,如Android应用用户通过按下Home键终止

2002

已有用户从其他终端连接当前%s。请稍后重试。

ASP SDK

其他人抢占了端

2003

%s正在关机或重启,一般由管理员操作,请稍后重试。

ASP SDK

云手机被关机或重启,一般是管理员操作

2004

当前用户连接被断开。

ASP SDK

客户端发起断流,或服务端发起踢人或断流

2005

%s已超时断开连接,因为已达到管理员设置的使用时长限制。

ASP SDK

管理员设置使用时长被关

2006

管理员已回收了你使用该云手机的权限,即将注销并断开云手机的连接。

ASP SDK

管理员取消了用户授权

2010

连接%s失败

ASP SDK

Vdagent连接失败

2011

连接参数传递错误。

ASP SDK

连接server参数传递错误

2027

拉流模式已切换。

ASP SDK

拉流模式由抢占模式切换为协同模式,或由协同模式切换为抢占模式

2100

剪切板权限,禁止从%s到本地

ASP SDK

剪贴板权限,禁止从VM到本地

2101

剪切板权限,禁止从本地到%s

ASP SDK

剪贴板权限,禁止从本地到 VM

2200

%s正在尝试重连...

ASP SDK

因为网络问题断开了,ASP SDK正在重连

2201

您的设备出现网络异常,导致%s已断开连接。

ASP SDK

因为网络问题断开了,ASP SDK因为镜像原因不支持重连,应用侧开始重连

2202

%s重连超时,请检查设备网络后重试。

ASP SDK

ASP SDK重连超时

2210

终端设备休眠时断开了本地网络,导致云手机断开连接

ASP SDK

2212

检测到您的本地网络出现异常,导致云手机断开连接。

ASP SDK

2220

检测到您的本地网络出现异常,导致云手机断开连接。

ASP SDK

2240

由于Ticket中的Token失效,导致重连失败。

2300

应用侧传参出现异常导致连接失败。

2501

客户端连接流网关异常,网络不可达。

2502

客户端连接流网关异常,TCP连接流网关IP超时, connect *3次 (共15s)。

2503

客户端连接流网关异常,未知网络错误。

2504

客户端连接流网关异常,软件原因连接中断。

2505

客户端连接流网关异常,连接被拒绝。

2506

Ticket失效,网关解析token失败。

2507

Ticket失效,过期。

2508

Ticket失效,uuid不匹配。

2509

流网关探测asp-server 失败

2510

探测server被拒绝:
解决:server 5912未开启监听

2511

探测server失败,timeout和refuse 之外的其他错误

2512

流网关token校验失败

管控token中带的vpcId和流网关本身所在的vpcId 不一致

2513

客户端和网关sayhello 过程中tcp收到异常reset

2520

客户端连接失败,自主诊断出来是网络异常导致的

2521

客户端再和流网关tls握手阶段重连3次三次都异常断开

2522

vpn环境下连接出错

2523

客户端正在使用国密协议连接。请确认服务端设置或选择兼容的连接方式。

2701

端侧网络问题,建议对比手机5g热点试试能否连接上。

2702

客户端到流网关SSL握手超时

2703

客户端到流网关SayHello超时

2704

ASP Server回复建链消息超时

可能原因: asp-server卡死;网络异常;镜像卡死;mem/cpu high

2705

Asp Client 等待第一帧超时

可能原因: asp-server卡死;截屏或者gpu驱动异常没有帧生成;网络异常;mem/cpu high

2706

检测到客户端本地的CPU、内存使用率过高可能会导致连接失败。

2707

AspServer 从Guest获取第一帧截屏数据超时

2708

sdk线程卡住导致连接失败

端侧逻辑错误

5100

%s连接ASP Server超时,请稍后重试。

应用侧

端侧在一段时间内未接收到connected事件

5102

获取%s数据超时,请稍后重试。

应用侧

端侧在一段时间内接收到了connected但未接收到display事件

5004

客户端出现错误,请重新打开

应用侧

传入端侧启动参数有误,一般出现在开发阶段

5200

客户端重连超时,请稍后重试。

应用侧

7. 常见问题

怎么重启云手机

调用管控重启API 重启实例进行重启,调用重启API后,端侧连接的云手机会断开,重启完成后,端侧再连接云手机。

缩略图和主控切换

缩略图切换主控,需要先关闭(缩略图),然后等待关闭完成再切换到(主控)。

image.svg

主控切换缩略图,需要先关闭(主控),然后等待关闭完成再重新打开(缩略图)。

sequenceDiagram
      participant App
      participant Sdk
      App->>Sdk: close(true)
      Sdk-->>App: onConnectEvent EVENT_DISCONNECT_SUCCESS
      App->>Sdk: reopen(Ticket)