Android HCE开发
我们来详细说明一下关于不同模式下的AID响应问题(前提:一个手机,手机上有A、B两个HCE APP,通过读卡器向手机发送APDU选择指令)
1、A和B的应用AID设置的都是payment模式,
只有手机当前选定的默认支付APP会响应,另外一个APP的AID选择指令是不会响应的。
2、A和B的应用AID设置的都是other模式,
当A和B的AID是相同的时候系统会弹出对话框,列出A和B,让用户选择。
如果A和B的AID不同,那么两个APP之间没有相互影响。
3、A和B的应用AID设置的分别是payment(A)和other(B)模式,
如果A和B的AID相同,那么只有A会响应选择指令。
如果A和B的AID不同,那么两者之间不会相互影响
Android 卡模拟(Host-based Card Emulation)。HCE的特点是模拟智能IC卡(ISO 7816-4),可用于金融和行业应用,相应地,CardReader例子中使用IsoDep。
智能IC卡本身是一个微型计算机,常见为Java Card平台,特别是多功能集于一身的卡(如联名卡),Java Card比J2ME更加硬件受限。Java Card可以运行一到多个Java Applet,这些Applet也就是卡应用,例如一张能刷公交的银行卡可能就包含了2个Applet。每个Applet都有一个AID,受理终端(刷卡设备)通过AID来找到对应的卡应用(受理终端向卡发送SELECT命令),受理终端找到对应的卡应用后就可以进行数据交互,交互的数据一般是密文,不联机解密的话,用对称算法,联机解密的话,用非对称和对称算法都行。
HCE是软件模拟的智能IC卡,所以也会有AID。本文CardEmulation只注册一个AID
路由规则
参考文档:NFC 路由表讲解和路由规则梳理.docx
在Android中,nfc数据的处理可能有三种方式:eSE,UICC,HCE。一条nfc数据路由到那种处理方式,是由nfc的路由表来决定的,我们可以通过dumpsys nfc命令查看路由表,如下为mate10的路由表信息(略有删减)
$adb shell dumpsys nfcmState=off
mIsZeroClickRequested=false
mScreenState=ON_UNLOCKED
mNfcPollingEnabled=false
mNfceeRouteEnabled=false
mOpenEe=null
mLockscreenPollMask=0
mTechMask: 0
mEnableLPD: true
mEnableReader: false
mEnableHostRouting: false
mEnableP2p: falsemEnable2ndLevelMenu: false
mIsSendEnabled=false
mIsReceiveEnabled=false
mLinkState=LINK_STATE_DOWN
mSendState=SEND_STATE_NOTHING_TO_SEND
mCallbackNdef=android.nfc.IAppCallback$Stub$Proxy@4d6bfbd
mMessageToSend=null
Registered 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 element
Registered 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 element
T3T Identifier cache entries:
HCE-F routing table:
Bound HCE-A/HCE-B services:
Bound HCE-F services:
mOverrideIntent=null
mOverrideFilters=null
mOverrideTechLists=null
libnfc llc error_count=0
使用安全元件进行卡模拟
不涉及安全元件的 NFC 卡模拟
Android 的 HCE 协议栈
具体而言,Android 4.4 支持基于 NFC-Forum ISO-DEP 规范(基于 ISO/IEC 14443-4)的模拟卡,并处理应用协议数据单元 (APDU)(如 ISO/IEC 7816-4 规范中所定义)。Android 要求仅使用 Nfc-A (ISO/IEC 14443-3 Type A) 技术模拟 ISO-DEP。也可以支持 Nfc-B (ISO/IEC 14443-4 Type B) 技术。图 显示了所有这些规范的分层。
HCE 服务
Android 中的 HCE 架构基于 Android Service
组件(称为“HCE 服务”)。服务的一项关键优势是可以在后台运行,而不显示任何界面。这非常适合很多 HCE 应用(例如会员卡或公交卡),用户不需要启动应用即可使用。设备触碰到 NFC 读取器时,系统会启动正确的服务(如果服务尚未运行),并在后台执行交易。当然,如果合适,您也尽可从自己的服务启动额外的界面(例如用户通知)
服务选择
当用户手拿设备触碰 NFC 读取器时,Android 系统需要知道 NFC 读取器实际想与哪项 HCE 服务通信。这时 ISO/IEC 7816-4 规范就派上用场了:它定义了一种以应用 ID (AID) 为核心的应用选择方式。一个 AID 最多可包含 16 个字节。如果您要模拟适用于现有 NFC 读取器基础设施的卡,这些读取器使用的 AID 通常为人熟知且已公开注册(例如,支付网络 Visa 和 MasterCard 等的 AID)。
如果您想为自己的应用部署新的读取器基础设施,则需要注册自己的 AID。AID 的注册流程在 ISO/IEC 7816-5 规范中得到了定义。如果您要部署 Android 版 HCE 应用,Google 建议您根据 7816-5 规范注册一个 AID,以避免与其他应用发生冲突。
同时运行安全元件和主机卡模拟的 Android 设备
Android HCE开发相关推荐
- android NFC 开发学习笔记(1)
由于工作需求,最近在研究android nfc开发,借鉴了很对大神的文章在此记录自己的学习过程: 大家学习android开发建议首选android开发文档,该文档在你下载的sdk中,路径:/sdk/d ...
- Android WiFi开发教程(三)——WiFi热点数据传输
在上一篇文章中介绍了WiFi的搜索和连接,如果你还没阅读过,建议先阅读上一篇Android WiFi开发教程(二)--WiFi的搜索和连接.本篇接着简单介绍手机上如何通过WiFi热点进行数据传输. 跟 ...
- android ble 设备扫描程序,Android应用开发Android 7.0 BLE scan 问题:程序无错但扫描不到BLE设备...
本文将带你了解Android应用开发Android 7.0 BLE scan 问题:程序无错但扫描不到BLE设备,希望本文对大家学Android有所帮助. < 最近在做毕设,需要几周内从头学起 ...
- Android Studio开发环境及第一个项目
1. 在你的电脑上搭建Android平台开发环境. 2. 新建项目,实现以下基本内容: (1) 修改默认的APP的名称和图标(任意的,非默认的). (2) 显示个人信息,包括:照片.专业.姓名.学号等 ...
- Android UI开发第二十五篇——分享一篇自定义的 Action Bar
Action Bar是android3.0以后才引入的,主要是替代3.0以前的menu和tittle bar.在3.0之前是不能使用Action Bar功能的.这里引入了自定义的Action Bar, ...
- [转]Android敏捷开发指南
原文地址:http://www.apkbus.com/android-72730-1-1.html 本文紧密结合移动开发方法与技术,围绕Android平台的开发探讨提供更高质量移动产品的解决方案.作者 ...
- 《Android传感器开发与智能设备案例实战》——导读
本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的目录,作者 朱元波,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 ...
- IntelliJ IDEA 12详细开发教程(四) 搭建Android应用开发环境与Android项目创建
今天我要给大家讲的是使用Intellij Idea开发Android应用开发.自我感觉使用Idea来进行Android开发要比在Eclipse下开发简单很多. (一)打开网站:http://devel ...
- 从Android界面开发谈起(转)
原文地址:http://blog.csdn.net/nieweilin/article/details/5967815 这篇文章没有打算有一个很好的逻辑去介绍android的某个方面,全盘大致上就是我 ...
最新文章
- 计算机公开课课前互动小游戏,公开课前课堂小游戏
- 图像处理——Edge Boxes边缘检测
- php xml expat,PHP 使用 XML Expat 解释xml文件
- Tyvj 1921 Freda的烦恼
- 机器学习Tensorflow基础知识、张量与变量
- 一个服务器端和多个客户端消息互发_python:OSError: [WinError 10022] 提供了一个无效的参数...
- 【Java入门提高篇】Day26 Java容器类详解(八)HashSet源码分析
- iZotope系列音频软件如何卸载
- 如何突破网盘限速?获取下载链接的三种方法
- 无法回避的现实问题:“亲对象”也要明算账?
- 基于深度学习的绘画风格迁移
- v-for和v-show一起使用
- Windows 10 下安装gcc
- pc端汽车obd软件下载?_人人美剧,不可多得的PC端观影软件
- Entity Structure Within and Throughout: Modeling Mention Dependencies forDocument-Level RE笔记
- Android开发者选项 介绍
- VK2C21C SOP20是低功耗抗干扰LCD液晶显示驱动芯片/段式LCD液晶驱动IC,完全兼容替代16C21,适用多种电气类LCD驱动面板
- dp主机_DP接口和HDMI接口分别怎么用?哪个更好?两者的区别?
- 【网络】远程连接交换机
- 用threejs创建流动的水管