文档首页> 云手机服务器 CPH> 最佳实践> 批量安装应用至云手机
更新时间:2024-01-31 GMT+08:00
分享

批量安装应用至云手机

在一台云手机内安装APP后,可以通过调用接口的方式将此APP共享安装至多台云手机,省去重复安装的时间。

假设这台安装了APP的云手机为种子云手机。

约束与限制

  • 该方案仅适用于qemu规格的云手机,即实例规格名称中不包含“qemu”字样。
    图1 实例规格
  • 种子云手机必须为一台未进行过任何操作的云手机。如果云手机上存在历史操作,请重置云手机

操作步骤

  1. 登录管理控制台,选择“存储 > 对象存储服务 OBS”,参考“批量控制”创建一个用来存放文件的OBS桶,并为桶设置访问权限。

    注意:为了成功上传文件到桶,在创建桶策略时请设置为“目录读写”模式,如图2所示。

    图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. 此步骤需区分“存储1.0”和“存储2.0”服务器
    • 存储2.0服务器(推荐)

      通过调用接口的方式,将OBS桶内的文件推送至服务器。

      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的诉求。

      该接口的更多说明,请参考“推送共享存储文件”。

  1. 此步骤需区分“存储1.0”和“存储2.0”服务器
    • 存储2.0的服务器(推荐)

      在云手机中执行安装应用命令:appctrl install package_name,其中的包名对应第五步中的package_name,例如:com.miniteck.miniworld。

    • 存储1.0的服务器
      进入云手机控制台,单击已接受文件推送的服务器名称,在“实例管理”中,勾选所有需要安装以上APP的云手机实例,单击“重置”。

      此步骤为重置,并非重启。

执行结果

存储1.0的机器在重置手机成功后均已安装APP;存储2.0的机器无需重置,后续需要时直接调用 appctrl start package_name来启动应用。

分享:

    相关文档

    相关产品