gpt4 book ai didi

android - HCE 不适用于 Nexus 5 以外的其他手机

转载 作者:太空狗 更新时间:2023-10-29 16:37:02 29 4
gpt4 key购买 nike

我目前正尝试在 Android 上使用 HCE 与设备通信。我创建了自己的扩展 HostApduService 类的 NFC 服务,在 AndroidManifest.xml 中声明了 NFC 部分并创建了 apduservice.xml,其中指定了 AID。

当我在 Nexus4 或 Nexus 5 (4.4.4) 设备上运行我的应用程序时,一切都按预期工作(!),我从设备收到 APDU 数组并发回一个答案,然后继续使用专有协议(protocol)。所以上面的配置部分似乎设置正确。

但是,当我在 Sony Xperia Z2 (4.4.2)Samsung Galaxy S5 (4.4.2)Motorola 上部署我的应用程序时Moto X (4.4.3) 我在 processCommandApdu() 中的代码甚至没有被调用。该方法的第一行包含一个我根本看不到的日志输出。

根据列表编译here我的设备应该支持 HCE。

当我点击设备前面的(不工作的)电话时,我得到以下日志输出,但我似乎无法找到错误代码的确切含​​义:

D/STATUSBAR-NetworkController(1085): refreshSignalCluster - setNWBoosterIndicators(false)
D/STATUSBAR-NetworkController(1085): refreshSignalCluster: data=-1 bt=false
D/STATUSBAR-IconMerger(1085): checkOverflow(504), More:false, Req:false Child:6
D/HostEmulationManager(1277): notifyHostEmulationActivated
D/HostEmulationManager(1277): notifyHostEmulationData
D/HostEmulationManager(1277): call findSelectAid - 1
D/HostEmulationManager(1277): Selecting next, last or previous AID occurrence is not supported
D/NfcService(1277): onSeListenDeactivated - Skip this one, user select the onHost apk temporarily
D/HostEmulationManager(1277): notifyHostEmulationDeactivated
E/NfcNfa(1277): UICC/ESE[0x402] is not activated

我在哪里可以找到错误代码 0x402

这里是apduservice.xml:

<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/service_desc"
android:requireDeviceUnlock="false">
<aid-group android:description="@string/aid_description"
android:category="other">
<aid-filter android:name="F04B4142413134" />
<aid-filter android:name="F0404B75737469"/>
</aid-group>
</host-apdu-service>

我使用 Nexus 5 收到的 APDU 命令如下所示,在我看来它似乎遵循 APDU 规范来选择应用程序:

output: [00, a4, 04, 00, 07, f0, 4b, 41, 42, 41, 31, 34]
00 -> class
a4 -> instruction select
04 -> P1, select by name
00 -> P2
07 -> length of the following aid
rest -> corresponds to the first aid-filter

奖励问题:

如何在 android 操作系统源代码中设置断点,例如在 HostApduService.java 中?我可以打开文件并查看代码,但设置断点没有任何效果,至少在视觉上它没有显示,而且在 Debug模式下运行时,它不会在那个地方中断。

我猜测当 android 应该选择对应于指定 AID 的应用程序时发生了一些事情。我的问题与 this one 有点相关,但答案与付款有关,这对我帮助不大。

为什么我不能在其他设备上运行它?提前致谢。

最佳答案

与此同时,我找出了问题的根源。按照 Michael Roland 的建议,我试图找出读者发送的 APDU 命令。我用我能拿到的所有安卓手机测试了我的应用程序,发现所有配备 NXP 制造的 NFC Controller 的手机都无法正常工作。

  • 工作:Nexus 4、5、7 G2、10(Broadcom 芯片)
  • 无法正常工作:Nexus S、Nexus 7 G1、Samsung Galaxy S5、Sony Xperia Z2、Motorola Moto X(NXP 芯片)

原因是 NXP 芯片发送的随机 ID 不符合我的读者所期望的标准(如 here 所述)。它应该是这样看的:

0x08, A, B, C

其中 A、B 和 C 是随机的。但是 NXP 芯片发送的 ID 是常量

0x1, 0x2, 0x3, 0x4

或者在第一个 0x08 之后有 7 个字节是随机的,而不是只有 3 个字节。

这导致读者发送一个 APDU,它没有让 android 触发调用我的 processCommandApdu() 方法。

关于android - HCE 不适用于 Nexus 5 以外的其他手机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035044/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com