Flutter安卓清单已加定位权限仍提示缺失问题排查
问题解决方案
1. 已添加定位权限仍提示未定义问题
产生原因:
- 代码中使用了
LocationAccuracy.best高精度定位,仅配置ACCESS_COARSE_LOCATION权限不满足要求 - 未先请求运行时权限就直接调用定位接口
- 可能修改了错误目录下的AndroidManifest.xml
解决步骤:
- 确认修改的是
android/app/src/main/目录下的AndroidManifest.xml,不要修改debug、profile目录下的配置文件 - 补充定位权限,AndroidManifest.xml的manifest节点下添加如下配置:
<!-- 基础定位权限 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Android 12及以上额外适配 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="32" />
- 调整定位代码,先请求运行时权限再调用定位接口,修正后代码如下:
onPressed: () async { LocationPermission permission = await Geolocator.requestPermission(); if (permission == LocationPermission.denied || permission == LocationPermission.deniedForever) { print("定位权限被用户拒绝"); return; } Geolocator .getCurrentPosition(desiredAccuracy: LocationAccuracy.best, forceAndroidLocationManager: true) .then((Position position) { setState(() { _currentPosition = position; print ( "LAT: ${_currentPosition.latitude}, LNG: ${_currentPosition.longitude}"); }); }).catchError((e) { print(e); }); },
2. Attribute android:icon is not allowed here 报错解决
产生原因:
AGP(Android Gradle Plugin)7.0及以上版本不再支持在AndroidManifest.xml的根节点配置package属性,需要迁移到build.gradle中配置namespace
解决步骤:
- 删除AndroidManifest.xml根节点的
package="com.example.agent"配置 - 打开
android/app/build.gradle,在android代码块中添加如下配置:
android { namespace "com.example.agent" // 原有其他配置保持不变 compileSdkVersion 33 ... }
- 检查
android/app/src/main/res/mipmap各密度目录下是否存在ic_launcher对应资源文件,不存在可替换为存在的资源名,或用flutter_launcher_icons工具重新生成启动图标。
3. Unresolved class 'MainActivity' 报错解决
解决步骤:
- 先完成上述namespace配置迁移
- 检查MainActivity文件路径是否正确:
若使用Kotlin,路径应为android/app/src/main/kotlin/com/example/agent/MainActivity.kt
若使用Java,路径应为android/app/src/main/java/com/example/agent/MainActivity.java - 打开MainActivity文件,确认第一行包名配置为
package com.example.agent,类名确实为MainActivity且继承FlutterActivity - 完成所有修改后执行如下命令清理缓存重新构建:
flutter clean flutter pub get cd android # Windows系统执行 gradlew clean ./gradlew clean
重新运行项目即可解决所有报错。
内容的提问来源于stack exchange,提问作者Asmoun
相关产品推荐
相关产品推荐

