通用流程

更新时间:2025-01-20 02:40:25

本文以无影云手机Java SDK中的云手机详情查询接口DescribeAndroidInstances为例,介绍编写无影云手机Java SDK的通用流程。

前提条件

您已经创建了AccessKey。具体操作,请参见创建AccessKey

说明

为避免主账号泄露AccessKey带来的安全风险,建议您创建RAM用户,授予RAM用户无影云手机相关的访问权限,再使用RAM用户的AccessKey调用SDK。具体操作,请参见通过RAM用户控制资源访问

操作步骤

如果想要先验证某个OpenAPI接口,可以在阿里云官方网站进行调试。下文以查询云手机实例信息的接口DescribeAndroidInstances为例。

  1. 打开DescribeAndroidInstances - 查询实例详细信息文档,并单击右上角的调试

  2. OpenAPI门户页面上,根据提示登录您的阿里云账号。

  3. 填写相关输入参数后,单击发起调用,即可看到调用结果。image

  4. 调试通过后,如需获取示例代码,请在右侧面板上单击SDK示例页签,然后选择一种语言,并单击下载完整工程image.png

示例工程代码说明

上述工程中的示例代码说明如下,供参考。

  1. 初始化配置对象com.aliyun.teaopenapi.models.Config

    Config对象存放AccessKeyId、AccessKeySecretendpoint等配置,如示例中的endpointeds-aic.cn-shanghai.aliyuncs.com。更多关于地域的信息,请参见DescribeRegions - 查询可用地域

    com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
            .setAccessKeyId(accessKeyId)
            .setAccessKeySecret(accessKeySecret);
    // Endpoint 请参考 https://api.aliyun.com/product/eds-aic
    config.endpoint = "eds-aic.cn-shanghai.aliyuncs.com";
  2. com.aliyun.eds_aic20230930.Client类中生成对象client。

    后续从com.aliyun.eds_aic20230930.models中获得requestresponse

    return new com.aliyun.eds_aic20230930.Client(config);
  3. 创建对应APIRequest,类的命名规则为API方法名加Request。示例如下:

    com.aliyun.eds_aic20230930.models.DescribeAndroidInstancesRequest describeAndroidInstancesRequest = new com.aliyun.eds_aic20230930.models.DescribeAndroidInstancesRequest();
  4. 设置请求类request的参数。

    通过request类的属性来设置必要的信息,即API中必须要提供的信息,例如:

    describeAndroidInstancesRequest.setAndroidInstanceIds(java.util.Arrays.asList("acp-bqshsra8naueg****"));
  5. 通过client对象获得对应requestresponse

    com.aliyun.eds_aic20230930.models.DescribeAndroidInstancesResponse resp = client.describeAndroidInstancesWithOptions(describeAndroidInstancesRequest, runtime);
    com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resp));
  6. 调用response中对应的属性获得返回的参数值。

    假设需要获取requestId

    String requestId = resp.getBody().getRequestId();
  7. 使用catch()处理报错。

    catch (Exception e) {
        e.printStackTrace();
    }

执行结果

全部返回信息如下所示:

{
    "headers": {
        "access-control-allow-origin": "*",
        "date": "Tue, 14 Jan 2025 09:13:47 GMT",
        "content-length": "877",
        "keep-alive": "timeout=25",
        "x-acs-request-id": "68339213-CCA6-50AC-B570-72A47D6*****",
        "connection": "keep-alive",
        "content-type": "application/json;charset=utf-8",
        "etag": "8RPVrEAbI88HSKYWixBhTIQ7",
        "access-control-expose-headers": "*",
        "x-acs-trace-id": "54a60ee6d9705a6a64c6a377da0bc2db"
    },
    "statusCode": 200,
    "body": {
        "instanceModel": [
            {
                "androidInstanceGroupId": "ag-bqshsra8naue*****",
                "androidInstanceGroupName": "sshtest",
                "androidInstanceId": "acp-bqshsra8naue*****",
                "androidInstanceName": "sshtest-19",
                "androidInstanceStatus": "RUNNING",
                "appInstanceGroupId": "aig-0bszojpu6zp2*****",
                "appInstanceId": "ai-0cfaij2zwx2v*****",
                "chargeType": "PostPaid",
                "cpu": "2",
                "disks": [
                    {
                        "diskSize": 32,
                        "diskType": "SYSTEM"
                    }
                ],
                "gmtCreate": "2025-01-14 11:43:03",
                "gmtModified": "2025-01-14 11:44:03",
                "imageVersion": "cicd.1.7.0.cpu.android12.arm64.1743.20250107175442",
                "instanceType": "acp.basic.small",
                "memory": 4096,
                "networkInterfaceIp": "10.0.64.200",
                "officeSiteId": "cn-hangzhou+dir-01730*****",
                "persistentAppInstanceId": "p-0cfaij2zwx2v*****",
                "policyGroupId": "pg-0afrwut55kdr*****",
                "publicIpAddress": "8.149.**.**",
                "regionId": "cn-hangzhou",
                "renderingType": "CPU"
            }
        ],
        "requestId": "68339213-CCA6-50AC-B570-72A47D6*****",
        "totalCount": 1
    }
}

完整示例代码

以下为本文示例的完整Java SDK代码。

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    /**
     * 使用AK&;SK初始化账号Client
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.eds_aic20230930.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(yourAccessKeyId)
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(yourAccessKeySecret);
        // Endpoint 请参考 https://api.aliyun.com/product/eds-aic
        config.endpoint = "eds-aic.cn-shanghai.aliyuncs.com";
        return new com.aliyun.eds_aic20230930.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.eds_aic20230930.Client client = Sample.createClient();
        com.aliyun.eds_aic20230930.models.DescribeAndroidInstancesRequest describeAndroidInstancesRequest = new com.aliyun.eds_aic20230930.models.DescribeAndroidInstancesRequest();
        describeAndroidInstancesRequest.setAndroidInstanceIds(java.util.Arrays.asList("acp-bqshsra8nauegsckk"));
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            com.aliyun.eds_aic20230930.models.DescribeAndroidInstancesResponse resp = client.describeAndroidInstancesWithOptions(describeAndroidInstancesRequest, runtime);
            com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resp));

            String requestId = resp.getBody().getRequestId();
            System.out.println(requestId);

        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

  • 本页导读 (1)
  • 前提条件
  • 操作步骤
  • 示例工程代码说明
  • 执行结果
  • 完整示例代码
  • 相关文档