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

Android应用使用Cognito接入Amazon DynamoDB出现Keystore Exception如何解决

报错原因

这个报错是AWS Android SDK的本地密钥存储模块抛出的异常,根因有三类:

  • Android系统KeyStore中存储的AWS加密密钥条目com.amazonaws.android.auth.aesKeyStoreAlias已损坏,或是SDK没有足够权限操作该条目,导致SDK尝试删除旧密钥的操作失败
  • 你使用的AWS Android SDK版本存在已知兼容性bug,2.16.x~2.22.x区间的部分版本在Android 10及以上系统上大概率会触发这个KeyStore操作异常
  • 应用上次运行过程中,密钥写入操作被强行中断,导致KeyStore中的对应密钥条目处于不可读写的异常状态
解决方案

你可以根据你的业务场景选择以下任意一种方案解决:

方案1:升级AWS Android SDK版本

这是最彻底的解决办法,AWS官方已经在2.23.0及之后的稳定版本修复了该KeyStore操作的兼容性问题,直接把项目中AWS相关依赖的版本升级到最新稳定版即可。

方案2:初始化前手动清除损坏的密钥条目

在初始化CognitoCachingCredentialsProvider之前,加入以下代码手动清除旧的损坏密钥:

try {
    KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
    keyStore.load(null);
    String keyAlias = "com.amazonaws.android.auth.aesKeyStoreAlias";
    if (keyStore.containsAlias(keyAlias)) {
        keyStore.deleteEntry(keyAlias);
    }
} catch (Exception e) {
    e.printStackTrace();
}

方案3:替换为非缓存的凭证提供器

如果你不需要本地缓存Cognito的身份凭证,可以直接把CognitoCachingCredentialsProvider替换为CognitoCredentialsProvider,不会触发本地密钥存储的逻辑,自然不会出现该报错。

方案4:临时清除应用数据

如果是测试阶段偶发的报错,可以直接到系统设置的应用管理页,找到你的应用,执行清除存储数据的操作,即可删除损坏的密钥条目解决问题,该方案为临时方案,SDK版本不升级的话可能后续还会复现。

另外注意你现有代码的逻辑漏洞:如果CognitoCachingCredentialsProvider初始化抛出异常,credentialsProvider会为null,后续传给AmazonDynamoDBClient会引发空指针异常,建议在初始化DynamoDB客户端之前增加空值判断。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:57:02