Flutter应用提交Play Console审核时遇java.lang.SecurityException报错求助
问题描述
提交Flutter应用至Google Play Console审核时遇到错误:java.lang.SecurityException: No active admin,应用未使用锁屏等设备管理功能,但审核附带视频中应用运行正常。
错误截图:
应用的pubspec.yaml依赖配置如下:
dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 dio: ^4.0.6 equatable: ^2.0.5 freezed_annotation: ^2.1.0 intl: ^0.17.0 json_annotation: ^4.7.0 flutter_bloc: ^8.1.1 bloc: ^8.1.0 get_it: ^7.2.0 logger: ^1.1.0 flutter_localizations: sdk: flutter hive: ^2.2.3 hive_flutter: ^1.1.0 path_provider: ^2.0.11 flutter_svg: ^1.1.5 auto_route: ^5.0.1 google_fonts: ^3.0.1 html: ^0.15.1 easy_refresh: ^3.0.4+3 connectivity_plus: ^3.0.2 tuple: ^2.0.1 url_launcher: ^6.1.7 collection: ^1.16.0 image_picker: ^0.8.6 cupertino_back_gesture: ^0.1.0 flutter_html: ^3.0.0-alpha.6 firebase_messaging: ^14.2.1 firebase_core: ^2.4.1 flutter_local_notifications: any alice: ^0.3.2 firebase_crashlytics: ^3.0.11 device_info_plus: ^8.0.0 flutter_native_splash: ^2.2.18 fluttertoast: ^8.2.1 webview_flutter: ^3.0.4 flutter_pdfview: ^1.2.9 path: ^1.8.2 lottie: ^2.3.0 percent_indicator: ^4.2.3 flutter_launcher_icons: ^0.13.0 in_app_purchase: ^3.1.5 in_app_purchase_storekit: ^0.3.6+3 in_app_purchase_platform_interface: ^1.3.3 in_app_purchase_android: ^0.2.5+4 dev_dependencies: flutter_test: sdk: flutter build_runner: ^2.2.1 flutter_lints: ^2.0.0 freezed: any json_serializable: ^6.4.0 # hive_generator: ^1.1.3 auto_route_generator: any
原因分析
这个异常的核心是代码尝试调用需要设备管理员权限的API,但当前应用未被系统激活为设备管理员。即便你没有直接使用设备管理功能,也可能是某个第三方依赖包间接引入了相关逻辑,或者AndroidManifest.xml中意外添加了相关权限/组件声明。
解决步骤
检查AndroidManifest.xml配置
打开android/app/src/main/AndroidManifest.xml,搜索以下内容:- 权限声明:
<uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" /> - 设备管理员组件:包含
android.app.action.DEVICE_ADMIN_ENABLED的<receiver>标签
如果发现上述内容且并非业务必需,直接移除。
- 权限声明:
排查第三方依赖
执行命令查看完整依赖树:flutter pub deps重点排查涉及设备权限、支付、设备信息类的包(比如
in_app_purchase_android、device_info_plus),确认是否有包依赖了设备管理相关的Android库。如果找到嫌疑包,查看其官方文档或Issue,确认是否存在已知问题,考虑更新到最新版本或替换替代包。模拟审核场景复现错误
在本地模拟器或测试设备上,尝试在无设备管理员权限的环境下运行应用,复现报错。可以借助Android Studio的权限管理工具,临时禁用相关权限,定位触发异常的代码路径。添加异常捕获
如果确实有依赖包不可避免地调用了相关API,在对应代码位置添加异常捕获,避免崩溃:try { // 可能触发异常的代码 } on PlatformException catch (e) { if (e.code == 'SecurityException') { // 处理无管理员权限的情况,比如提示用户或跳过操作 } }更新所有依赖包
将pubspec.yaml中的所有依赖更新到最新稳定版本,旧版本的第三方包可能存在未修复的权限问题。执行以下命令更新:flutter pub upgrade
内容的提问来源于stack exchange,提问作者Veronika Haichenko

