Flutter geolocator_android:compileDebugJavaWithJavac编译报错求助
问题结论
不需要移除google_maps_place_picker_mb: ^2.0.0-mb.20依赖,这个报错和地点选择器本身的兼容性无关。
根因说明
报错核心是传递依赖的小版本升级触发了编译规则冲突:
- 项目锁定的geolocator 8.2.0会自动拉取最新的geolocator_android 3.2.x系列子依赖,其中3.2.1版本调用了Android SDK中标记为废弃的
LocationRequest构造方法与优先级常量 - Android编译流程默认开启了
-Werror参数,会把所有代码警告直接判定为编译错误,最终抛出构建失败 - 之前构建正常是因为本地Pub缓存的geolocator_android版本较低,最近依赖刷新后拉到了存在废弃调用的3.2.1版本才触发问题。
解决方案(按推荐度排序)
方案1:覆盖锁定geolocator_android版本(长期可用,无兼容问题)
直接在项目根目录pubspec.yaml末尾添加依赖覆盖配置,锁定geolocator_android到兼容geolocator 8.x、且修复了废弃API调用的版本,不会和现有地点选择器依赖产生冲突:
dependency_overrides: geolocator_android: 3.2.4
保存后执行以下命令清理缓存重新拉取依赖:
flutter clean flutter pub get
重新构建即可正常编译。
方案2:临时关闭警告转错误规则(应急发版首选)
如果赶版本需要最快出包,可以直接修改Android编译配置,跳过废弃警告的错误判定:
打开android/app/build.gradle文件,在android配置块中添加如下编译参数:
android { compileSdkVersion 32 // 新增以下配置 gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs -= "-Werror" options.compilerArgs << "-Xlint:-deprecation" } } defaultConfig { minSdkVersion 23 targetSdkVersion 32 } }
修改后执行flutter clean再构建即可,这个操作不会改动任何业务依赖,只是让编译器不把废弃API的警告当成错误拦截,紧急发版后再切换到方案1做长期适配即可。
避坑提醒
不要直接升级geolocator到9.0.0版本,会和当前使用的google_maps_place_picker_mb版本存在API不兼容问题,触发更多报错;也没必要替换地点选择器依赖,改造成本远高于上述两个方案。
内容的提问来源于stack exchange,提问作者HahaHoHo
相关产品推荐
相关产品推荐

