4

我正在搜索 Android 源代码,因为我想了解应用程序的 AndroidManifest.xml 何时被解析。

即,如果应用注册了 NFC 服务

<service
        android:name=".demo.service.ApduService"
        android:exported="true"
        android:permission="android.permission.BIND_NFC_SERVICE">

        <intent-filter>
            <action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE" />
        </intent-filter>

        <meta-data
            android:name="android.nfc.cardemulation.host_apdu_service"
            android:resource="@xml/apduservice" />
    </service>

使用以下 apduservice.xml

<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/servicedesc"
android:requireDeviceUnlock="false" >

<aid-group
    android:category="other"
    android:description="@string/aiddescription" >
    <aid-filter android:name="23498234098234098" />
</aid-group>

Android 操作系统何时何地读取辅助过滤器并注册 ID?

(我知道它将存储在哪里以及如何存储,但我找不到提取实际 ID 并将其转发到 NFC 堆栈的事件)

4

1 回答 1

6

主机和脱离主机 CE 服务列表何时更新?

每当添加、更改、更新、删除应用程序包等时,都会收集和更新有关主机和非主机 APDU 服务(HCE 和基于 SE 的 CE)的信息。这由com.android.nfc 中的广播接收器处理。 cardemulation.RegisteredServicesCache。广播接收器对以下事件敏感:

  • ACTION_PACKAGE_ADDED
  • ACTION_PACKAGE_CHANGED
  • ACTION_PACKAGE_REMOVED
  • ACTION_PACKAGE_REPLACED
  • ACTION_PACKAGE_FIRST_LAUNCH
  • ACTION_PACKAGE_RESTARTED
  • ACTION_EXTERNAL_APPLICATIONS_AVAILABLE
  • ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE

此外,每次启用 NFC 服务时都会更新 AID。

服务列表是如何以及在哪里生成的?

在更新期间,系统会被查询以获取过滤意图操作的服务列表android.nfc.cardemulation.action.HOST_APDU_SERVICEandroid.nfc.cardemulation.action.OFF_HOST_APDU_SERVICE. 对于每项服务,都会检查应用程序是否拥有使用 NFC 的权限以及服务是否需要该BIND_NFC_SERVICE权限。如果是这种情况,则考虑将这些服务用于卡仿真。

AID 列表是如何以及在哪里提取的?

然后将主机和非主机 APDU 服务存储在andoid.nfc.cardemulation.ApduServiceInfo对象的列表中。该类的构造函数处理<service>标记中指定的元数据并提取AID 列表。

卡片模拟系统如何以及在哪里使用新列表进行更新?

列表编译完成后,将其传递给com.android.nfc.cardemulation.RegisteredAidCache。在那里,服务和 AID 列表用于编译主机上和主机外 AID 路由的路由表。

于 2014-05-09T08:57:27.273 回答