You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
    });
  }
}

四、通用排查步骤

  1. 清理项目缓存:
    flutter clean
    flutter pub get
    
  2. 检查插件兼容性:确认pubspec.yaml中nfc_emulator的版本与当前Flutter SDK版本兼容
  3. 验证Android SDK配置:确保android/app/build.gradle中的minSdkVersion不低于21(NFC卡模拟的最低要求)

内容的提问来源于stack exchange,提问作者Malavika k s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:21:05