Flutter引入ssh2 2.2.3包出现compileDebugJavaWithJavac构建错误如何解决?
Flutter ssh2包Android端构建失败解决方案
错误根因
ssh2 1.6以上版本依赖的org.bouncycastle:bcprov-jdk15on:1.69组件使用Java 15编译(类文件主版本59对应Java 15),当前项目Android构建环境的Jetifier工具不支持转换该版本的字节码,导致构建任务失败。
可落地解决方案
- 方案1:锁定ssh2包版本为1.6.0
直接在pubspec.yaml中指定兼容的版本号即可,无需修改其他配置:
修改完成后执行dependencies: flutter: sdk: flutter # 固定使用无兼容性问题的1.6.0版本 ssh2: ^1.6.0flutter pub get,重新运行项目即可正常构建。 - 方案2:升级Android构建环境适配高版本ssh2
若必须使用ssh2 1.6以上的新特性,可按如下步骤升级构建配置:- 打开
android/gradle/wrapper/gradle-wrapper.properties,将Gradle版本升级到7.0及以上,示例配置:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip- 打开
android/build.gradle,将Android Gradle插件版本升级到对应匹配的7.0及以上:
buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.0.4' } }- 打开
android/app/build.gradle,指定编译使用的Java版本为11及以上:
android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = '11' } }- 执行
flutter clean清理旧构建缓存后,重新运行项目即可。
- 打开
- 方案3:强制降级bouncycastle依赖版本
无需修改ssh2版本和Gradle配置,直接在Android构建时强制使用低版本的bouncycastle组件即可:
打开android/app/build.gradle,在文件末尾添加如下配置:
同步Gradle配置后重新构建即可解决兼容性问题。configurations.all { resolutionStrategy.force 'org.bouncycastle:bcprov-jdk15on:1.68' }
内容的提问来源于stack exchange,提问作者Curious
相关产品推荐
相关产品推荐

