Android HCE开发

我们来详细说明一下关于不同模式下的AID响应问题(前提:一个手机,手机上有A、B两个HCE APP,通过读卡器向手机发送APDU选择指令)
1、A和B的应用AID设置的都是模式,
只有手机当前选定的默认支付APP会响应,另外一个APP的AID选择指令是不会响应的 。
2、A和B的应用AID设置的都是other模式,
当A和B的AID是相同的时候系统会弹出对话框,列出A和B,让用户选择 。
如果A和B的AID不同,那么两个APP之间没有相互影响 。
3、A和B的应用AID设置的分别是(A)和other(B)模式,
如果A和B的AID相同,那么只有A会响应选择指令 。
【Android HCE开发】如果A和B的AID不同,那么两者之间不会相互影响
卡模拟(Host-based Card ) 。HCE的特点是模拟智能IC卡(ISO 7816-4),可用于金融和行业应用,相应地,例子中使用 。
智能IC卡本身是一个微型计算机,常见为平台,特别是多功能集于一身的卡(如联名卡),Java Card比J2ME更加硬件受限 。Java Card可以运行一到多个Java,这些也就是卡应用,例如一张能刷公交的银行卡可能就包含了2个 。每个都有一个AID,受理终端(刷卡设备)通过AID来找到对应的卡应用(受理终端向卡发送命令),受理终端找到对应的卡应用后就可以进行数据交互,交互的数据一般是密文,不联机解密的话,用对称算法,联机解密的话,用非对称和对称算法都行 。
HCE是软件模拟的智能IC卡,所以也会有AID 。本文只注册一个AID
路由规则
参考文档:NFC 路由表讲解和路由规则梳理.docx
在中,nfc数据的处理可能有三种方式:eSE,UICC,HCE 。一条nfc数据路由到那种处理方式,是由nfc的路由表来决定的,我们可以通过 nfc命令查看路由表,如下为的路由表信息(略有删减)
$adb shell dumpsys nfcmState=offmIsZeroClickRequested=falsemScreenState=ON_UNLOCKEDmNfcPollingEnabled=falsemNfceeRouteEnabled=falsemOpenEe=nullmLockscreenPollMask=0mTechMask: 0mEnableLPD: truemEnableReader: falsemEnableHostRouting: falsemEnableP2p: falsemEnable2ndLevelMenu: falsemIsSendEnabled=falsemIsReceiveEnabled=falsemLinkState=LINK_STATE_DOWNmSendState=SEND_STATE_NOTHING_TO_SENDmCallbackNdef=android.nfc.IAppCallback$Stub$Proxy@4d6bfbdmMessageToSend=nullRegistered HCE services for current user: ComponentInfo{com.huawei.wallet/com.huawei.nfc.carrera.lifecycle.swipeservice.NFCOffHostApduService} (Description: 华为钱包)Static AID groups:Category: paymentAID: 325041592E5359532E4444463031AID: A0000003330101020063020000000301Dynamic AID groups:Settings Activity: nullRouting Destination: secure elementRegistered HCE-F services for current user: Preferred services (in order of importance): *** Current preferred foreground service: null*** Current preferred payment service: ComponentInfo{com.huawei.wallet/com.huawei.nfc.carrera.lifecycle.swipeservice.NFCOffHostApduService}Next tap default: nullDefault for foreground app (UID: 0): nullDefault in payment settings: ComponentInfo{com.huawei.wallet/com.huawei.nfc.carrera.lifecycle.swipeservice.NFCOffHostApduService}Payment settings allows override: trueAID cache entries: "325041592E5359532E4444463031" (category: payment)*DEFAULT* ComponentInfo{com.huawei.wallet/com.huawei.nfc.carrera.lifecycle.swipeservice.NFCOffHostApduService} (Description: 华为钱包)"A0000003330101020063020000000301" (category: payment)*DEFAULT* ComponentInfo{com.huawei.wallet/com.huawei.nfc.carrera.lifecycle.swipeservice.NFCOffHostApduService} (Description: 华为钱包)Service preferred by foreground app: nullPreferred payment service: ComponentInfo{com.huawei.wallet/com.huawei.nfc.carrera.lifecycle.swipeservice.NFCOffHostApduService}Routing table:Default route: secure elementT3T Identifier cache entries: HCE-F routing table:Bound HCE-A/HCE-B services: Bound HCE-F services: mOverrideIntent=nullmOverrideFilters=nullmOverrideTechLists=nulllibnfc llc error_count=0