Android 7.0のNFCにHCE-Fが追加されたということで、AOSPソースコードの変更点について調べてみました。
HCE-Fは、FeliCaのHost-based Card Emulationのことです。
AndroidのNFC機能のソースコードは、external/libnfc-nci と packages/apps/NFC にあります。commit logを探したら、HCE-Fに関するcommitがそれぞれ一つずつありました。
external/libnfc-nci
-
これはNFCチップのドライバとNFCのプロトコルスタックです。
-
NFCチップとHostのやりとりは、 NFC ForumのNCIを使っています。
-
sonyの人による "Implementation of HCE for NFC-F."というcommit
-
変更は数十行と少ないです。
-
このcommitでは元々持っている Type 3 tag emulationのコードに、HCE-F用のIDを付加して上位に渡す機能を追加しています。
packages/apps/NFC
- これはNFCのサービスを含んだアプリケーションです。
- sonyの人による "Implementation of HCE for NFC-F."というcommit
- https://android.googlesource.com/platform/packages/apps/Nfc/+/ecb8d7bbd1a44cd3edbcb6c5d903fc8d9a625d70
- 変更は結構あります。
- この変更がHCE-Fの実際の処理のようです。
- EnabledNfcFServices.java HostNfcFEmulationManager.java RegisteredNfcFServicesCache.java RegisteredT3tIdentifiersCache.java SystemCodeRoutingManager.java が追加されてます。
- 詳しい変更点はあとで調べるかも
frameworks/native/
- hcefのパーミッション設定
- sonyの人による "Implementation of HCE for NFC-F."というcommit
- https://android.googlesource.com/platform/frameworks/native/+/fb6ddc0d2f0f13e9bebe2c7b6870d49128ce19a0
- hcefの設定ファイル android.hardware.nfc.hcef.xml を追加
考察
- HCE-Fの機能はチップの特別な機能を必要としていないので、NCI対応のNFCチップを搭載しているAndroid端末なら、Android 7.0にアップデートすれば、HCE-Fを使えるようになるみたいです。
参考
- ケータイ用語の基礎知識 第772回:HCE-Fとは
- http://k-tai.watch.impress.co.jp/docs/column/keyword/1019763.html
- [nfc]HCE-FはAndroid7から使える hiro99ma blog
- https://hiro99ma.blogspot.jp/2016/09/nfchce-fandroid7.html
- AN11690 NXP NCI Android Porting Guidelines
- http://www.nxp.com/documents/application_note/AN11690.pdf