【问题标题】:Can't load Amazon Web Service (AWS) S3 libraries on Android Studio无法在 Android Studio 上加载 Amazon Web Service (AWS) S3 库
【发布时间】:2018-06-19 01:45:59
【问题描述】:

好吧,我刚刚尝试在 Android Studio 中包含 AWS 库。我试图从我的移动应用程序向我的 S3 服务器发送数据,但我不能。

这是 build.gradle(应用程序):

dependencies {
    ...
    compile (group: 'com.amazonaws', name: 'aws-java-sdk', version: '1.11.257'){ transitive = true }
    ...
}

这是 AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="...">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    ...
    <application ...>
        ...
    </application>
</manifest>

这是一个 Activity.java:

package ...;
...
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3Client;
import com.orhanobut.logger.Logger;
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.PutObjectRequest;
...
public class Activity extends AppCompatActivity
{
    ...
    public void sendData(View v)
    {
        AmazonS3 s3client;
        File file;
        final String bucketName     = "************************";
        final String keyName        = "********************";
        final String secretKey      = "****************************************";

        try
        {
            file = new File(uri.getPath());
            s3client = AmazonS3ClientBuilder.standard().withCredentials(
                new AWSStaticCredentialsProvider
                (
                    new BasicAWSCredentials(keyName, secretKey)
                )
            ).build();
            s3client.putObject(new PutObjectRequest(bucketName, keyName, file));//~ */
        }
        catch (NoClassDefFoundError|IllegalStateException|IllegalArgumentException ex)
        {
            ex.printStackTrace();
        }
        catch (AmazonServiceException ase)
        {
            StringBuilder str_builder_error_mensaje = new StringBuilder("");

            ase.printStackTrace();
            str_builder_error_mensaje.append("Caught an AmazonServiceException, which means your request made it to Amazon S3, but was rejected with an error response for some reason.");
            str_builder_error_mensaje.append("\nError Message:    ").append(ase.getMessage());
            str_builder_error_mensaje.append("\nHTTP Status Code: ").append(ase.getStatusCode());
            str_builder_error_mensaje.append("\nAWS Error Code:   ").append(ase.getErrorCode());
            str_builder_error_mensaje.append("\nError Type:       ").append(ase.getErrorType().name());
            str_builder_error_mensaje.append("\nRequest ID:       ").append(ase.getRequestId());
            Logger.d(str_builder_error_mensaje.toString());
        }
        catch (AmazonClientException ace)
        {
            StringBuilder str_builder_error_mensaje = new StringBuilder("");

            ace.printStackTrace();
            str_builder_error_mensaje.append("Caught an AmazonClientException, which means the client encountered an internal error while trying to communicate with S3, such as not being able to access the network.");
            str_builder_error_mensaje.append("\nError Message:    ").append(ace.getMessage());
            Logger.d(str_builder_error_mensaje.toString());
        }
    }
    ...
}

然后我在模拟器上执行时收到此错误消息:

W/System.err: java.lang.NoClassDefFoundError: com.amazonaws.services.s3.AmazonS3Client
W/System.err:     at com.amazonaws.services.s3.AmazonS3Builder$1.apply(AmazonS3Builder.java:35)
W/System.err:     at com.amazonaws.services.s3.AmazonS3Builder$1.apply(AmazonS3Builder.java:32)
W/System.err:     at com.amazonaws.services.s3.AmazonS3ClientBuilder.build(AmazonS3ClientBuilder.java:64)

我一直无法在 Android Studio 中加载 AWS 的库。

【问题讨论】:

    标签: android amazon-web-services android-studio amazon-s3 aws-sdk


    【解决方案1】:

    根据AWS Android setup docs,您应该链接aws-android-sdk 文件(而不是aws-java-sdk 文件)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2013-08-31
      • 2014-07-13
      • 2016-05-01
      • 2014-02-02
      相关资源
      最近更新 更多