升级JDK17与Gradle插件8.5后Android应用BC类找不到崩溃
异常信息
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.bouncycastle.jce.provider.BouncyCastleProvider" on path: DexPathList[***] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
问题场景
将JDK版本升级至17、Gradle插件升级至8.5后,Android应用运行时执行以下代码创建BouncyCastleProvider实例时崩溃,抛出上述异常:
Security.addProvider(new BouncyCastleProvider());
当前依赖配置
dependencies { implementation "org.bouncycastle:bcprov-jdk15to18:1.78.1" }
解决方案
更换适配JDK17的BouncyCastle依赖
将原依赖替换为兼容高版本JDK的包,bcprov-jdk18on适配JDK17及以上版本,修改依赖配置:dependencies { implementation "org.bouncycastle:bcprov-jdk18on:1.78.1" }启用Core Library Desugaring
AGP 8.5搭配JDK17时,部分JDK核心类需要通过desugar处理才能在Android设备正常运行,在模块的build.gradle中添加以下配置:android { compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }配置R8混淆规则(若开启混淆)
如果应用启用了R8代码混淆,需确保BouncyCastle的类不被移除,在proguard-rules.pro中添加:-keep class org.bouncycastle.** { *; } -dontwarn org.bouncycastle.**
内容的提问来源于stack exchange,提问作者sharath
相关产品推荐
相关产品推荐

