現在、大学のコースのプロジェクトを開発中です。このプロジェクトでは、カードをエミュレートするときに独自のUIDを設定できるように、AndroidのHCE機能の機能を編集できるようになることを願っています。 。
これで、AOSPソースをダウンロードし、コードを編集せずにカスタムイメージを作成して、Nexus 7にインストールしました(これには、ベンダー固有のハードウェアドライバーのダウンロードと組み込みが含まれます)。次の部分で立ち往生しています。
AndroidのNFC機能を管理するデバイスコードが物理的に見つかりません。a)それを探し、b)このコードをどのように編集する必要があるのかわかりません。
NFC in Android in the base Kernel?のコードはありますか?もしそうなら、 "make"を再度実行してビルドされる前に、どのように編集しますか?それとも他の場所にありますか?ダウンロードして抽出したVendorフォルダー内のファイルが.ncd形式であることに気付きましたが、これは編集可能ではないと思います。
私がこれに乗ることができるどんな助けでも大いに感謝されるでしょう。
OK !だから私は私が抱えていた問題の解決策を見つけました!
Nexus 7では、NFCがオンになっていると、「libnfc-brcm-20791b05.conf」という「/ etc /」内の設定ファイルから情報を取得します。
このファイルの中には「NFA_DM_START_UP_CFG」というパラメータがあります
デフォルトでは、次のようになります。
NFA_DM_START_UP_CFG={42:CB:01:01:A5:01:01:CA:14:00:00:00:00:0E:C0:D4:01:00:0F:00:00:00:00:C0:C6:2D:00:14:0A:B5:03:01:02:FF:80:01:01:C9:03:03:0F:AB:5B:01:00:B2:04:E8:03:00:00:CF:02:02:08:B1:06:00:20:00:00:00:12:C2:02:01:C8}
エミュレーションで生成されるUIDを編集するには、このパラメーターの最後にいくつかのバイトを追加する必要があります。
追加する最初のバイトは0x33です(これは、UIDを手動で設定することを意味します)
追加される2番目のバイトは、設定するUIDの長さです(これは4、7、または10バイトのいずれかであるため、この2番目のバイトは0x04、0x07、または0x0Aになります)
次のバイトは、設定したいIDです。 (注:追加するバイト数に応じて、配列の新しいサイズを反映するように配列の最初のバイトを変更する必要があります-42から始まるため、6バイトを追加する場合は48に変更する必要があります)
たとえば、7バイトのIDを01 02 03 04 05 06 07に設定する場合、新しい構成行は次のようになります。
NFA_DM_START_UP_CFG={4B:CB:01:01:A5:01:01:CA:14:00:00:00:00:0E:C0:D4:01:00:0F:00:00:00:00:C0:C6:2D:00:14:0A:B5:03:01:02:FF:80:01:01:C9:03:03:0F:AB:5B:01:00:B2:04:E8:03:00:00:CF:02:02:08:B1:06:00:20:00:00:00:12:C2:02:01:C8:33:07:01:02:03:04:05:06:07}
次に、adbを使用してこの設定ファイルをネクサスデバイスにプッシュできます。
-> adb root
-> adb remount
-> adb Push libnfc-brcm-20791b05.conf /etc/
-> adb reboot
これにより、新しい構成ファイルが入った状態でNexusがリセットされ、エミュレーション時にUIDが01 02 03 04 05 0607に設定されます。
これが私の質問を読んでいる人の助けになることを願っています!
AndroidのNFCスタックは、基本的に5つの部分に分かれています。
NFCインターフェイスデバイスドライバー。これはカーネルの一部です。簡単に言うと、このドライバーは、キャラクターデバイスファイルとNFCコントローラーハードウェア。プロジェクトでその部分に触れる必要はありません。
Cで記述された低レベルのインターフェイスライブラリ( libnfc-nci 、または libnfc-nxp NXPのPN544を備えたデバイスの場合NFCコントローラー)。このライブラリは、NFCコントローラーと対話するための一連の高レベル関数を提供します。したがって、基本的に高レベル機能(「テクノロジーX、Y、Zのポーリングの開始」など)をNCIに変換します。カーネルドライバーを介してNFCコントローラーに送信されるコマンド。これは確かに変更を追加する必要がある場所です。これはAOSPの一部であるため、通常のAOSPビルドシステムを使用してコンパイルできます。 。
C++で記述されたJNIインターフェイスライブラリ( libnfc_nci_jni )。このレイヤーは、libnfc-nciCライブラリを高レベルのJavaコードに接続します。AndroidアプリからエミュレートされたUIDを変更する場合、これは確かに変更を加える必要がある場所。AOSPの一部であるため、通常のAOSPビルドシステムを使用してコンパイルできます。
Android NFCシステムサービス Javaで記述されています。このサービスはNFCスタック全体を制御し、高レベルの機能を実装しますlibnfc-nciによって提供されるリソースに基づいています。エミュレートされたUIDをAndroidアプリから変更する場合、これは確かに変更を追加する必要がある場所です。これはAOSPの一部であるため通常のAOSPビルドシステムを使用してコンパイルできます。
Android コアフレームワーク は、NFCシステムサービスの機能にAPIを提供し、Androidアプリ。
エミュレートされたUIDの設定/変更に関しては、私が最近GitHubで公開したこれらのプロジェクトを確認する必要があります(まだ進行中ですが)。