我们可以在低于 Android Kit-Kat 4.4.x 的手机上下载使用 HCE 的支付应用程序吗?

Can we download a payment application that uses HCE in phones with lower than Android Kit-Kat 4.4.x?

我从官方 android 网站 https://developer.android.com/about/versions/kitkat.html 了解到“Android 4.4 引入了新平台支持通过主机卡进行基于 NFC 的安全交易仿真 (HCE),用于支付,..." 我们不能在低于 Android Kit-Kat 4.4.x.

的设备中使用 HCE

但我想问一下我们是否可以 下载 一个 Android 应用程序 uses/contains HCE 及其相关 类 在设备上版本低于 Android Kit-Kat 4.4.x?

我的项目清单文件有 android:minSdkVersion="14"android:targetSdkVersion="21",但我的项目清单使用的 HCE SDK 有 android:minSdkVersion="19"android:targetSdkVersion="21"。那么我的项目实际上将 android:minSdkVersion 设置为 14 还是 19?

我认为主机卡仿真 (HCE) 需要 driver/lower 级框架更改。因此,如果设备支持 KitKat (4.4) 以下的 HCE,则可能是设备制造商添加的一些特殊内容,类似于只有 Marshmallow (6.0) 有指纹 Reader API 但三星有 API 在他们的设备的 SDK 中使用它。

TL;DR:如果没有 Android 框架提供的通用 API,任何此类应用都需要为 NFC HCE 实施每个供应商的 SDK,然后仅适用于支持每个供应商的设备SDK.

我可以下载 将 HCE 功能用于 pre-KitKat 设备的应用程序吗?

是的,如果您的应用程序指定 android:minSdkVersion 低于 19 (Android 4.4),并且如果您的应用程序不需要 HCE 功能(即如果您不指定

<uses-feature android:name="android.hardware.nfc.hce" android:required="true" />

在应用程序清单中)。

如果我使用的任何库设置更高 android:minSdkVersion 怎么办?

在这种情况下,构建您的应用程序应该会失败。清单合并工具应该发现应用程序的 android:minSdkVersion 和库依赖项的 android:minSdkVersion 属性之间的不匹配。但是,您可以通过使用如下内容显式覆盖特定库的 SDK 要求来覆盖它:

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19"
          tools:overrideLibrary="package.name.of.the.library" />

使用此功能时,您的应用程序将能够针对较低的 API 版本。但是,如果库使用不属于设备 API 版本的 API 调用,这些调用将导致 errors/exceptions.

如果我使用的任何库为 HCE 功能设置了 android:required 属性怎么办?

在这种情况下,所有 android:required 属性都与逻辑 OR 组合。因此,如果一个清单表明需要 HCE 功能,则您的整个应用程序都将需要该属性。因此,该应用程序将不适用于 KitKat 之前的设备(例如,Play 商店只会为具有 HCE 功能的设备列出它,这实际上限制了 Android 4.4+ 设备的可用性)。

让一个使用 HCE 的应用程序可用于 pre-KitKat 设备是否有意义?

这取决于您的应用程序的功能。 HCE 不适用于 KitKat 之前的设备。因此,如果 HCE 是您应用程序的核心组件,并且应用程序没有它就没有用,那么让该应用程序可用于 KitKat 之前的设备是没有意义的。

但是,如果该应用可以切换到 KitKat 之前设备的其他通信机制(例如反向 reader 模式、点对点模式、QR codes/barcodes),那么它可以android:minSdkVersion 低于 19(并使用 android:required="false" 将 HCE 功能标记为可选),以使您的应用可用于 KitKat 之前的设备。