You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中geolocator与permission_handler的compileSdkVersion冲突如何解决

问题根因

该冲突是由于两个依赖包的适配Android版本范围不重叠导致:permission_handler 8.2.5已经开始适配Android 12(API 31),引用了只有API 31及以上才有的系统符号;而geolocator_android 1.0.0版本仅适配到API 30,使用了API 31中被废弃的接口,且插件默认开启了Werror规则,将废弃API警告直接升级为编译错误。

解决方法

方案1:升级依赖包版本(优先推荐)

这是成本最低的解决方式,两个包的官方新版本已经完成了高版本compileSdk的兼容适配:

  • 升级geolocator到2.0.0及以上版本,对应的geolocator_android依赖会自动升级到适配compileSdk 31+的版本,废弃API触发的Werror问题已被官方修复
  • 升级permission_handler到9.0.0及以上版本,同时确保你的Flutter SDK版本在2.10.0以上,适配Android 12+的权限声明要求
    升级完成后将项目全局compileSdkVersion设置为33即可正常编译。

方案2:保留当前依赖版本的适配方案

如果因项目旧兼容逻辑无法升级依赖,可通过修改Android编译配置绕过问题:

  1. 将项目的compileSdkVersion统一设置为31
  2. 打开android/app/build.gradle文件,在android代码块中添加如下配置,关闭废弃API的错误拦截规则:
android {
    // 原有项目配置无需修改,新增以下配置
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
        disable 'DeprecatedApi'
    }
    // 如果你使用的AGP版本为7.0及以上,使用以下配置替换上面的lintOptions
    /*
    lint {
        checkReleaseBuilds = false
        abortOnError = false
        disable.add('DeprecatedApi')
    }
    */
}
  1. 同步Gradle配置后重新编译即可,该配置仅修改编译检查规则,不会影响应用的实际运行逻辑和两个依赖包的功能可用性。

可选补充配置

如果编译过程中出现AndroidManifest.xml的android:exported属性冲突,可在android/app/src/main/AndroidManifest.xml的manifest根节点添加tools:replace="android:exported"属性,同时在manifest头部添加xmlns:tools="http://schemas.android.com/tools"声明即可解决。

内容的提问来源于stack exchange,提问作者Arslan Kaleem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:36:03