● 响应样例
{"request_id": "6837531fd3f54550927b930180a706bf"
}
心跳上报
● 请求样例
{"event_type": "heartbeat",
"event": {
"phone_id": "a7f3a1c5258347d6b6f1def79e11f2bc",
"app_id": "282fdfd613e04651a48225f1b2034de7",
"session_id": "36728337b89f22122af4a6e08bb1e7c0",
"time": "2019-11-14T19:38:49Z"
}}
● 响应样例
{"request_id": "6837531fd3f54550927b930180a706bf"
}
3 批量安装应用至云手机
在一台云手机内安装APP后,可以通过调用接口的方式将此APP共享安装至多台云手 机,省去重复安装的时间。
说明
假设这台安装了APP的云手机为种子云手机。
约束与限制
● 该方案仅适用于非qemu规格的云手机,即实例规格名称中不包含“qemu”字 样。
图3-1 实例规格
● 种子云手机必须为一台未进行过任何操作的云手机。如果云手机上存在历史操 作,请重置云手机。
操作步骤
1. 登录管理控制台,选择“存储 > 对象存储服务 OBS”,参考“批量控制”创建一 个用来存放文件的OBS桶,并为桶设置访问权限。
注意:为了成功上传文件到桶,在创建桶策略时请设置为“目录读写”模式,如 图3-2所示。
最佳实践 3 批量安装应用至云手机
图3-2 创建桶策略
2. 使用ADB方式连接种子云手机,并为其安装需要的APP。
详细指导请参考“如何在单台云手机中安装APP?”。
3. 通过调用接口的方式,导出种子云手机数据并打包上传至步骤1中的OBS桶。
curl命令如下:
curl -i -k -X POST "https://${CPH Endpoint}/v1/${projectId}/cloud-phone/phones/batch-storage" -H
"Content-Type: application/json" -H "X-Auth-Token: $token" -d ' { "storage_infos": [
{
"phone_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "include_files": [
"/data/app/${package-name}-1", "/data/data/${package-name}",
"/data/media/0/Android/data/${package-name}"
],
"bucket_name": "${bucket_name}",
"object_path": "${your_dir}/${package-name}.tar"
} ] }'
其中,
– phone_id为种子云手机的ID。
– bucket_name为导出数据所存储的OBS桶名。
– object_path为导出数据所存储的OBS路径。
注意
如果想全量打包云手机APP数据,必须要包含以下3个路径:
● /data/app/${package-name}-1
其中${package-name}后面可能接的不是-1,需要根据云手机中的实际情况填 写。
● /data/data/${package-name}
● /data/media/0/Android/data/${package-name}
示例:
curl -i -k -X POST "https://${CPH Endpoint}/v1/${projectId}/cloud-phone/phones/batch-storage" -H
"Content-Type: application/json" -H "X-Auth-Token: $token" -d ' { "storage_infos": [
{
"phone_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "include_files": [
4. 进入步骤1中的OBS桶,在“对象”中查看并确认步骤3中打包上传的文件是否已 全部上传成功。确认成功后执行下一步。
5. 通过调用接口的方式,将OBS桶内的文件推送至服务器的共享存储目录。
curl命令示例如下:
curl -i -k -X POST "https://${CPH Endpoint}/v1/${projectId}/cloud-phone/phones/share-files" -H
"Content-Type: application/json" -H "X-Auth-Token: $token" -d ' { "bucket_name": "your-bucket-name",
"object_path": "your/dir/taptap.tar",
"server_ids": ["1678567b8bab40f93711234cb8","1234567b8bab40ffb711234cb"]
}'
其中,
– bucket_name、object_path分别对应步骤3中的内容。
– server_ids为接受文件推送的服务器ID列表。指定多个服务器ID,可以实现多 台服务器上的云手机均安装APP的诉求。
执行结果
重置成功后,所有云手机均已安装APP。
4 修改云手机的 GPS 定位信息
云手机的GPS定位信息是模拟GPS卫星获取的经纬度值,数值单位为度,使用十进制小 数形式表示,遵循国际惯例,东经为正,西经为负,北纬为正,南纬为负。本文指导 您如何修改云手机的GPS定位信息。
前提条件
已购买并通过ADB方式登录云手机。详细操作请参见“购买云手机”。
操作步骤
1. 在本地设备的ADB安装目录中,执行如下命令,修改GPS定位信息。
假设需修改的位置是东经114.055939度,北纬22.657501度。
adb -s 127.0.0.1:本地空闲端口 shell "echo
'longitude=114.055939:latitude=22.657501' > /data/gps/fifo"
说明
其中,本地空闲端口是建立SSH隧道时所使用的本地空闲端口。
命令执行完立即生效,可使用地图类软件查看修改结果。例如:使用某社交软件 发布动态,添加位置时可以看到GPS定位信息。
最佳实践 4 修改云手机的 GPS 定位信息
5 使用云手机进行云手游系统建设
云手游服务器适合云手游的场景,一台云手游服务器对应15个云手机实例。本文通过 四个阶段构建入门级云手游系统。
一、梳理云手游集成对接方案
首先,您需要梳理对云手游的诉求,明确业务的应用场景、演进方向,以及自己的运 营和运维系统与云手机实例的交互方式,不同的业务诉求所对应的对接方案有差异。
我们已提供云手机实例的音视频接口,您可以通过音视频接口开发自己的控制程序、
网络传输、调度系统和客户端。
二、购买云手游服务器
在购买服务器时,请选择“云手游服务器”,即需要购买15个云手机实例。
图5-1 选择云手机规格
三、获取云手游音视频 SDK
请联系您的客户经理获取云手游音视频的SDK文档。
四、开发云手游接入、触控和调度系统
获取SDK文档后,您可以通过音视频接口开发自己的控制程序、网络传输、调度系统 和客户端。后续云手机服务会推出更简单的接入方式,敬请期待。
最佳实践 5 使用云手机进行云手游系统建设
6 使用云手机摄像头
步骤 1:替换手机镜像
1. 查看云手机镜像最新动态,选择一个2020年10月9日(包含)之后的镜像,复制 镜像ID(需注意镜像的规格)。
2. 登录华为云控制台,切换到您的资源所在region,选择云手机服务。
3. 单击服务器管理,查看云手机服务器列表。
4. 进入云手机服务器详情页,选择其中一台云手机,单击“重启”按钮。
5. 勾选更新手机镜像复选框,然后填入前一步所选的镜像ID。
6. 单击确定,完成单台云手机更新镜像操作。
步骤 2:上传图片到手机
上传一张图片到云手机的“/data/local/tmp/”目录下。您有两种方式上传图片,此处 以“/path/to/local”目录下的“pic.jpeg”为例。
● 方式一:通过adb push命令推送图片
首先通过adb连接到云手机,然后执行以下命令:
adb push <
/path/to/local/pic.jpeg
> /data/local/tmp/pic.jpeg
adb shell chmod 644 /data/local/tmp/pic.jpeg
● 方式二:调用云手机api接口推送图片 请参考ADB命令推送文件来推送图片文件。
须知
上传的图片尺寸保证比例为 480(宽) * 640(高),比例不为480*640时,图片在摄像头 中可能会被缩放。图片只支持jpeg和png格式,请不要用其他格式的图片,并且路径一 定要是“/data/local/tmp/”目录下,图片权限至少为644(rw-r--r--)。
步骤 3:设置手机属性
您有两种方式设置手机属性。
方式一:adb连接到云手机,然后执行adb命令
adb shell setprop com.cph.cam_local_pic_path /data/local/tmp/
pic.jpeg
使用此这种方式,重启手机后属性失效。方式二:调用云手机api接口设置属性
参考更新云手机属性来设置,将”com.cph.cam_local_pic_path”:”/data/local/tmp/
pic.jpeg”属性设置到手机中。属性将被持久化,重启手机属性依然保留。
最佳实践 6 使用云手机摄像头
步骤 4:测试摄像头
安装任意一款需要调用摄像头的APP,打开APP查看取景框是否成功显示您设置的图 片。
说明
当前云手机只支持后置摄像头。
7 通过 STF 批量管理云手机
操作场景
STF,全称Smartphone Test Farm,一个开源的web架构应用,用于移动设备管理控 制。本质上通过浏览器控制和管理Android设备,实现真正意义的云端使用、调试和测 试。本小节通过在一台ECS上部署STF的相关组件,实现快速批量管理云手机的功能。
约束与限制
● STF实测支持同时管理约160台云手机,更大规模的接入管理需要结合业务进行二 次开发。
● STF可靠运行依赖稳定的网络环境,网络状态不佳时云手机的操作时延会显著增 大。
前提条件
● 已购买一台绑定EIP的云手机服务器。
● 已购买一台绑定EIP的弹性云服务器。
说明
云手机服务器和弹性云服务器参考以下规格,具体规格可结合业务场景决定。
● 云手机服务器规格为:physical.kg1.4xlarge.cp | kg1.cp.c60.d16SSD.e1v1
● 弹性云服务器规格为:通用计算型 | s6.large.2 | 2vCPUs | 4GiB | Ubuntu 18.04 server 64bit(40GB)
操作步骤
在弹性云服务器上部署STF依赖的相关组件,并借助ADB工具连接云手机,最后通过浏 览器访问STF的地址,实现云手机的批量管理。
1. 安装ADB,并验证安装结果。
sudo apt install android-tools-adb android-tools-fastboot adb --version
图7-1 ADB 安装成功回显版本号
最佳实践 7 通过 STF 批量管理云手机
2. 更新源,然后安装RethinkDB,用于STF数据存储。
source /etc/lsb-release && echo "deb
https://download.rethinkdb.com/repository/ubuntu-$DISTRIB_CODENAME https://download.rethinkdb.com/repository/ubuntu-$DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list wget qO https://download.rethinkdb.com/repository/raw/pubkey.gpg | sudo aptkey add -sudo apt-get update
sudo apt-get install rethinkdb rethinkdb -v
正确回显版本即安装成功。
图7-2 RethinkDB 安装成功
RethinkDB官网支持x86架构,对于arm架构仅为实验性支持。
3. 安装ZeroMQ,用于消息传递。
sudo apt-get install libzmq3-dev
图7-3 ZeroMQ 安装成功
4. 安装Protocol Buffers,作为消息传递的数据格式,正确回显版本即安装成功。
sudo apt-get install libprotobuf-dev protobuf-compiler protoc --version
图7-4 Protocol Buffers 安装成功
5. 安装GraphicsMagick,用于处理图像的读取、写入和操作。
sudo apt-get install graphicsmagick gm version
正确回显版本即安装成功。
图7-5 GraphicsMagick 安装成功
6. 安装pkg-config,用于编译Nodejs第三方库。
sudo apt-get install pkg-config pkg-config --version
正确回显版本即安装成功。
图7-6 pkg-config 安装成功
7. 安装yasm,用于编译STF的依赖库。
sudo apt-get install yasm yasm --version
正确回显版本即安装成功。
图7-7 yasm 安装成功
8. 安装Nodejs,用于部署STF运行环境。
##STF运行只支持Node.js 8.x版本
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install -y nodejs
node -v npm -v
正确回显版本即安装成功。
图7-8 node 和 npm 安装成功
9. 安装STF。
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org sudo cnpm install -g stf
stf -V
正确回显版本即安装成功。
图7-9 STF 安装成功
最佳实践 7 通过 STF 批量管理云手机
10. 检查STF依赖环境是否满足。
stf doctor
正确回显各组件版本即满足。
图7-10 STF 检测启动环境
11. 基于ADB连接云手机实例,具体连接方式参考ADB连接。
12. 启动RethinkDB。
rethinkdb
回显如图7-11即启动成功。
图7-11 启动 RethinkDB
13. 基于local模式启动STF,并基于浏览器访问。
##下方请填写实际的弹性云服务器EIP地址 stf local --public-ip {EIP地址} --allow-remote
##访问方式
http://{EIP地址}:7100/
图7-12 输入 STF 默认账户和密码
图7-13 云手机实例
图7-14 云手机控制界面
最佳实践 7 通过 STF 批量管理云手机
A 读取 OBS 桶数据资源
前提条件
OBS桶中已经存在APK安装包、游戏tar包或其他资源。否则,需要手动上传游戏包资 源。可参考https://support.huaweicloud.com/qs-obs/obs_qs_0002.html进行上 传。
操作步骤
开放云手机对OBS桶内资源的只读权限,如下图所示:
图A-1 配置只读权限
注意:上图中的“其他账号”是云手机内置账号,必须为如下信息,不能填写自己账 号的ID:
● 账号ID:529375c06c6340f299819082b3051225
● 用户ID:10208a4cf0944e339f523d9943ba02d3
按照上图的指示,权限配置完毕后,云手机就可以访问cloud-app-game桶中 game_tar文件下的数据资源了。
最佳实践 A 读取 OBS 桶数据资源
B 向 OBS 桶上传数据资源
操作步骤
开放云手机对OBS桶内资源的读写权限,如下图所示:
图B-1 配置读写权限
注意:上图中的“其他账号”是云手机内置账号,必须为如下信息,不能填写自己账 号的ID:
● 账号ID:529375c06c6340f299819082b3051225
● 用户ID:10208a4cf0944e339f523d9943ba02d3
按照上图的指示,权限配置完毕后,云手机就可以将打包好的游戏tar包上传到cloud-app-game桶中的game_tar文件下了。
C 修订记录
版本日期 变更说明
版本日期 变更说明