Flutter运行报错:sqflite:compileDebugJavaWithJavac 求助
问题原因分析
这个编译冲突的核心原因是cached_network_image的间接依赖与sqflite的Java编译环境不兼容:
- cached_network_image会引入Android端的第三方依赖(如Glide图片加载库),部分依赖可能使用了Java 11以上的语法特性,或者其Gradle配置覆盖了你全局设置的Java 11编译规则,导致sqflite模块编译时被迫适配更高版本的Java标准。
- 你当前使用的Gradle 6.5对Java 16的支持不完善(Gradle官方仅在7.x及以上版本完全兼容Java 16),加上sqflite本身的Android代码基于Java 11及以下语法编写,多重不匹配最终触发编译失败。
解决方法
方案1:对齐Gradle与Java版本兼容性
升级Gradle到7.0及以上版本(适配Java 16):
- 编辑
android/gradle/wrapper/gradle-wrapper.properties文件,修改distributionUrl:distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip - 同步修改
android/build.gradle中的Android Gradle插件版本(Gradle 7.4对应插件版本7.2.0左右):dependencies { classpath 'com.android.tools.build:gradle:7.2.0' // 其他依赖项保持不变 } - 确保全局编译选项统一,在
android/app/build.gradle中明确:android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = '11' } }
方案2:锁定冲突子依赖版本
- 执行
flutter pub deps命令,查看cached_network_image的依赖树,定位到可能引发冲突的子依赖(比如Glide相关包)。 - 在
android/build.gradle的allprojects块中添加强制依赖规则,指定兼容Java 11的版本:allprojects { configurations.all { resolutionStrategy { force 'com.github.bumptech.glide:glide:4.12.0' // 替换为实际兼容的版本号 } } }
方案3:降级Java版本到11
若不想升级Gradle,直接将Java版本切换为OpenJDK 11,与你设置的编译选项完全匹配,从根源避免版本兼容问题。
方案4:替换图片缓存依赖
如果上述方案均无效,可暂时使用其他轻量图片缓存库替代cached_network_image,或自行实现基础的图片本地缓存逻辑。
内容的提问来源于stack exchange,提问作者Arjun Malhotra
相关产品推荐
相关产品推荐

