Android 因 minifyEnabled 和 AWS 调用而崩溃
Posted
技术标签:
【中文标题】Android 因 minifyEnabled 和 AWS 调用而崩溃【英文标题】:Android crash with minifyEnabled and AWS call 【发布时间】: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 规则中的任何想法?
【问题讨论】:
【参考方案1】:我建议使用以下 ProGuard 规则。
-keep class com.amazon.** *;
-keep class com.amazonaws.** *;
-keep class com.amplifyframework.** *;
我怀疑你会找到一个
ClassNotFoundException
或和/或 NoClassDefFoundError
在日志中的其他位置,这将有助于微调规则。
您看到的特定错误 arises when there are no key Condition
s 包含在发送到 DyanmoDB 的请求中。
【讨论】:
以上是关于Android 因 minifyEnabled 和 AWS 调用而崩溃的主要内容,如果未能解决你的问题,请参考以下文章
Android minifyEnabled true 在调试和发布模式下不起作用
Android proguard minifyEnabled true + multidex = error
Android minifyEnabled true for firebase
Android Gradle 插件BuildType 编译类型配置 ④ ( minifyEnabled 配置 | multiDexEnabled | pseudoLocalesEnabled )