批量安装应用至云手机
在一台云手机内安装APP后,可以通过调用接口的方式将此APP共享安装至多台云手机,省去重复安装的时间。
假设这台安装了APP的云手机为种子云手机。
约束与限制
- 该方案仅适用于非qemu规格的云手机,即实例规格名称中不包含“qemu”字样。
图1 实例规格
- 种子云手机必须为一台未进行过任何操作的云手机。如果云手机上存在历史操作,请重置云手机。
操作步骤
- 登录管理控制台,选择“存储 > 对象存储服务 OBS”,参考“批量控制”创建一个用来存放文件的OBS桶,并授权CPH服务操作OBS桶权限。
注意:为了成功上传文件到桶,请确保已授权CPH对应桶的读写权限。
- 使用ADB方式连接种子云手机,并为其安装需要的APP。
详细指导请参考“如何在单台云手机中安装APP?”。
- 通过调用接口的方式,导出种子云手机数据并打包上传至步骤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路径。
示例:
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" } ] }'
- 进入步骤1中的OBS桶,在“对象”中查看并确认步骤3中打包上传的文件是否已全部上传成功。确认成功后执行下一步。
- 此步骤需区分“存储1.0”和“存储2.0”服务器
- 存储2.0服务器(推荐)
curl命令示例如下:
curl -i -k -X POST "https://${CPH Endpoint}/v1/${projectId}/cloud-phone/phones/share-apps" -H "Content-Type: application/json" -H "X-Auth-Token: $token" -d ' { "package_name": "com.miniteck.miniworld", "bucket_name": "your-bucket-name", "object_path": "your/dir/miniworld.tar", "server_ids": ["1678567b8bab40f93711234cb8","1234567b8bab40ffb711234cb"] }'
其中,
- bucket_name、object_path分别对应步骤3中的内容。
- server_ids为接受文件推送的服务器ID列表。指定多个服务器ID,可以实现多台服务器上的云手机均安装APP的诉求。
该接口的更多说明,请参考”推送共享应用”。
- 存储1.0服务器
通过调用接口的方式,将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的诉求。
该接口的更多说明,请参考“推送共享存储文件”。
- 存储2.0服务器(推荐)
- 此步骤需区分“存储1.0”和“存储2.0”服务器
- 存储2.0的服务器(推荐)
在云手机中执行安装应用命令:appctrl install package_name,其中的包名对应第五步中的package_name,例如:com.miniteck.miniworld。
- 存储1.0的服务器
- 存储2.0的服务器(推荐)
执行结果
存储1.0的机器在重置手机成功后均已安装APP;存储2.0的机器无需重置,后续需要时直接调用 appctrl start package_name来启动应用。