Flutter使用flutter_reactive_ble编译报错android:usesPermissionFlags未找到
错误原因
android:usesPermissionFlags 是Android 12(API 等级31)才新增的系统属性,你当前项目的compileSdkVersion配置为29,低于要求的最低版本,编译时无法识别该属性,因此触发资源链接失败报错。
同时你使用的BLUETOOTH_SCAN权限本身也是Android 12新增的蓝牙权限,flutter_reactive_ble库适配了新版蓝牙权限规则,自动引入了对应属性配置,才会触发该问题。
解决办法
- 方案1(推荐):升级编译SDK版本
将android/app/build.gradle中的compileSdkVersion和targetSdkVersion都调整为31或更高版本即可。该方案不会影响低版本设备的正常运行,因为minSdkVersion仍为21,仅在编译阶段使用高版本SDK识别新增属性。
修改后的配置参考:compileSdkVersion 31 defaultConfig { minSdkVersion 21 targetSdkVersion 31 } - 方案2:给权限配置添加版本适配标记
若暂时无法升级编译SDK,可在AndroidManifest.xml中给BLUETOOTH_SCAN权限添加版本适配标记,避免低版本编译时识别未知属性,需要先在manifest根节点添加工具命名空间声明xmlns:tools="http://schemas.android.com/tools",再修改权限配置:
该方案存在副作用:Android 12及以上系统运行时,蓝牙扫描可能会被判定为需要位置权限,兼容性不如方案1。<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" tools:remove="android:usesPermissionFlags" tools:targetApi="s" /> - 方案3:降级flutter_reactive_ble版本
可将flutter_reactive_ble降级到未适配Android 12蓝牙权限的旧版本,该方案会影响新版系统的功能使用,不推荐。
内容的提问来源于stack exchange,提问作者Michał Śniady
相关产品推荐
相关产品推荐

