使用两个加密库时出现tink-android模块重复类错误求助
这个问题的核心是androidx.security:security-crypto-ktx依赖的是tink-android(包含tink核心功能+Android专属实现),而com.google.crypto.tink:apps-paymentmethodtoken默认依赖的是tink核心库,两者包含大量重复类,导致编译冲突。直接排除tink-android会破坏EncryptedSharedPreference的依赖,因为它需要tink-android里的Android密钥存储相关实现。
下面是可行的解决步骤:
统一Tink版本并强制使用tink-android
tink-android是tink核心库的超集,包含所有核心功能,同时补充了Android平台的适配代码,所以可以让所有依赖都指向tink-android,替换掉单独的tink核心库。在Module级别的
build.gradle中做如下配置:先声明统一的Tink版本(建议用最新稳定版,比如当前的1.12.0):
ext { tinkVersion = "1.12.0" }引入依赖时,给
apps-paymentmethodtoken排除自带的tink核心库:// EncryptedSharedPreference 依赖 implementation "androidx.security:security-crypto-ktx:1.1.0-alpha06" // 支付方法token库,排除自带的tink核心依赖 implementation("com.google.crypto.tink:apps-paymentmethodtoken:$tinkVersion") { exclude group: "com.google.crypto.tink", module: "tink" }强制所有Tink相关依赖使用
tink-android:configurations.all { resolutionStrategy { force "com.google.crypto.tink:tink-android:$tinkVersion" } }
验证依赖是否正确
同步gradle后,执行./gradlew app:dependencies(或在Android Studio的File > Project Structure > Dependencies中查看依赖树),确认所有com.google.crypto.tink相关的依赖只有tink-android,没有单独的tink核心库。版本兼容性说明
要确保androidx.security:security-crypto-ktx的版本与指定的tinkVersion兼容,比如1.1.0-alpha06版本的security-crypto-ktx默认依赖的就是tink-android:1.12.0,如果使用旧版security库,需要对应调整tinkVersion到匹配的版本。
内容的提问来源于stack exchange,提问作者shubham_ag

