0

我正在使用 SDK 中的“org.simalliance.openmobileapi.jar”文件。我将它复制到我的 libs 文件夹并添加了这样的依赖项

案例#1:工作正常(在调试模式下)

在应用程序 Gradle 文件中,我有:

provided files('libs/org.simalliance.openmobileapi.jar')

案例 #2:不工作(在发布模式下 - 没有 minifyEnabled)

在应用程序 Gradle 文件中,我有:

compile files('libs/org.simalliance.openmobileapi.jar')

在情况#2我得到以下异常:

(java.lang.SecurityException:访问控制执行器:不允许 APDU 访问!)

什么可能导致问题?

4

1 回答 1

4

首先,您需要在 build.gradle 文件中为您的调试和发布版本使用“提供”范围:

dependencies {
    [...]
    provided files('libs/org.simalliance.openmobileapi.jar')
}

更新

“provided”已过时,已替换为“compileOnly”,因此对于当前的 gradle 版本,您需要使用(如TT所述):

dependencies {
    [...]
    compileOnly files('libs/org.simalliance.openmobileapi.jar')
}

此外,您需要在 AndroidManifest.xml 中有一个 uses-library 条目:

<uses-library android:name="org.simalliance.openmobileapi"
              android:required="true" />

但是,由于您得到了SecurityException“访问控制执行器:不允许 APDU 访问!”的原因,这清楚地表明链接到和使用系统提供的 Open Mobile API 库按预期工作,并且您成功连接到 SmartcardService您设备上的系统服务。因此,您的构建似乎按预期工作。

因此,SecurityException已经清楚地告诉您问题所在:

访问控制执行器:不允许 APDU 访问!

这意味着安全元件上的访问控制列表未正确配置。由于您的调试构建工作正常,您可能确实使用安全元件上的 ARA 小程序(和/或 ARF 文件)为您的调试环境注册了证书。但是,发布版本没有使用相同的调试密钥(证书)进行签名。相反,它们使用您在 Android Studio 中选择“生成签名的 APK...”时选择的发布密钥(证书)进行签名。因此,您有两种选择:

  1. 将发布证书添加到安全元件上您的小程序允许的应用程序列表中。

  2. 将安全元素上的访问条件更改为 ALLOW ALL,以允许从任何设备应用程序访问任何小程序。

根据您的安全元素,您通常需要使用新的更新A00000015141434C00位于 PKCS#15 应用程序 (AID A000000063504B43532D3135) 或 SIM 文件系统中的 ARA(全球平台访问控制)小程序 (AID) 或访问规则文件 (ARF)访问条件。

于 2017-08-11T18:56:28.667 回答