最佳实践
文档版本 04
发布日期 2021-09-01
版权所有 © 华为技术有限公司 2021。 保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传 播。
商标声明
和其他华为商标均为华为技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
您购买的产品、服务或特性等应受华为公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或 特性可能不在您的购买或使用范围之内。除非合同另有约定,华为公司对本文档内容不做任何明示或暗示的声 明或保证。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文 档中的所有陈述、信息和建议不构成任何明示或暗示的担保。
目 录
1 云手机接入最佳实践... 1
1.1 创建云手机服务器... 1
1.2 连接云手机并获取云手机画面...6
1.3 云手机应用部署...8
1.3.1 获取云手机列表... 8
1.3.2 为单台云手机安装应用... 9
1.3.3 生成应用版本 tar 包并推至 OBS 桶... 10
1.3.4 部署应用... 11
1.3.5 更新应用版本... 12
2 云手游接入最佳实践... 13
2.1 创建云手游服务器... 13
2.2 游戏部署... 18
2.2.1 获取云手机列表...18
2.2.2 为单台云手机安装应用...19
2.2.3 生成应用版本 tar 包并推至 OBS 桶... 20
2.2.4 部署应用... 20
2.2.5 更新应用版本... 21
2.3 游戏接入... 22
2.4 实例调度... 23
2.5 运营运维... 24
3 批量安装应用至云手机... 25
4 修改云手机的 GPS 定位信息... 29
5 使用云手机进行云手游系统建设...30
6 使用云手机摄像头... 32
7 通过 STF 批量管理云手机...35
A 读取 OBS 桶数据资源... 40
B 向 OBS 桶上传数据资源... 42
C 修订记录... 43
1 云手机接入最佳实践
1.1 创建云手机服务器
操作步骤
1. 登录管理控制台。
2. 在服务列表页,选择“计算 > 云手机 CPH”。
3. 在左侧导航栏选择“服务器管理”,单击右上角的“购买服务器实例”。
4. 根据界面提示,完成基础配置,如表1-1。
表1-1 参数说明
参数 参数说明 样例
计费模式 服务器仅支持一种计费类型:包
年/包月。 包年/包月
区域 不同区域的云服务产品之间内网 互不相通。建议您选择最靠近您 业务的区域,这样可以减少网络 时延、提高访问速度。
需要注意:服务器购买成功后不 能更换区域。
华东-上海一
可用区 指在同一区域下,电力、网络隔 离的物理区域,可用区之间内网 互通,不同可用区之间物理隔 离。
● 如果您需要提高应用的高可用 性,建议您将服务器创建在不 同的可用区。
● 如果您需要较低的网络时延,
建议您将服务器创建在相同的 可用区。
可用区1
最佳实践 1 云手机接入最佳实践
参数 参数说明 样例 服务器类型 包括云手机服务器和云手游服务
器,请根据业务场景进行选择。
详情请参见“规格”。
云手机服务器 physical.rx1.xlarge
实例规格 请根据业务场景进行选择。 rx1.cp.c60.d10.e1v1 手机镜像 云手机实例运行的操作系统,目
前只支持Android系统,其他手机 系统由于商业授权缘故,不能提 供。
AOSP7.1.1
购买量 ● 服务器的数量,一次最多可购 买10台服务器。
● 购买时长:可选取的时间范围 为1个月~3年。
服务器数量:1 购买时长:6个月
5. 单击“下一步:网络配置”。根据界面提示,完成网络配置。
“西南-贵阳一”区域已上线自定义网络功能,推荐您使用自定义网络配置,如表
1-2所示。
其中physical.rx1系列服务器qemu类型的手机规格暂不支持自定义网络,采用系 统定义网络配置如表1-3所示。
说明
云手机网络配置分为两种模式:
● 自定义网络:自定义网络是云手机全新一代网络配置管理模式,支持您复用已有的VPC 网络管理云手机服务器,支持云手机服务器复用您已购买的共享带宽等资源,自定义网 络当前仅支持“西南-贵阳一”区域。
● 系统定义网络:系统定义网络是云手机第一代网络模式,由系统为您的云手机服务器自 动创建VPC网络及带宽,不支持复用您已有的VPC网络及带宽资源。
表1-2 自定义网络配置(当前仅支持“西南-贵阳一”区域)
参数 参数说明 样例
网络 在下拉列表中选择可用的虚拟私有云、子网,并设置 私有IP地址的分配方式。
云手机网络使用虚拟私有云(VPC)提供的网络,包 括子网、安全组等。您可以选择使用已有的虚拟私有 云网络,或者创建新的虚拟私有云。
无
参数 参数说明 样例 安全组授
权 云手机服务将为您创建一个“cph_admin_trust”委 托,该委托包含的权限为:“VPC FullAccess”。
授权云手机服务为您创建委托,需确定您的登录用户 具有“Security Administrator”权限或者具备创建委 托的细粒度权限“iam:agencies:createAgency”。
了解更多请参考权限管理。
云手机服务将使用该委托完成如下操作:
● 为云手机/云游戏实例创建弹性网卡、弹性公网 IP、虚拟IP。
● 为云手机/云手游服务器创建默认安全组,并设置 安全组开放端口范围,该端口开放范围将映射到每 个云手机/云游戏实例以支持实例开放应用访问端 口。
说明同一VPC下的弹性云服务器默认无法通过1-9999端口访 问云手机/云游戏实例,若想放开此限制,请参考使用自 定义网络的安全组授权规则添加高优先级的安全组规 则。
无
弹性公网IP ● 现在购买:为云手机购买新的弹性公网IP。 现在购买
线路 ● 静态BGP中的网络结构发生变化,运营商无法在第 一时间自动调整网络设置以保障用户的体验度。
● 全动态BGP可根据设定的寻路协议第一时间自动优 化网络结构,以保持客户使用的网络持续稳定、高 效。
全动态BGP
公网带宽 ● 独享带宽:按照实际使用的流量来计费。
● 共享带宽:一个带宽中可以加入多个弹性公网IP,
多个弹性公网IP共用一个带宽。
共享带宽
带宽大小 可选带宽范围:1-2000 Mbit/s。 300 Mbit/s 带宽名称 “公网带宽”选择“共享带宽”时,请在下拉框中选
择已有的共享带宽名称。 bandwidt
h-001
最佳实践 1 云手机接入最佳实践
表1-3 系统定义网络配置
参数 参数说明 样例
带宽类型 ● 独享带宽:用户购买的每一台服务器所独 立使用的网络带宽,适用于有较大规模数 据流量和访问量,对带宽要求较高的场 景。
● 共享带宽:用户名下的多台服务器所共用 的网络带宽,适用于多业务流量错峰分布 场景,可为企业节省公网带宽使用成本。
共享带宽
创建方式 包括“已有共享带宽”和“新建共享带宽”。
在第一次使用共享带宽购买服务器时,请选择
“新建共享带宽”。
新建共享带宽
计费方式 独享目前仅支持按流量计费,共享带宽目前仅 支持按带宽计费。
● 按流量计费:指定带宽上限,按实际使用 的出公网流量计费,与使用时间无关。
● 按带宽计费:按照带宽大小和使用时长计 费,未包含在服务器费用内。
按带宽计费
带宽 独享带宽参数,指带宽上限,固定取值为300
Mbit/s。 300 Mbit/s
带宽名称 ● “创建方式”选择“已有共享带宽”时,
请在下拉框中选择已有的共享带宽名称。
已有的共享带宽上会显示当前已关联的服 务器数量,方便您选择。
● “创建方式”选择“新建共享带宽”时,
请在文本框中输入共享带宽的名称。
whole- bandwidth- xxxx
带宽大小 “创建方式”选择“新建共享带宽”时,需要 设置此参数。
带宽大小越大,费用越高,请您按照业务需要 进行合理设置。
5 Mbit/s
说明
系统定义网络仅供云手机所在服务器使用,您无法在您VPC服务下看到相关网络带宽信 息。
6. 单击“下一步:高级配置”。根据界面提示,完成高级配置,如表1-4所示。
表1-4 参数说明
参数 参数说明 样例
名称 为您购买的服务器和云手机实例命名,名称不可 重复。
命名规则:购买服务器后,名称自动按序增加数 字后缀;服务器对应的云手机实例则自动按序增 加5位数字后缀。
例如,您购买了1台服务器,该服务器对应60台 云手机,名称输入CPH。则,服务器名称为 CPH-1,云手机实例的名称为
CPH-1-00001~CPH-1-00060。
CPH
密钥对 使用密钥对(Key Pair)进行远程登录身份验 证。
● 如果您已经创建过密钥对,并且本地已妥善 保存私钥文件(.pem格式),可以在下拉列 表选择已有密钥对。
● 如果您从未创建过密钥对,请单击“新建密 钥对”,跳转至云服务器控制台进行新建。
然后返回该页面,刷新下拉列表,选择创建 好的密钥对。
私钥用于远程登录身份认证,为保证安全,
私钥文件(.pem格式)只能下载一次,请妥 善保管。更多关于密钥对的介绍请参见“创 建密钥对”。
KeyPair- test
VNC登录 开启后,可通过VNC的方式连接云手机。
说明
部分云手机规格不支持此功能,支持的规格请参见支 持VNC登录的云手机规格有哪些?。
-
应用端口 高级配置勾选“应用端口”时,该参数可配。适 用于云手机需要对外提供服务的场景。
● 应用名称:支持大小写英文字母。不能为关 键字“ADB”和“VNC”,大小写的任意组 合都不行。
● 端口号:在0~65535之间。
● 公网访问
– 勾选时,表示可通过公网访问云手机该应 用端口,即云手机对应的端口以及相对应 的服务器公网端口直接暴露在公网,无需 鉴权即可互通。
– 不勾选时,表示只能通过租户的私有网络 访问。
注意
● 请谨慎勾选“公网访问”,确保在勾选前已做 好安全控制。
● 云手机服务未对客户选择打开的端口做任何安 全鉴权。
key 10001 不勾选
最佳实践 1 云手机接入最佳实践
7. 单击“下一步:确认订单”,您可再次核对信息。
– 确认无误后,单击“立即购买”。
– 如果还需要修改,单击“上一步”,修改参数。
8. 根据界面提示,完成支付。
大约需要20~30分钟,购买服务器成功后,系统会自动创建好云手机。
云手机状态变为“运行中”时,表示云手机实例可使用。
1.2 连接云手机并获取云手机画面
Airtest是跨平台UI自动化编译器,由于VNC协议的带宽要求高、损耗手机性能等缺 点,Monbox架构云手机不支持通过VNC协议访问。建议您使用Airtest工具快速获取云 手机画面。
前提条件
● 已购买并通过ADB方式登录云手机。详细操作请参见“购买云手机”。
● 已在本地PC安装Airtest工具。
说明
登录Airtest官网(https://airtest.netease.com/),下载符合您操作系统的版本并安装。
● 已关闭ADB连接的命令行窗口,并保证SSH隧道建立成功。
操作步骤
1. 在Airtest主页单击“刷新ADB”,出现已连接的移动设备:
图1-1 Airtest 主页
2. 如果没有出现您想要连接的设备,可选择下方的“远程设备连接”,然后手动输 入对应云手机的ADB连接命令,如图1-2。
adb connect 127.0.0.1:1234
其中,1234为建立SSH隧道时所使用的本地空闲端口。
图1-2 远程设备连接
单击右侧的“连接”后,“移动设备列表”中即会出现所需连接的云手机。
注意
请确保ADB连接的命令行窗口已关闭,否则会连接失败;并且保证SSH隧道建立 成功,否则即使已识别出移动设备,“ADB Status”也会出现“offline”状态,
导致无法获取云手机画面。
3. 在已识别的移动设备列表中单击对应设备右侧的“connect”,即可获取云手机画 面:
图1-3 移动设备列表
最佳实践 1 云手机接入最佳实践
图1-4 云手机画面
4. 若通过ADB连接了多台云手机,需要切换画面,可单击右上角的切换图标进行切 换。
图1-5 切换云手机
1.3 云手机应用部署
1.3.1 获取云手机列表
参考《云手机API参考》的“查询云手机列表”章节获取云手机列表。
接口示例
GET https://{CPH Endpoint}/v1/{project_id}/cloud-phone/phones?
phone_name={phone_name}&server_id={server_id}&status={status}&offset={offset}&limit={limit}&type={typ e}Header:
Content-Type: application/json X-Auth-Token: $token
其中,
● CPH Endpoint为Endpoint列表中CPH对应区域的终端节点,如华北-北京四为 cph.cn-north-4.myhuaweicloud.com。
● project_id为云手游服务器所属区域对应的项目ID,如
083e9f825e80f50c2f96c0045edc70e8。可通过如下方式获取:
a. 登录管理控制台。
b. 单击右上角用户名下的“我的凭证”。
c. 在“API凭证”页面的项目列表中获取项目ID。
图1-6 获取项目 ID
● URL中"?"之后的部分为可选参数。
● $token为获取token接口的响应结果。
接口使用示例
GET https://cph.cn-north-4.myhuaweicloud.com/v1/083e9f825e80f50c2f96c0045edc70e8/cloud-phone/
phones Header:
Content-Type: application/json X-Auth-Token: $token
说明
$token需要换成实际获取到的token值;此处未指定phone_name、server_id等参数信息。
1.3.2 为单台云手机安装应用
参考《云手机API参考》的“安装apk”章节为单台云手机安装应用。
前提条件
● 云手游服务器所在Region的OBS桶中已经存放好对应的APK安装包。否则,需要 上传安装包,可参考https://support.huaweicloud.com/qs-obs/
obs_qs_0002.html进行上传。
最佳实践 1 云手机接入最佳实践
● 确保已经配置好OBS桶的授权策略,具体操作请参考读取OBS桶数据资源章节。
接口示例
POST https://{CPH Endpoint}/v1/{project_id}/cloud-phone/phones/commands Header:
Content-Type: application/json X-Auth-Token: $token Body:
{ "command": "install",
"content": "-t -r obs://{bucket_name}/{object_path}", "phone_ids": [
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
] }
其中,
● CPH Endpoint、project_id、$token等参数取值可以参考获取云手机列表章节的 说明获取。
● bucket_name为对象存储服务OBS的桶名,object_path为游戏apk安装包的存放 路径。
● phone_ids为需要安装应用的云手机ID(通过获取云手机列表获得,可以填多个,
填多个则为多台云手机安装apk应用)。
接口使用示例
POST https://cph.cn-east-3.myhuaweicloud.com/v1/081ceeb7fb800f0c2f4cc004bb39c2f7/cloud-phone/
phones/commands
Content-Type: application/json X-Auth-Token: $token { "command": "install",
"content": "-t -r obs://yzw-apk-install/apk/com.hermes.bgame.apk", "phone_ids": [
"bdc2f2e960164dd9a2765374afeea300"
] }
● yzw-apk-install为OBS桶名,apk/com.hermes.bgame.apk为安装包存放路径,
obs://yzw-apk-install/apk/com.hermes.bgame.apk为游戏安装包全路径。
● $token需要换成实际获取到的token值。
1.3.3 生成应用版本 tar 包并推至 OBS 桶
前提条件
● 需确保云手机已安装对应的应用。
● 确保已配置好OBS桶的授权策略,具体操作请参考向OBS桶上传数据资源章节。
接口示例
POST https://{CPH Endpoint}/v1/{project_id}/cloud-phone/phones/batch-storage Header:
Content-Type: application/json X-Auth-Token: $token Body:
{ "storage_infos": [{
"phone_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"include_files": [
"/data/app/${package_name}-1", "/data/app/${package_name}-2", "/data/data/${package_name}",
"/data/media/0/Android/data/${package_name}"
],
"bucket_name": "${bucket_name}",
"object_path": "apk/${package_name}_${version_name}.tar"
}]
}
其中,
● CPH Endpoint、project_id、$token、bucket_name、object_path等参数可以参 考为单台云手机安装应用章节的说明获取。
● package_name为当前应用的包名,version_name为当前应用的版本号(可自定 义)。
● object_path为游戏tar包上传的目的路径(注意:apk为任意已存在文件夹,$
{package_name}_${version_name}.tar中除.tar后缀外,其余内容需根据实际名称 来修改)。
● 如上示例中,include_files的四个元素为固定路径。
● 如果该游戏的安装包为xapk类型,则需要在include_files中增加“/data/
media/obb/${package_name}”路径。
● phone_id为安装了对应游戏的云手机ID。
1.3.4 部署应用
推送tar包至服务器,即将文件“apk/${package_name}_${version_name}.tar”推送 到服务器(${server_id1}和${server_id2})的共享存储中。
接口示例
POST https://{CPH Endpoint}/v1/{project_id}/cloud-phone/phones/share-files Header:
Content-Type: application/json X-Auth-Token: $token Body:
{ "bucket_name":${bucket_name},
"object_path": "apk/${package_name}_${version_name}.tar", "server_ids": [
"${server_id1}", "${server_id2}"
] }
其中,
● CPH Endpoint、project_id、$token、bucket_name、object_path等参数可以参 考4.2 为单台云手机安装应用的说明获取。
● package_name为当前应用的包名,version_name为当前应用的版本号(可自定 义)。
● object_path为游戏tar包上传的目的路径。
说明
apk为任意已存在文件夹,${package_name}_${version_name}.tar中除.tar后缀外,其余 内容需根据实际名称来修改。
最佳实践 1 云手机接入最佳实践
● server_ids为部署应用版本的目标服务器ID列表,可以填写多个,服务器ID可通过
“查询云手机服务器列表”接口获得。
使用示例
参考《云手机API参考》的“推送共享存储文件”章节。
后续操作
参考《云手机API参考》“重置云手机”接口,批量重置所有云手机。
1.3.5 更新应用版本
更新应用版本,需要先删除服务器上的旧版本应用,然后重新部署新版本应用。
删除旧版本应用
● 接口示例:
POST https://{CPH Endpoint}/v1/{project_id}/cloud-phone/phones/share-files Header:
Content-Type: application/json X-Auth-Token: ${token}
Body:
{ "file_paths": [
"/data/app/${package_name}-1", "/data/app/${package_name}-2", "/data/data/${package_name}",
"/data/media/0/Android/data/${package_name}"
],
"server_ids": [ "${server_id1}", "${server_id2}"
] }
删除服务器(${server_id1}和${server_id2})共享存储中的文件,文件列表包 含:"/data/app/${package_name}-1", "/data/app/${package_name}-2", "/
data/data/${package_name}", "/data/media/0/Android/data/$
{package_name}"。
其中,
– CPH Endpoint、project_id、$token等参数可以参考为单台云手机安装应用 的说明获取。
– file_paths的内容等同于生成应用版本tar包并推至OBS桶中的include_files,
其中package_name为当前应用的包名。
– server_ids为部署应用版本的目标服务器ID列表,可以填写多个,服务器ID可通 过“查询云手机服务器列表”接口获得。
● 使用示例:
参考《云手机API参考》的“删除共享存储文件”章节。
部署新版本应用
参考部署应用来部署应用。
2 云手游接入最佳实践
2.1 创建云手游服务器
操作步骤
1. 登录管理控制台。
2. 在服务列表页,选择“计算 > 云手机 CPH”。
3. 在左侧导航栏选择“服务器管理”,单击右上角的“购买服务器实例”。
4. 根据界面提示,完成基础配置,如表2-1。
表2-1 参数说明
参数 参数说明 样例
计费模式 服务器仅支持一种计费类型:包
年/包月。 包年/包月
区域 不同区域的云服务产品之间内网 互不相通。建议您选择最靠近您 业务的区域,这样可以减少网络 时延、提高访问速度。
需要注意:服务器购买成功后不 能更换区域。
华东-上海一
可用区 指在同一区域下,电力、网络隔 离的物理区域,可用区之间内网 互通,不同可用区之间物理隔 离。
● 如果您需要提高应用的高可用 性,建议您将服务器创建在不 同的可用区。
● 如果您需要较低的网络时延,
建议您将服务器创建在相同的 可用区。
可用区1
最佳实践 2 云手游接入最佳实践
参数 参数说明 样例 服务器类型 包括云手机服务器和云手游服务
器,请根据业务场景进行选择。
详情请参见“规格”。
云手机服务器 physical.rx1.xlarge
实例规格 请根据业务场景进行选择。 rx1.cp.c60.d10.e1v1 手机镜像 云手机实例运行的操作系统,目
前只支持Android系统,其他手机 系统由于商业授权缘故,不能提 供。
AOSP7.1.1
购买量 ● 服务器的数量,一次最多可购 买10台服务器。
● 购买时长:可选取的时间范围 为1个月~3年。
服务器数量:1 购买时长:6个月
5. 单击“下一步:网络配置”。根据界面提示,完成网络配置。
“西南-贵阳一”区域已上线自定义网络功能,推荐您使用自定义网络配置,如表
2-2所示。
其中physical.rx1系列服务器qemu类型的手机规格暂不支持自定义网络,采用系 统定义网络配置如表2-3所示。
说明
云手机网络配置分为两种模式:
● 自定义网络:自定义网络是云手机全新一代网络配置管理模式,支持您复用已有的VPC 网络管理云手机服务器,支持云手机服务器复用您已购买的共享带宽等资源,自定义网 络当前仅支持“西南-贵阳一”区域。
● 系统定义网络:系统定义网络是云手机第一代网络模式,由系统为您的云手机服务器自 动创建VPC网络及带宽,不支持复用您已有的VPC网络及带宽资源。
表2-2 自定义网络配置(当前仅支持“西南-贵阳一”区域)
参数 参数说明 样例
网络 在下拉列表中选择可用的虚拟私有云、子网,并设置 私有IP地址的分配方式。
云手机网络使用虚拟私有云(VPC)提供的网络,包 括子网、安全组等。您可以选择使用已有的虚拟私有 云网络,或者创建新的虚拟私有云。
无
参数 参数说明 样例 安全组授
权 云手机服务将为您创建一个“cph_admin_trust”委 托,该委托包含的权限为:“VPC FullAccess”。
授权云手机服务为您创建委托,需确定您的登录用户 具有“Security Administrator”权限或者具备创建委 托的细粒度权限“iam:agencies:createAgency”。
了解更多请参考权限管理。
云手机服务将使用该委托完成如下操作:
● 为云手机/云游戏实例创建弹性网卡、弹性公网 IP、虚拟IP。
● 为云手机/云手游服务器创建默认安全组,并设置 安全组开放端口范围,该端口开放范围将映射到每 个云手机/云游戏实例以支持实例开放应用访问端 口。
说明同一VPC下的弹性云服务器默认无法通过1-9999端口访 问云手机/云游戏实例,若想放开此限制,请参考使用自 定义网络的安全组授权规则添加高优先级的安全组规 则。
无
弹性公网IP ● 现在购买:为云手机购买新的弹性公网IP。 现在购买
线路 ● 静态BGP中的网络结构发生变化,运营商无法在第 一时间自动调整网络设置以保障用户的体验度。
● 全动态BGP可根据设定的寻路协议第一时间自动优 化网络结构,以保持客户使用的网络持续稳定、高 效。
全动态BGP
公网带宽 ● 独享带宽:按照实际使用的流量来计费。
● 共享带宽:一个带宽中可以加入多个弹性公网IP,
多个弹性公网IP共用一个带宽。
共享带宽
带宽大小 可选带宽范围:1-2000 Mbit/s。 300 Mbit/s 带宽名称 “公网带宽”选择“共享带宽”时,请在下拉框中选
择已有的共享带宽名称。 bandwidt
h-001
最佳实践 2 云手游接入最佳实践
表2-3 系统定义网络配置
参数 参数说明 样例
带宽类型 ● 独享带宽:用户购买的每一台服务器所独 立使用的网络带宽,适用于有较大规模数 据流量和访问量,对带宽要求较高的场 景。
● 共享带宽:用户名下的多台服务器所共用 的网络带宽,适用于多业务流量错峰分布 场景,可为企业节省公网带宽使用成本。
共享带宽
创建方式 包括“已有共享带宽”和“新建共享带宽”。
在第一次使用共享带宽购买服务器时,请选择
“新建共享带宽”。
新建共享带宽
计费方式 独享目前仅支持按流量计费,共享带宽目前仅 支持按带宽计费。
● 按流量计费:指定带宽上限,按实际使用 的出公网流量计费,与使用时间无关。
● 按带宽计费:按照带宽大小和使用时长计 费,未包含在服务器费用内。
按带宽计费
带宽 独享带宽参数,指带宽上限,固定取值为300
Mbit/s。 300 Mbit/s
带宽名称 ● “创建方式”选择“已有共享带宽”时,
请在下拉框中选择已有的共享带宽名称。
已有的共享带宽上会显示当前已关联的服 务器数量,方便您选择。
● “创建方式”选择“新建共享带宽”时,
请在文本框中输入共享带宽的名称。
whole- bandwidth- xxxx
带宽大小 “创建方式”选择“新建共享带宽”时,需要 设置此参数。
带宽大小越大,费用越高,请您按照业务需要 进行合理设置。
5 Mbit/s
说明
系统定义网络仅供云手机所在服务器使用,您无法在您VPC服务下看到相关网络带宽信 息。
6. 单击“下一步:高级配置”。根据界面提示,完成高级配置,如表2-4所示。
表2-4 参数说明
参数 参数说明 样例
名称 为您购买的服务器和云手机实例命名,名称不可 重复。
命名规则:购买服务器后,名称自动按序增加数 字后缀;服务器对应的云手机实例则自动按序增 加5位数字后缀。
例如,您购买了1台服务器,该服务器对应60台 云手机,名称输入CPH。则,服务器名称为 CPH-1,云手机实例的名称为
CPH-1-00001~CPH-1-00060。
CPH
密钥对 使用密钥对(Key Pair)进行远程登录身份验 证。
● 如果您已经创建过密钥对,并且本地已妥善 保存私钥文件(.pem格式),可以在下拉列 表选择已有密钥对。
● 如果您从未创建过密钥对,请单击“新建密 钥对”,跳转至云服务器控制台进行新建。
然后返回该页面,刷新下拉列表,选择创建 好的密钥对。
私钥用于远程登录身份认证,为保证安全,
私钥文件(.pem格式)只能下载一次,请妥 善保管。更多关于密钥对的介绍请参见“创 建密钥对”。
KeyPair- test
VNC登录 开启后,可通过VNC的方式连接云手机。
说明
部分云手机规格不支持此功能,支持的规格请参见支 持VNC登录的云手机规格有哪些?。
-
应用端口 高级配置勾选“应用端口”时,该参数可配。适 用于云手机需要对外提供服务的场景。
● 应用名称:支持大小写英文字母。不能为关 键字“ADB”和“VNC”,大小写的任意组 合都不行。
● 端口号:在0~65535之间。
● 公网访问
– 勾选时,表示可通过公网访问云手机该应 用端口,即云手机对应的端口以及相对应 的服务器公网端口直接暴露在公网,无需 鉴权即可互通。
– 不勾选时,表示只能通过租户的私有网络 访问。
注意
● 请谨慎勾选“公网访问”,确保在勾选前已做 好安全控制。
● 云手机服务未对客户选择打开的端口做任何安 全鉴权。
key 10001 不勾选
最佳实践 2 云手游接入最佳实践
7. 单击“下一步:确认订单”,您可再次核对信息。
– 确认无误后,单击“立即购买”。
– 如果还需要修改,单击“上一步”,修改参数。
8. 根据界面提示,完成支付。
大约需要20~30分钟,购买服务器成功后,系统会自动创建好云手机。
云手机状态变为“运行中”时,表示云手机实例可使用。
2.2 游戏部署
2.2.1 获取云手机列表
参考《云手机API参考》的“查询云手机列表”章节获取云手机列表。
接口示例
GET https://{CPH Endpoint}/v1/{project_id}/cloud-phone/phones?
phone_name={phone_name}&server_id={server_id}&status={status}&offset={offset}&limit={limit}&type={typ e}Header:
Content-Type: application/json X-Auth-Token: $token
其中,
● CPH Endpoint为Endpoint列表中CPH对应区域的终端节点,如华北-北京四为 cph.cn-north-4.myhuaweicloud.com。
● project_id为云手游服务器所属区域对应的项目ID,如
083e9f825e80f50c2f96c0045edc70e8。可通过如下方式获取:
a. 登录管理控制台。
b. 单击右上角用户名下的“我的凭证”。
c. 在“API凭证”页面的项目列表中获取项目ID。
图2-1 获取项目 ID
● URL中"?"之后的部分为可选参数。
● $token为获取token接口的响应结果。
接口使用示例
GET https://cph.cn-north-4.myhuaweicloud.com/v1/083e9f825e80f50c2f96c0045edc70e8/cloud-phone/
phones Header:
Content-Type: application/json X-Auth-Token: $token
说明
$token需要换成实际获取到的token值;此处未指定phone_name、server_id等参数信息。
2.2.2 为单台云手机安装应用
参考《云手机API参考》的“安装apk”章节为单台云手机安装应用。
前提条件
● 云手游服务器所在Region的OBS桶中已经存放好对应的APK安装包。否则,需要 上传安装包,可参考https://support.huaweicloud.com/qs-obs/
obs_qs_0002.html进行上传。
● 确保已经配置好OBS桶的授权策略,具体操作请参考读取OBS桶数据资源章节。
接口示例
POST https://{CPH Endpoint}/v1/{project_id}/cloud-phone/phones/commands Header:
Content-Type: application/json X-Auth-Token: $token Body:
{ "command": "install",
"content": "-t -r obs://{bucket_name}/{object_path}", "phone_ids": [
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
] }
其中,
● CPH Endpoint、project_id、$token等参数取值可以参考获取云手机列表章节的 说明获取。
● bucket_name为对象存储服务OBS的桶名,object_path为游戏apk安装包的存放 路径。
● phone_ids为需要安装应用的云手机ID(通过获取云手机列表获得,可以填多个,
填多个则为多台云手机安装apk应用)。
接口使用示例
POST https://cph.cn-east-3.myhuaweicloud.com/v1/081ceeb7fb800f0c2f4cc004bb39c2f7/cloud-phone/
phones/commands
Content-Type: application/json X-Auth-Token: $token { "command": "install",
"content": "-t -r obs://yzw-apk-install/apk/com.hermes.bgame.apk", "phone_ids": [
"bdc2f2e960164dd9a2765374afeea300"
] }
● yzw-apk-install为OBS桶名,apk/com.hermes.bgame.apk为安装包存放路径,
obs://yzw-apk-install/apk/com.hermes.bgame.apk为游戏安装包全路径。
最佳实践 2 云手游接入最佳实践
● $token需要换成实际获取到的token值。
2.2.3 生成应用版本 tar 包并推至 OBS 桶
前提条件
● 需确保云手机已安装对应的应用。
● 确保已配置好OBS桶的授权策略,具体操作请参考向OBS桶上传数据资源章节。
接口示例
POST https://{CPH Endpoint}/v1/{project_id}/cloud-phone/phones/batch-storage Header:
Content-Type: application/json X-Auth-Token: $token Body:
{ "storage_infos": [{
"phone_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "include_files": [
"/data/app/${package_name}-1", "/data/app/${package_name}-2", "/data/data/${package_name}",
"/data/media/0/Android/data/${package_name}"
],
"bucket_name": "${bucket_name}",
"object_path": "apk/${package_name}_${version_name}.tar"
}]
}
其中,
● CPH Endpoint、project_id、$token、bucket_name、object_path等参数可以参 考为单台云手机安装应用章节的说明获取。
● package_name为当前应用的包名,version_name为当前应用的版本号(可自定 义)。
● object_path为游戏tar包上传的目的路径(注意:apk为任意已存在文件夹,$
{package_name}_${version_name}.tar中除.tar后缀外,其余内容需根据实际名称 来修改)。
● 如上示例中,include_files的四个元素为固定路径。
● 如果该游戏的安装包为xapk类型,则需要在include_files中增加“/data/
media/obb/${package_name}”路径。
● phone_id为安装了对应游戏的云手机ID。
2.2.4 部署应用
推送tar包至服务器,即将文件“apk/${package_name}_${version_name}.tar”推送 到服务器(${server_id1}和${server_id2})的共享存储中。
接口示例
POST https://{CPH Endpoint}/v1/{project_id}/cloud-phone/phones/share-files Header:
Content-Type: application/json X-Auth-Token: $token Body:
{ "bucket_name":${bucket_name},
"object_path": "apk/${package_name}_${version_name}.tar", "server_ids": [
"${server_id1}", "${server_id2}"
] }
其中,
● CPH Endpoint、project_id、$token、bucket_name、object_path等参数可以参 考4.2 为单台云手机安装应用的说明获取。
● package_name为当前应用的包名,version_name为当前应用的版本号(可自定 义)。
● object_path为游戏tar包上传的目的路径。
说明
apk为任意已存在文件夹,${package_name}_${version_name}.tar中除.tar后缀外,其余 内容需根据实际名称来修改。
● server_ids为部署应用版本的目标服务器ID列表,可以填写多个,服务器ID可通过
“查询云手机服务器列表”接口获得。
使用示例
参考《云手机API参考》的“推送共享存储文件”章节。
后续操作
参考《云手机API参考》“重置云手机”接口,批量重置所有云手机。
2.2.5 更新应用版本
更新应用版本,需要先删除服务器上的旧版本应用,然后重新部署新版本应用。
删除旧版本应用
● 接口示例:
POST https://{CPH Endpoint}/v1/{project_id}/cloud-phone/phones/share-files Header:
Content-Type: application/json X-Auth-Token: ${token}
Body:
{ "file_paths": [
"/data/app/${package_name}-1", "/data/app/${package_name}-2", "/data/data/${package_name}",
"/data/media/0/Android/data/${package_name}"
],
"server_ids": [ "${server_id1}", "${server_id2}"
] }
删除服务器(${server_id1}和${server_id2})共享存储中的文件,文件列表包 含:"/data/app/${package_name}-1", "/data/app/${package_name}-2", "/
data/data/${package_name}", "/data/media/0/Android/data/$
{package_name}"。
其中,
最佳实践 2 云手游接入最佳实践
– CPH Endpoint、project_id、$token等参数可以参考为单台云手机安装应用 的说明获取。
– file_paths的内容等同于生成应用版本tar包并推至OBS桶中的include_files,
其中package_name为当前应用的包名。
– server_ids为部署应用版本的目标服务器ID列表,可以填写多个,服务器ID可通 过“查询云手机服务器列表”接口获得。
● 使用示例:
参考《云手机API参考》的“删除共享存储文件”章节。
部署新版本应用
参考部署应用来部署应用。
2.3 游戏接入
为了方便用户快速开发云手游业务,我们推出了云手游SDK(Software Development Kit)。SDK是对云手游服务提供的API接口的封装,以简化用户的开发工作。直接调用 云手游SDK提供的接口函数即可实现接入云游戏的目的。
Android SDK提供aar包和jar包两种接入方式:
● aar包接入:在jar包接入的基础上,SDK中集成了云游戏运行所需的Activity,
Activity的生命周期在SDK中维护。
● jar包接入:SDK提供云游戏接入的基础能力,客户实现activity或fragment,启动 游戏时将承载云游戏渲染画面的viewgroup传入SDK。
请参考aar/jar功能接口示例完成游戏的初始化,启动,设置游戏画面配置,退出等生 命周期管理。
导入 SDK
将SDK编译好的aar包导入到“app/libs”目录下。
将SDK编译好的jar包导入到“app/libs”目录下,将so库文件导入到“app/jniLibs”目 录下。
使用 AAR SDK
在调用SDK接口的类文件中导入:
import com.huawei.cloudappsdk.manager.CloudAppManager;
在调用接口前设置ApplicationContext:
CloudAppManager.defaultManager().setApplicationContext(getApplicationContex t());
使用 JAR SDK
在调用SDK接口的类文件中导入:
import com.huawei.cloudgame.api.CloudGameManager;
import com.huawei.cloudgame.api.ICloudGame;
2.4 实例调度
完成游戏接入后,您可设计完成云手游实例调度系统开发,实例调度系统主要完成如 下几项功能:
● 收到新用户接入请求时,从当前空闲的云游戏实例池中分配一个给用户,并将实 例状态更新为已分配。
● 用户接入后,并且游戏已启动完成时,将实例状态更新为占用中。
● 用户云游戏使用结束后,退出云游戏实例,将实例状态更新为空闲态。
即您需要维护云手游实例的空闲、已分配、占用中等几个状态机,以完成用户的接入 或退出。
为支撑您完成上述云游戏实例的状态机维护,云手游媒体引擎将在游戏实例接入,游 戏启动,游戏退出时与您的应用之间进行鉴权及事件通知,以方便您知晓实例的使用 状态,完成实例的状态维护。
具体您需要使用如下几个接口:
说明
以下参数仅为示例,参数所填ID等内容请以实际为准。
进入游戏事件
● 请求样例
{"event_type": "app",
"event": {
"phone_id": "a7f3a1c5258347d6b6f1def79e11f2bc",
"status": 0,
"session_id": "856f5555806443e98b7ed04c5a9d6a9a",
"ticket": "5558064856f5555806443e98b7ed04c5a9d6a9ab7ed04c5a9d6a806443e98",
"time": "2019-11-14T19:38:49Z",
"app_id": "856f5555806443e98b7ed04c5a9d6a9a",
"error_msg": null }}
● 响应样例
{"request_id": "6837531fd3f54550927b930180a706bf"
}
退出游戏事件
● 请求样例
{"event_type": "app",
"event": {
"phone_id": "a7f3a1c5258347d6b6f1def79e11f2bc",
"status": 1,
"session_id": "856f5555806443e98b7ed04c5a9d6a9a",
"ticket": "5558064856f5555806443e98b7ed04c5a9d6a9ab7ed04c5a9d6a806443e98",
"time": "2019-11-14T19:38:49Z",
"run_time": 41000,
"app_id": "856f5555806443e98b7ed04c5a9d6a9a",
"error_msg": null
最佳实践 2 云手游接入最佳实践
}}
● 响应样例
{"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"
}
2.5 运营运维
云手游数据运营
在云手游运营过程中,为了满足您以数据驱动运营的诉求,云手游提供了相关接口帮 助您获取云手游实例相关运营数据,具体包括如下:
● 注册云游戏数据监听
通过注册云游戏数据监听器,获取云游戏发送到真机侧的数据。
● 获取网络时延
该接口用于获取网络时延RTT。
● 获取接收到的帧数
该接口用于获取单位时间内接收到的视频帧数。
● 获取接收到音视频数据大小
该接口用于获取接收到音视频数据的大小。
云手游实例运维
● 重启服务器/更新镜像
● 重启云手机实例/更新云手机镜像
● 重置云手机实例
● 更新云手机属性
● 查询任务执行状态
● 查看监控指标
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": [
"/data/app/com.taptap-1", "/data/data/com.taptap",
"/data/media/0/Android/data/com.taptap"
],
"bucket_name": "your-bucket-name", "object_path": "your/dir/taptap.tar"
} ] }'
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的诉求。
说明
该接口的更多说明,请参考“推送共享存储文件”。
6. 进入云手机控制台,单击已接受文件推送的服务器名称,在“实例管理”中,勾 选所有需要安装以上APP的云手机实例,单击“重置”。
注意
此步骤为重置,并非重启。
最佳实践 3 批量安装应用至云手机
执行结果
重置成功后,所有云手机均已安装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 $DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list wget -qO- https://download.rethinkdb.com/repository/raw/pubkey.gpg | sudo apt-key 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 修订记录
版本日期 变更说明
2021-09-01 第四次正式发布。
新增通过STF批量管理云手机章节。
2020-11-06 第三次正式发布。
新增将某台云手机内的APP共享安装至多台云手机章 节。
2020-02-18 第二次正式发布。
新增
使用云手机进行云手游系统建设 修改
调整大纲结构,优化全文内容。
2019-08-30 第一次正式发布。
最佳实践 C 修订记录