首先,您需要在 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...”时选择的发布密钥(证书)进行签名。因此,您有两种选择:
将发布证书添加到安全元件上您的小程序允许的应用程序列表中。
将安全元素上的访问条件更改为 ALLOW ALL,以允许从任何设备应用程序访问任何小程序。
根据您的安全元素,您通常需要使用新的更新A00000015141434C00
位于 PKCS#15 应用程序 (AID A000000063504B43532D3135
) 或 SIM 文件系统中的 ARA(全球平台访问控制)小程序 (AID) 或访问规则文件 (ARF)访问条件。