Android Open Mobile API发布困难

时间:2017-07-23 07:27:30

标签: android nfc securityexception open-mobile-api secure-element

我正在使用" org.simalliance.openmobileapi.jar"来自SDK的文件。我将它复制到我的libs文件夹并添加了像这样的依赖

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

在应用Gradle文件中我有:

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

案例#2:无法正常工作(处于发布模式 - 没有minifyEnabled)

在应用Gradle文件中我有:

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

如果是#2,我会得到以下异常:

  

(java.lang.SecurityException:Access Control Enforcer:不允许APDU访问!)

什么可能导致问题?

1 个答案:

答案 0 :(得分:4)

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

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

<强>更新

&#34;设置&#34;已经过时,已被&#34; compileOnly&#34;取代,因此对于当前的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原因是&#34;访问控制执行器:不允许APDU访问!&#34;,这清楚地表明链接和使用系统提供的Open移动API库按预期工作,并且您已成功连接到设备上的SmartcardService系统服务。因此,您似乎可以按预期运行构建。

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

  

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

这意味着未正确配置安全元素上的访问控制列表。由于您的调试版本有效,您可能已经使用安全元素上的ARA applet(和/或ARF文件)为您的调试环境注册了证书。但是,发布版本未使用相同的调试密钥(证书)进行签名。相反,它们使用您在选择&#34;生成签名APK时选择的发布密钥(证书)进行签名...&#34;在Android Studio中。因此,您有两种选择:

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

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

  3. 根据您的安全元素,您通常需要更新ARA(GlobalPlatform访问控制)小程序(AID A00000015141434C00)或位于PKCS#15应用程序中的访问规则文件(ARF)(AID {{ 1}})或具有新访问条件的SIM文件系统。