Flutter项目集成permission_handler包构建失败出现cannot find symbol错误
报错根本原因
permission_handler 8.0及以上版本新增了对Android 12(API等级31,对应系统代号S)的蓝牙权限适配,代码里引用了只有API 31及以上SDK才提供的Build.VERSION_CODES.S、BLUETOOTH_SCAN、BLUETOOTH_ADVERTISE、BLUETOOTH_CONNECT这些符号。你当前项目的Android编译SDK版本是30,对应Android 11,SDK里没有这些新增的常量定义,编译阶段就会报找不到符号的错误。
解决方案
你可以根据自己的项目需求任选一种方案:
- 方案1:升级Android编译SDK版本
打开你项目的android/app/build.gradle文件,将compileSdkVersion的数值修改为31或更高即可,修改示例:
这个方案可以让你正常使用最新版本的permission_handler,享受到后续的功能更新和问题修复。android { compileSdkVersion 31 // 原来如果是30的话改成31或更高 // 其他配置保持不变 defaultConfig { targetSdkVersion 31 // 建议同步升级targetSdkVersion到31或更高,避免运行时兼容问题 // 其他配置保持不变 } } - 方案2:固定使用低版本permission_handler
如果你暂时不想升级编译SDK,可以在pubspec.yaml里固定使用不需要API 31支持的版本,permission_handler 7.2.0是最后一个兼容编译SDK 30的正式版本,依赖写法示例:
这个就是你现在临时用的规避方案,除了不能用新版的功能之外不会有其他副作用。dependencies: permission_handler: 7.2.0 # 不要加^前缀,避免自动升级到更高版本
内容的提问来源于stack exchange,提问作者Kevnlan
相关产品推荐
相关产品推荐

