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

开启minifyEnabled后Android应用调用AWS DynamoDB崩溃,求补充ProGuard规则

解决AWS Android SDK DynamoDB在minifyEnabled=true时崩溃的问题

从你的崩溃日志和配置来看,问题核心在于ProGuard混淆了DynamoDB实体类的关键注解或字段名,导致DynamoDBMapper无法识别查询所需的哈希键(Hash Key),从而抛出IllegalArgumentException: Illegal query expression: No hash key condition is found in the query错误。

你当前的ProGuard规则仅保留了AWS相关类的名称(-keepnames),但没有覆盖实体类的字段、方法以及DynamoDB核心注解的保留,这是导致崩溃的关键缺失。以下是需要补充的规则:

必须添加的ProGuard规则

  1. 保留你的DynamoDB实体类及其注解/字段
    把com.yourpackage.dynamodb.models替换成你项目中实际存放DynamoDB实体类的包路径(比如com.icefield.eventtruly.db.entities):

    # Keep all DynamoDB entity classes, their fields, annotations and constructors
    -keep class com.yourpackage.dynamodb.models.** {
        @com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.* <fields>;
        @com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.* <methods>;
        <init>(...);
    }
    

    这条规则确保实体类的字段、带DynamoDB注解的方法,以及构造函数不会被混淆或移除——DynamoDBMapper正是通过这些信息识别哈希键和数据映射关系。

  2. 保留DynamoDBMapper核心类与注解
    添加以下规则防止核心映射类和注解被ProGuard处理:

    # Keep DynamoDB mapper and related expression classes
    -keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper {
        public <methods>;
    }
    -keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBQueryExpression
    -keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBScanExpression
    -keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBHashKey
    -keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBRangeKey
    -keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBIndexHashKey
    -keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBAttribute
    -keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBTable
    
  3. 优化原有基础规则
    将你原有的-keepnames class com.amazonaws.**和-keepnames class com.amazon.**替换为更严格的-keep规则,同时保留所有注解:

    # Keep AWS SDK classes and annotations required for reflection
    -keep class com.amazonaws.** { *; }
    -keep class com.amazon.** { *; }
    -keepattributes *Annotation*
    

    -keepattributes *Annotation*是关键,它确保所有注解不会被ProGuard移除,而DynamoDB的映射逻辑完全依赖这些注解。

修改后的完整proguard-rules.pro示例

# Keep AWS SDK classes and annotations required for reflection
-keep class com.amazonaws.** { *; }
-keep class com.amazon.** { *; }
-keepattributes *Annotation*

# Keep DynamoDB entity classes, their fields, annotations and constructors
-keep class com.yourpackage.dynamodb.models.** {
    @com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.* <fields>;
    @com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.* <methods>;
    <init>(...);
}

# Keep DynamoDB mapper and related expression classes
-keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper {
    public <methods>;
}
-keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBQueryExpression
-keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBScanExpression
-keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBHashKey
-keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBRangeKey
-keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBIndexHashKey
-keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBAttribute
-keep class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBTable

# Enums are not obfuscated correctly in combination with Gson
-keepclassmembers enum * { *; }

# Request handlers defined in request.handlers
-keep class com.amazonaws.services.**.*Handler

# The following are referenced but aren't required to run
-dontwarn com.fasterxml.jackson.**
-dontwarn org.apache.http.**
-dontwarn com.amazonaws.http.**
-dontwarn com.amazonaws.metrics.**

验证步骤

  1. 将规则中的com.yourpackage.dynamodb.models替换为你项目的实际实体类包路径
  2. 确保build.gradle中minifyEnabled = true
  3. 重新构建并运行应用,测试DynamoDB查询功能,确认崩溃不再发生

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:37:42