4

显然,如果您有一部有根电话,您可以利用它com.android.nfc_extras来访问卡模拟(ICS 4.0.4 上的安全元素访问控制)等功能。

我知道这是一个非官方的 API,但是否有任何文档(官方或非官方)?或者另一方面,卡模拟是否比我意识到的要复杂得多?

4

2 回答 2

5

请记住,访问安全元件和进行卡模拟实际上是两件不同的事情。安全元件基本上是封闭的;你不能修改它。使用com.android.nfc_extras您可以通过安全元件打开或关闭卡模拟。而已。

您可以从您的应用程序将 APDU 发送到安全元素,例如与IsoDep标签通信(在 NFC 堆栈的较低级别部分,两者都使用相同的代码路径)。参见例如http://nelenkov.blogspot.nl/2012/08/accessing-embedded-secure-element-in.html以获得如何做的一个很好的解释。

于 2012-08-31T22:40:47.540 回答
2

没有文档。如果您想深入研究此 API,我建议您直接查看源代码。它并不多,只是实现和定义 API 的两个文件。例如,您可以在此处获取副本:

http://source-android.frandroid.com/frameworks/base/nfc-extras/java/com/android/nfc_extras/

在 API 中,您会发现 ExecutionEnvironment、Routes 等概念。不要让这些概念迷惑您。最后,您可以使用 NfcExtras 界面执行以下操作:

  • 通过设置使用 ROUTE_ON_WHEN_SCREEN_ON 创建的路由来打开卡仿真。

  • 通过设置“关闭”路由关闭卡仿真。

  • 与嵌入式安全元件交换数据。

而已!其余的只是让事情看起来比实际更大的 API 糖。

一些额外的警告:

  • 如果要调用函数,则需要将应用程序列入 /etc 中的 nfcee_access.xml 文件的白名单。如果您不将自己列入白名单,您将获得访问冲突异常。

  • 您无法区分手机中的嵌入式安全元件或支持 NFC 的 UICC。

  • 无法与手机中支持 NFC 的 UICC 通话。您只能与嵌入式安全元件(即带有 NXP 芯片组的手机的 SmartMX 芯片)交谈。与 UICC 本身的通信只能通过 ISO7816 接口通过 RID 接口进行,而且这 - 如果可能的话 - 是专有的。

  • 最后但同样重要的是:不能保证 NfcExtras 接口会做任何事情。界面是谷歌钱包用的,但移动支付市场是细分的,大家自己煲汤。我知道至少有一家大型移动支付提供商完全忽略了 NfcExtras 界面,将其禁用并使用他自己的隐藏机制来打开和关闭。

于 2012-08-31T18:17:38.320 回答