我正在使用" org.simalliance.openmobileapi.jar"来自SDK的文件。我将它复制到我的libs文件夹并添加了像这样的依赖
在应用Gradle文件中我有:
provided files('libs/org.simalliance.openmobileapi.jar')
在应用Gradle文件中我有:
compile files('libs/org.simalliance.openmobileapi.jar')
如果是#2,我会得到以下异常:
(java.lang.SecurityException:Access Control Enforcer:不允许APDU访问!)
什么可能导致问题?
答案 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中。因此,您有两种选择:
将发布证书添加到安全元素上的applet允许的应用程序列表中。
将安全元素的访问条件更改为ALLOW ALL,以允许从任何设备应用访问任何applet。
根据您的安全元素,您通常需要更新ARA(GlobalPlatform访问控制)小程序(AID A00000015141434C00
)或位于PKCS#15应用程序中的访问规则文件(ARF)(AID {{ 1}})或具有新访问条件的SIM文件系统。