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

Android 13下Type 4 Tag的HostApduService NFC通信异常问题

Android 13(API 33)下HostApduService模拟Type4 Tag链路丢失问题排查与解决

问题背景

此前为替代API 29废弃的NfcAdapter.CreateNdefMessageCallback,采用HostApduService模拟Type4 Tag实现设备间NDEF传输,该功能在Android 11(API 30)下运行正常,但设备升级到Android 13(API 33)后失效。

故障执行流程

  • Select APDU命令:响应正常(返回9000)
  • Select CC文件APDU命令:响应正常(返回9000)
  • 读取CC文件命令返回结果符合规范,但随后触发OnDeactivated回调,断开原因标记为LinkLoss

CC文件响应详情

返回的CC文件响应为:00 0F 20 FF FF FF FF 04 06 E1 04 FF FE 00 00 90 00,该响应完全符合NFC Forum Type4 Tag官方文档规范,但读取设备接收后直接断开连接。

临时修复方案

将CC文件中的最大NDEF文件大小字段值从FF FE(对应65534字节)修改为7FFF(对应32767字节)后,功能恢复正常。

可能原因分析

尽管NFC Forum文档明确最大NDEF文件大小的有效范围是0005h到FFFEh,但Android 13的NFC服务或驱动可能存在兼容性限制:

  • 系统层面新增了NDEF文件大小上限校验,超过32KB的配置被判定为异常参数
  • 读取端的NFC驱动在Android 13中对大尺寸参数的处理逻辑发生变更,导致链路异常中断

调试NFC读取设备接收APDU响应的方法

  1. 开启NFC调试日志

    • 开发者选项中开启「NFC调试日志」,或通过ADB命令配置:
      adb shell setprop log.tag.Nfc VERBOSE
      adb shell setprop log.tag.NfcJni VERBOSE
      
    • 抓取日志后过滤Nfc关键字,查看读取设备处理CC文件响应时的详细状态变化或报错信息
  2. 使用APDU调试工具模拟测试

    • 借助NFC调试工具(如NFC Tools)模拟读取端,发送APDU命令并观察响应后的行为,对比不同CC文件配置下的执行差异
  3. 添加HostApduService回调日志

    • 在onApduCommand和onDeactivated方法中添加详细日志,记录每一步APDU命令的接收、响应时间点,确认链路断开是否由读取端主动发起
  4. 对比Android版本NFC源码差异

    • 查看Android 11到Android 13中NfcService、HostApduService相关源码的变更,重点关注Type4 Tag解析、CC文件处理逻辑的修改内容

内容的提问来源于stack exchange,提问作者Michal Lyga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:07:54