

# 使用由 API Gateway 为 REST API 生成的 Android 开发工具包
<a name="how-to-generate-sdk-android"></a>

在本部分中，我们介绍由 API Gateway 为 REST API 生成的 Android 开发工具包的使用步骤。您必须先完成[为 API Gateway 中的 REST API 生成 SDK](how-to-generate-sdk.md)中的步骤，然后才能继续进行操作。

**注意**  
 生成的开发工具包与 Android 4.4 及更早版本不兼容。有关更多信息，请参阅 [Amazon API Gateway 重要说明](api-gateway-known-issues.md)。

**安装和使用由 API Gateway 生成的 Android 开发工具包**

1. 提取您之前下载的 API Gateway 生成的 .zip 文件中的内容。

1. 下载并安装 [Apache Maven](https://maven.apache.org/)（最好是版本 3.x）。

1. 下载并安装 [JDK 8](https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html)。

1. 设置 `JAVA_HOME` 环境变量。

1. 运行 **mvn install** 命令，将编译的构件文件安装到您的本地 Maven 存储库中。这将创建包含编译的开发工具包库的 `target` 文件夹。

1. 将 `target` 文件夹中的开发工具包文件（其名称源自您在生成开发工具包时指定的 **Artifact Id** 和 **Artifact Version**，如 `simple-calcsdk-1.0.0.jar`），以及 `target/lib` 文件夹中的所有文件夹库复制到项目的 `lib` 文件夹中。

   如果您使用的是 Android Studio，请在客户端应用程序模块下创建一个 `libs` 文件夹，并将所需的 .jar 文件复制到此文件夹中。验证该模块的 Gradle 文件中的依赖项部分是否包含以下内容。

   ```
       compile fileTree(include: ['*.jar'], dir: 'libs')
       compile fileTree(include: ['*.jar'], dir: 'app/libs')
   ```

   确保没有声明重复的 .jar 文件。

1. 使用 `ApiClientFactory` 类初始化 API Gateway 生成的开发工具包。例如：

   ```
   ApiClientFactory factory = new ApiClientFactory();
   
   // Create an instance of your SDK. Here, 'SimpleCalcClient.java' is the compiled java class for the SDK generated by API Gateway. 
   final SimpleCalcClient client = factory.build(SimpleCalcClient.class);
   
   // Invoke a method: 
   //   For the 'GET /?a=1&b=2&op=+' method exposed by the API, you can invoke it by calling the following SDK method:
   
   Result output = client.rootGet("1", "2", "+");
   
   //     where the Result class of the SDK corresponds to the Result model of the API.
   //
   
   //   For the 'GET /{a}/{b}/{op}'  method exposed by the API, you can call the following SDK method to invoke the request,
   
   Result output = client.aBOpGet(a, b, c);
   
   //     where a, b, c can be "1", "2", "add", respectively.
   
   //   For the following API method:
   //        POST /
   //        host: ...
   //        Content-Type: application/json
   //    
   //        { "a": 1, "b": 2, "op": "+" }
   // you can call invoke it by calling the rootPost method of the SDK as follows:
   Input body = new Input();
   input.a=1;
   input.b=2;
   input.op="+";
   Result output = client.rootPost(body);
   
   //      where the Input class of the SDK corresponds to the Input model of the API.
   
   // Parse the result:
   //     If the 'Result' object is { "a": 1, "b": 2, "op": "add", "c":3"}, you retrieve the result 'c') as 
   
   String result=output.c;
   ```

1. 要使用 Amazon Cognito 凭证提供程序授权调用您的 API，请通过 API Gateway 生成的开发工具包使用 `ApiClientFactory` 类传递一组 Amazon 凭证，如下例所示。

   ```
   // Use CognitoCachingCredentialsProvider to provide Amazon credentials
   // for the ApiClientFactory
   AWSCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
           context,          // activity context
           "identityPoolId", // Cognito identity pool id
           Regions.US_EAST_1 // region of Cognito identity pool
   );
   
   ApiClientFactory factory = new ApiClientFactory()
     .credentialsProvider(credentialsProvider);
   ```

1. 要使用 API Gateway 生成的开发工具包设置 API 键，请使用与以下示例类似的代码。

   ```
   ApiClientFactory factory = new ApiClientFactory()
     .apiKey("YOUR_API_KEY");
   ```