我正在使用带有 Eclipse Oxygen3 的 jcdk 3.0.5u3
开发一个简单的 javacard applet。如果我使用来自 GlobalPlatform 的简单 API,例如 GPSystem.getCardContentState(),则会导致错误。
我尝试将 GP API v1.1
和 v1.6
中的 globalplatform.jar 文件添加到包资源管理器的引用库部分。我还将 "org.globalplatform.*"
导入到代码中。
import org.globalplatform.*;
if(GPSystem.getCardContentState() == GPSystem.APPLICATION_SELECTABLE){
//Do something
}
转换器返回“找不到包 org.globalplatform 的导出文件 global platform.exp”
最佳答案
Java Card 不仅需要编译阶段,它还执行通常在普通 Java 应用程序的 JVM 中作为动态链接执行的链接。基本上它对方法等进行排序,然后调用正确的 serial ID。毕竟您不希望您的 Applet 包含您的字段的字符串名称:它会激增内存需求,并且在这样一个受限的平台中动态查找类和字段也不是一个好主意。
所以如果你调用外部库那么你需要配置:
- 包含普通编译器的.class文件的
.jar
文件; .exp
文件,其中包含正常名称映射的导出以及特定于被调用库的转换类的类和字段的 ID;
如果它还没有出现在卡上,您可能还需要特定版本 .cap
文件来上传。但是,GP 功能应该已经存在于卡上。
ID 仅对于特定的 .cap
文件/预加载的字节代码是唯一的。这就是为什么您始终需要正确的 .exp
文件来加载代码的原因。如果添加了另一个字段,则排序不同,并且如果链接器完全执行,则会链接错误的字段。因此,拥有正确的 .exp
文件是为您的应用程序/库正确转换为 .cap
的必要条件。
对于 JCDK,我认为您只需要配置正确的 -exportpath
,因为 GP 应该包含在 JCDK 中。
关于JavaCard 3 Eclipse 转换器错误,找不到包 org.globalplatform 的导出文件 globalplatform.exp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56736188/