当前位置: 首页 > 知识库问答 >
问题:

Android NFC ISODep支持有多成熟?

姜乐家
2023-03-14

我知道这是一个没有明确答案的“讨论”话题,但我真的希望得到一些反馈,以了解在为Android开发NFC应用程序时应该做些什么,特别是使用IsoDep与使用APDU帧的DESFire卡进行通信。

  • 我能期望发送到特定DESFire卡的相同APDU帧在Android设备和版本中的响应相同吗?
  • 我至少应该测试哪些Android版本和设备,以获得合理的覆盖?
  • Android驱动程序中的bug或regression是常见的吗?还是我可以期待这些问题在很久以前就被根除了?
  • 为避免太多麻烦,您推荐支持的Android最早版本是什么?

到目前为止,我的经验是令人惊讶的混合(3个设备,3个不同),我真的希望听到其他开发人员。例如:在S3(Android4.1.2)上工作的相同的APDU命令在S4(Android4.3)上不工作(“错误长度”在第三次自校正握手时失败,在此之前一切正常)。这些手机有不同的NFC芯片组,但我没有想到在APDU帧的抽象级别上会有差异。

共有1个答案

郎慎之
2023-03-14

这的确是一个讨论的话题,但我仍然认为这与Android NFC开发者有关,因此,我将在这里给出我的经验报告:

  • 我能期望发送到特定DESFire卡的相同APDU帧在Android设备和版本中的响应相同吗?

是的,但仅适用于满足ISO/IEC 7816-4要求的APDU命令,但有一些附加限制(例如,并非所有设备都支持扩展长度的APDU,某些设备似乎在case-1 APDU上有问题)。

Broadcom NFC堆栈的最新版本中也存在一些已知的bug(见下文)。

  • 我至少应该测试哪些Android版本和设备,以获得合理的覆盖?

到目前为止,我遇到的最多的问题是使用了Broadcom NFC芯片组的三星设备。尽管它们与APDU无关,尤其是在使用MIFARE Classic时,但它们的表现与其他采用Broadcom芯片组的设备截然不同。例如,S4在系统级阻止MIFARE Classic标签,因此不允许读取标签(N)UID。(从MF Classic读取数据无论如何都不可能使用Broadcom芯片组...)

  • Android驱动程序中的bug或regression是常见的吗?还是我可以期待这些问题在很久以前就被根除了?

正如我之前所说的,Broadcom NFC堆栈存在一些已知问题。特别是对于MIFARE DESFire而言,存在一个已知问题,即NFC堆栈在将基于APDU的任意命令传递给应用程序后,会将其发送给卡。因此,这些命令可能干扰卡与该应用程序之间正在进行的通信(例如,强制基于APDU的通信模式而不是本机命令模式、改变应用程序/文件选择等)。有关更多详细信息,请参阅此错误报告和此stackoverflow问题。

而通过bug追踪器来看,肯定还有更多未解决的问题。

    null

关于基于APDU的通信(与DESFire或其他卡),API10(Android 2.3.3)和更高版本工作正常。当谈到NFC API的可用性(除了简单的APDU交换)和漂亮的应用程序设计时,我会坚持使用Android4.0.3和更高版本。但请记住,最新的平台,特别是Android4.3和Android4.4引入了许多奇怪的行为/错误/(“特性”?)。

为了了解目前使用NFC设备的Android版本用户的感受,我将分享NFC TagInfo的当前设备安装分发版(尽管这可能有点偏颇,因为NFC TagInfo不是针对普通用户的):

  1. Android4.1:36%
  2. Android4.3:21%
  3. Android4.2:19%
  4. Android4.4:18%
  5. Android4.0.3-4.0.4:4%
  6. Android2.3.3-2.3.7:2%
  7. Android4.0-4.0.2:0%
  8. Android3.2:0%
 类似资料:
  • 问题内容: 多少浏览器支持 iOS5可以,其余的如何,以及android等。 问题答案: 在撰写本文时,它仅适用于iOS 5及更高版本上的Mobile Safari。 截至2012年中,最新的Android版本(4.1 Jelly Bean)不支持该版本,但Chrome for Android支持该版本,可以从Google Play下载该版本(仅支持Android 4.0+)。Android 3.

  • 为您的 Flarum 添加新的界面语言很简单。按照下面的说明,下载并安装语言包即可。 在您安装并启用一个语言包后,您可以将其 设置为您论坛的默认语言。当您可以 随时禁用 用不到的语言。如果您有使用任何第三方扩展,请务必在开始前 阅读社区扩展说明。 欲开始,请访问 Flarum 社区上的 Extensions > Languages 标签,并找到您想要安装的语言包。 语言包的安装方式与 扩展 相同。

  • 我们在第十章介绍过国际化和本地化,开发了一个go-i18n库,这小节我们将把该库集成到beego框架里面来,使得我们的框架支持国际化和本地化。 i18n集成 beego中设置全局变量如下: Translation i18n.IL Lang string //设置语言包,zh、en LangPath string //设置语言包所在位置 初始化多语言函数: fu

  • 多请求支持 控制台编辑器允许您编写相互层叠的多个请求,像在控制台章节展示中那样,您可以通过定位光标并使用动作菜单向 Elasticsearch 提交请求。类似的,您可以一次选择多个请求: 图 5. 选择多个请求 控制台会依次提交请求到 Elasticsearch ,并将 Elasticsearch 返回的结果显示在右边窗口。这在调试问题或在多个场景中尝试查询组合时会非常方便。 选择多个请求还允许您

  • 本文向大家介绍ThinkPHP多语言支持与多模板支持概述,包括了ThinkPHP多语言支持与多模板支持概述的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式简述了ThinkPHP的多语言支持与多模板支持。是ThinkPHP中非常重要的技巧,分享给大家供大家参考。具体如下: 一、ThinkPHP多语言支持: config.php配置文件中添加: Home/Lang/文件夹下建立三个文件夹,分别

  • 问题内容: 我一直在处理我公司的CI扩展问题,同时试图弄清楚在CI和多个分支机构中采用哪种方法。在stackoverflow,多个功能分支和持续集成上也存在类似的问题。我开始了新的话题,因为我想进行更多的讨论并提供有关问题的一些分析。 到目前为止,我发现我可以采用2种主要方法(或者可能采取其他一些方法?)。 每个分支有多套工作(在这里谈论詹金斯/哈德森) 编写工具来管理额外的工作 批量创建/修改/