Gradle集成IDnow与TrueLayer库报Duplicate class构建失败如何解决
Gradle构建IDnow+TrueLayer依赖重复类问题修复
问题现象
同时在项目中引入IDnow、TrueLayer两个SDK进行开发时,Gradle构建因duplicate class错误失败。
排查确认:
- 冲突根源是IDnow SDK打包时未对BouncyCastle加密库做依赖重定位处理,相关类直接被打进SDK产物、同时还保留了对应库的传递依赖声明
- 若直接从TrueLayer依赖中排除对应BouncyCastle冲突类,应用会在运行时抛出异常崩溃
- 构建时抛出的首个错误信息如下:
> Duplicate class org.bouncycastle.LICENSE found in modules jetified-bcprov-jdk15to18-1.69 (org.bouncycastle:bcprov-jdk15to18:1.69) and jetified-idnow-android-sdk-5.1.11-runtime (de.idnow.sdk:idnow-android-sdk:5.1.11)
修复步骤
- 禁止从TrueLayer侧排除BouncyCastle依赖。该操作会导致TrueLayer运行时加载不到匹配版本的加密类,直接触发崩溃。
- 修改IDnow SDK的引入配置,排除它声明的冗余BouncyCastle传递依赖,示例配置(写在模块级build.gradle的dependencies节点下):
dependencies { // 原有其他依赖保持不变 // 引入IDnow时排除冗余的BouncyCastle传递依赖 implementation("de.idnow.sdk:idnow-android-sdk:5.1.11") { exclude group: "org.bouncycastle" } // TrueLayer依赖保持原有引入方式即可,无需修改 }
- 如果完成上述配置后,仍报BouncyCastle路径下的重复类/资源错误,在android节点下添加全局版本强制规则与打包排除规则,示例配置:
android { // 原有编译配置、defaultConfig等配置保持不变 packagingOptions { // 排除重复的LICENSE校验文件 exclude "org/bouncycastle/LICENSE" pickFirst "META-INF/versions/9/OSGI-INF/MANIFEST.MF" } configurations.all { resolutionStrategy { // 强制全局BouncyCastle依赖版本为1.69,和IDnow内置版本保持一致 force "org.bouncycastle:bcprov-jdk15to18:1.69" force "org.bouncycastle:bcpkix-jdk15to18:1.69" } } }
- 验证操作:
- 执行
./gradlew clean清理旧构建缓存 - 执行正常构建命令确认不再报重复类错误
- 安装包后分别触发IDnow、TrueLayer的相关业务流程,确认无运行时类缺失、方法签名不匹配异常
- 执行
内容的提问来源于stack exchange,提问作者Amir M
相关产品推荐
相关产品推荐

