升级AGP等依赖后AWS4Signer无法实例化问题求助
解决AGP/KGP升级后Koin无法实例化AWS4Signer的问题
问题背景
将AGP从7.4.2升级至8.2.2,Kotlin Gradle Plugin从1.6.21升级至1.9.22,同时KTX从1.8.0升级至1.12.0后,Koin无法实例化AWS组件,抛出错误:
Caused by: java.lang.InstantiationException: java.lang.Class<com.amazonaws.auth.AWS4Signer> cannot be instantiated at java.lang.Class.newInstance(Native Method)
此前功能正常时使用的混淆规则:
##### AWS ###### -keep class org.apache.commons.logging.** { *; } -keep class com.amazonaws.services.sqs.QueueUrlHandler { *; } -keep class com.amazonaws.javax.xml.transform.sax.* { public *; } -keep class com.amazonaws.javax.xml.stream.** { *; } -keep class com.amazonaws.services.**.model.*Exception* { *; } -keep class org.codehaus.** { *; } -keepattributes Signature,*Annotation* -dontwarn javax.xml.stream.events.** -dontwarn org.codehaus.jackson.** -dontwarn org.apache.commons.logging.impl.** -dontwarn org.apache.http.conn.scheme.**
问题原因
AGP 8.x版本默认启用R8 full mode,混淆优化的严格程度大幅提升。原有混淆规则未对AWS4Signer类及其构造函数做保留处理,导致R8在优化过程中修改了该类的可实例化结构(比如移除无参构造、标记类为不可实例化),而Koin依赖反射实例化该类时就会触发InstantiationException。
解决方案
在原有AWS混淆规则中补充以下内容,确保AWS4Signer及相关签名类被完整保留:
# 保留AWS签名类,避免Koin反射实例化失败 -keep class com.amazonaws.auth.AWS4Signer { *; } # 若还有其他被Koin反射实例化的AWS auth组件,可统一保留整个包 -keep class com.amazonaws.auth.** { *; }
验证方式
- 更新混淆规则后,重新构建并打包应用
- 触发AWS相关功能,确认
AWS4Signer能被Koin正常实例化,无异常抛出
内容的提问来源于stack exchange,提问作者lelestacia
相关产品推荐
相关产品推荐

