【问题标题】:Android crash with minifyEnabled and AWS callAndroid 因 minifyEnabled 和 AWS 调用而崩溃
【发布时间】:2021-04-23 22:59:15
【问题描述】:

使用各种 aws-android-sdk(版本 2.22.0)(包括 DynamoDB)。

使用minifyEnabled = true,Android 应用程序在 DynamoDB 调用中崩溃。如果我禁用该标志,应用程序不会崩溃。

这是我正在使用的 proguard 规则:

在 build.gradle(应用程序)中:

        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

在 proguard-rules.pro 我有以下内容:

# Class names are needed in reflection
-keepnames class com.amazonaws.**
-keepnames class com.amazon.**

# 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.**

# Android 6.0 release removes support for the Apache HTTP client
-dontwarn org.apache.http.**

# The SDK has several references of Apache HTTP client
-dontwarn com.amazonaws.http.**
-dontwarn com.amazonaws.metrics.**

这是相关的调用堆栈:

E/AndroidRuntime: FATAL EXCEPTION: Thread-13
    Process: com.icefield.eventtruly, PID: 20298
    java.lang.IllegalArgumentException: Illegal query expression: No hash key condition is found in the query
        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.processKeyConditions(:2711)
        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.createQueryRequestFromExpression(:2671)
        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.query(:2438)
        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.query(:2399)
        at c.f.a.g.d$b.run(:339)
        at java.lang.Thread.run(Thread.java:919)

设置 minifyEnabled = false 会导致一切正常。

关于我还可以添加到 proguard 规则中的任何想法?

【问题讨论】:

    标签: android amazon-web-services gradle proguard minify


    【解决方案1】:

    我建议使用以下 ProGuard 规则。

    -keep class com.amazon.** { *; }
    -keep class com.amazonaws.** { *; }
    -keep class com.amplifyframework.** { *; }
    

    我怀疑你会找到一个 ClassNotFoundException 或和/或 NoClassDefFoundError 在日志中的其他位置,这将有助于微调规则。

    您看到的特定错误 arises when there are no key Conditions 包含在发送到 DyanmoDB 的请求中。

    【讨论】:

      猜你喜欢
      • 2019-06-17
      • 2022-11-04
      • 2012-06-21
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 2016-02-07
      • 2016-04-23
      • 2017-10-16
      相关资源
      最近更新 更多