You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android(Kotlin)非Amplify环境下AWS SDK for DynamoDB使用及导入异常问题

解决AWS DynamoDB SDK导入失败及Android端基础配置问题

一、先解决SDK依赖与导入问题

1. 检查Gradle依赖配置

在app模块的build.gradle.kts里添加对应依赖,确保版本统一:

dependencies {
    // AWS核心库
    implementation("com.amazonaws:aws-android-sdk-core:2.74.0")
    // DynamoDB核心库
    implementation("com.amazonaws:aws-android-sdk-dynamodb:2.74.0")
    // Cognito身份认证库
    implementation("com.amazonaws:aws-android-sdk-cognitoidentityprovider:2.74.0")
}

版本选最新稳定版即可,但所有AWS子库版本必须一致,避免依赖冲突。

2. 确认仓库配置

项目根目录的build.gradle.kts里要包含Maven Central:

repositories {
    google()
    mavenCentral()
}

3. 同步并重建项目

  • 点击Android Studio右上角的「Sync Project with Gradle Files」
  • 执行Build > Clean Project + Build > Rebuild Project

4. 验证导入语句

比如导入常用类:

import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient
import com.amazonaws.services.dynamodbv2.model.PutItemRequest
import com.amazonaws.services.dynamodbv2.model.AttributeValue

如果还是红标,去External Libraries里检查是否有aws-android-sdk-dynamodb相关包,没下载成功的话手动刷新依赖。

二、Cognito访客访问与IAM权限配置

1. 创建Cognito身份池

  • 控制台创建身份池,开启「允许未认证身份访问」
  • 记下身份池ID,以及自动生成的未认证用户IAM角色ARN

2. 配置IAM角色权限

给未认证角色添加DynamoDB权限策略(按需调整):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:Scan"
            ],
            "Resource": "arn:aws:dynamodb:你的区域:你的AWS账号ID:table/你的表名"
        }
    ]
}

遵循最小权限原则,只给需要的操作权限。

3. Android端初始化身份凭证

在App启动时初始化Cognito凭证提供者:

import com.amazonaws.auth.CognitoCachingCredentialsProvider
import com.amazonaws.regions.Regions

val credentialsProvider = CognitoCachingCredentialsProvider(
    applicationContext,
    "你的身份池ID",
    Regions.你的区域 // 比如Regions.CN_NORTH_1
)

三、初始化DynamoDB客户端并操作表

// 初始化客户端
val dynamoDBClient = AmazonDynamoDBClient(credentialsProvider)
dynamoDBClient.setRegion(Regions.你的区域)

// 示例:写入数据
val item = mapOf(
    "id" to AttributeValue().withS("demo001"),
    "content" to AttributeValue().withS("测试DynamoDB写入")
)
val request = PutItemRequest()
    .withTableName("你的表名")
    .withItem(item)

dynamoDBClient.putItem(request)

额外排查点

  • 网络权限:AndroidManifest.xml必须添加<uses-permission android:name="android.permission.INTERNET" />
  • 区域一致性:身份池、DynamoDB表、客户端配置的区域必须完全一致
  • 依赖冲突:如果有其他第三方库和AWS SDK冲突,尝试用exclude排除重复依赖

内容的提问来源于stack exchange,提问作者schnondle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:35:05