Flutter集成nfc_emulator插件添加服务后编译报错求助
Flutter使用nfc_emulator插件添加NFC服务后Gradle编译失败(exit code 1)解决方法
一、先获取详细编译错误日志
仅显示Exception: Gradle task assembleDebug failed with exit code 1无法定位具体问题,需获取完整错误信息:
- 终端运行:
flutter run -v,查看输出中的具体错误栈 - 或在Android Studio打开项目,查看Gradle Console面板的详细编译日志
二、检查AndroidManifest.xml配置问题
1. 确认aid_list.xml资源文件存在
配置中引用了@xml/aid_list,需在android/app/src/main/res/xml/目录下创建该文件,示例内容:
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="NFC Emulator Service" android:requireDeviceUnlock="false"> <aid-group android:description="Emulated Card AIDs" android:category="other"> <aid-filter android:name="F0010203040506"/> <!-- 可添加多个AID,或后续通过代码动态设置 --> </aid-group> </host-apdu-service>
2. 验证服务类路径正确性
确认io.flutter.plugins.nfc_emulator.NfcEmulatorService是插件提供的正确服务类:
- 检查插件版本是否匹配,若版本过低可能不存在该类
- 查看插件的Android源码目录(
android/src/main/java/io/flutter/plugins/nfc_emulator/)确认类存在
3. 适配Android 12+的导出规则
android:exported="true"需确保服务的Intent Filter符合Android 12+的要求,当前配置中的HOST_APDU_SERVICE action是合法的,无需调整,但需确认项目的compileSdkVersion至少为31。
三、修复Dart代码语法错误
你的startStopEmulator方法存在语法缺失和逻辑漏洞:
- 缺少else块的闭合
} - 未更新
_started状态,导致按钮逻辑失效
修复后的代码:
void startStopEmulator() async { if (_started) { await NfcEmulator.stopNfcEmulator(); setState(() { _started = false; }); } else { await NfcEmulator.startNfcEmulator( controller.text, ctrl.text, ); setState(() { _started = true; }); } }
四、通用排查步骤
- 清理项目缓存:
flutter clean flutter pub get - 检查插件兼容性:确认
pubspec.yaml中nfc_emulator的版本与当前Flutter SDK版本兼容 - 验证Android SDK配置:确保
android/app/build.gradle中的minSdkVersion不低于21(NFC卡模拟的最低要求)
内容的提问来源于stack exchange,提问作者Malavika k s
相关产品推荐
相关产品推荐

