Android 在gradle构建期间检索AWS数据

Android 在gradle构建期间检索AWS数据,android,amazon-web-services,gradle,dependencies,Android,Amazon Web Services,Gradle,Dependencies,我试图从AWS(例如从cognito或s3)获取一些值。我认为合适的做法是在build.gradle中定义一个任务,该任务在gradle运行时在构建时执行。我遵循了文档()中的说明,但在尝试使用已导入的AWS依赖项中的方法时,出现了“无法解析符号”错误 这些导入的依赖项遵循教程中给出的示例: ... dependencies { implementation platform('software.amazon.awssdk:bom:2.X.X') implementation 'sof

我试图从AWS(例如从cognito或s3)获取一些值。我认为合适的做法是在build.gradle中定义一个任务,该任务在gradle运行时在构建时执行。我遵循了文档()中的说明,但在尝试使用已导入的AWS依赖项中的方法时,出现了“无法解析符号”错误

这些导入的依赖项遵循教程中给出的示例:

...
dependencies {
  implementation platform('software.amazon.awssdk:bom:2.X.X')

  implementation 'software.amazon.awssdk:kinesis'
  ...
}
代码中的gradle中出现错误(例如,无法识别KinesClient):


如何在构建期间从gradle访问AWS值?这是最根本的问题。如果我提供的信息不清楚,请告诉我。

这里有一个完整的示例(V1和V2),说明如何使用JavaS3API和一个运行正常的build.gradle文件

JAVA V1 下面是S3Java代码:

package com.amazon.s3;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CreateBucketRequest;
import com.amazonaws.services.s3.model.GetBucketLocationRequest;


import java.io.IOException;

public class CreateBucket {

    public static void main(String[] args) throws IOException {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "My Bucket";

        try {

            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(clientRegion)
                    .build();

            if (!s3Client.doesBucketExistV2(bucketName)) {
                // Because the CreateBucketRequest object doesn't specify a region, the
                // bucket is created in the region specified in the client.
                s3Client.createBucket(new CreateBucketRequest(bucketName));

                // Verify that the bucket was created by retrieving it and checking its location.
                String bucketLocation = s3Client.getBucketLocation(new GetBucketLocationRequest(bucketName));
                System.out.println("Bucket location: " + bucketLocation);
            }
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it and returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
这是build.gradle文件:

plugins {
    id 'java'
}

group 'AWSS3_Gra'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    implementation platform('com.amazonaws:aws-java-sdk-bom:1.11.228')
    implementation 'com.amazonaws:aws-java-sdk-s3'
    testCompile group: 'junit', name: 'junit', version: '4.11'
}
JAVA V2

下面是S3Java代码:

package com.example.s3;


import software.amazon.awssdk.core.SdkField;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
import software.amazon.awssdk.services.s3.model.S3Exception;
import software.amazon.awssdk.services.s3.model.S3Object;
import java.util.List;
import java.util.ListIterator;


public class ListObjects {

    public static void main(String[] args) {


        String bucketName = "BucketName";
        Region region = Region.US_WEST_2;
        S3Client s3 = S3Client.builder()
                .region(region)
                .build();

        ListBucketObjects(s3, bucketName);
    }


    public static void ListBucketObjects(  S3Client s3, String bucketName ) {

        try {
            ListObjectsRequest listObjects = ListObjectsRequest
                    .builder()
                    .bucket(bucketName)
                    .build();

            ListObjectsResponse res = s3.listObjects(listObjects);
            List<S3Object> objects = res.contents();

            for (ListIterator iterVals = objects.listIterator(); iterVals.hasNext(); ) {
                S3Object myValue = (S3Object) iterVals.next();
                System.out.print("\n The name of the key is " + myValue.key());
                System.out.print("\n The object is " + calKb(myValue.size()) + " KBs");
                System.out.print("\n The owner is " + myValue.owner());
            }
        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
    //convert bytes to kbs
    private static long calKb(Long val) {
        return val/1024;

    }

}
希望这有助于


PS-以下是有关此信息的AWS开发指南链接:

事实证明,定义依赖项应该在构建脚本中完成,以便在构建期间从gradle访问它们:

buildscript {
    repositories {
...
    }
    dependencies {
...
        classpath 'software.amazon.awssdk:kinesis:VERSION'
    }
}
然后,您必须在任务开始之前导入您将要使用的类,就像在java类中所做的那样,这样就可以了

group 'aws.test'
version '1.0'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    implementation platform('software.amazon.awssdk:bom:2.10.30')
    implementation 'software.amazon.awssdk:s3'
    testImplementation group: 'junit', name: 'junit', version: '4.11'
}
buildscript {
    repositories {
...
    }
    dependencies {
...
        classpath 'software.amazon.awssdk:kinesis:VERSION'
    }
}