Android集成AWS Amplify与KinesisVideo出现java.lang.NoSuchFieldError问题
问题根源
该问题的核心原因是AWS Android SDK版本冲突,并非ProGuard代码裁剪导致:
你项目中同时引入了两套AWS相关依赖:一是版本为1.28.1的Amplify组件,二是版本为2.16.13的独立AWS Android SDK组件。Amplify底层默认依赖特定版本的AWS Android SDK,与你手动指定的2.16.13版本不匹配。
Gradle构建时会自动按照依赖调解规则选择更高版本的依赖包,最终打包进APK的AWSKinesisVideoClient类来自非2.16.13版本的SDK,与你本地查看的源码版本不一致,因此实际运行的类中不存在timeOffset字段,触发NoSuchFieldError报错。
修复方案
方案1:强制统一所有AWS SDK版本
在app模块的build.gradle文件中,android配置块之后、dependencies块之前添加如下配置,强制所有AWS相关依赖使用你指定的2.16.13版本:
configurations.all { resolutionStrategy { force "com.amazonaws:aws-android-sdk-core:2.16.13" force "com.amazonaws:aws-android-sdk-kinesisvideo:2.16.13" force "com.amazonaws:aws-android-sdk-kinesisvideo-signaling:2.16.13" force "com.amazonaws:aws-android-sdk-mobile-client:2.16.13" force "com.amazonaws:aws-android-sdk-auth-userpools:2.16.13" } }
方案2:对齐独立AWS SDK与Amplify的兼容版本
将你手动指定的aws_version升级到与Amplify 1.28.1兼容的版本,例如修改为2.49.0即可匹配该版本Amplify的底层依赖。
后续验证操作
配置修改完成后按以下顺序操作避免缓存干扰:
- 点击Android Studio的
Build -> Clean Project清理旧构建产物 - 点击
Sync Project with Gradle Files同步依赖 - 卸载测试设备上已安装的旧版应用
- 重新构建安装应用验证问题是否解决
可选排查方法
如果修改后仍有问题,可以在Android Studio终端执行./gradlew app:dependencies(Windows系统执行gradlew.bat app:dependencies),搜索com.amazonaws关键词,查看所有AWS相关依赖的版本是否完全统一,确认冲突是否已解决。
内容的提问来源于stack exchange,提问作者can
相关产品推荐
相关产品推荐

