2

我正在使用jcdk 3.0.5u3Eclipse Oxygen3 开发一个简单的 javacard 小程序。如果我使用来自 GlobalPlatform 的简单 API,例如 GPSystem.getCardContentState() 会导致错误。

我尝试将 globalplatform.jar 文件添加到包资源管理GP API v1.1v1.6的 Reference Libraries 部分。我还将 导入"org.globalplatform.*"到代码中。

import org.globalplatform.*;

if(GPSystem.getCardContentState() == GPSystem.APPLICATION_SELECTABLE){
//Do something
}

转换器返回“找不到包 org.globalplatform 的导出文件 global platform.exp”

4

1 回答 1

0

Java Card 不仅需要一个编译阶段,它还执行通常在普通 Java 应用程序的 JVM 中作为动态链接执行的链接。基本上它对方法等进行排序,然后调用正确的序列号。毕竟,您不希望您的 Applet 包含字段的字符串名称:它会增加内存需求,并且在这样一个受限平台中动态查找类和字段也不是一个好主意。

因此,如果您调用外部库,则需要配置:

  1. .jar包含普通编译器的 .class 文件的文件;
  2. .exp文件包含正常名称映射的导出以及特定于被调用库的转换类的类和字段的 ID;

如果卡上还没有它,您可能还需要特定版本 .cap的文件进行上传。但是,GP 功能应该已经存在于卡上。

ID 仅对于特定.cap文件/预加载的字节码是唯一的。这就是为什么您总是需要正确的.exp文件来加载代码。如果添加了另一个字段,则顺序不同,并且如果链接器完全执行,则会链接错误的字段。因此,拥有正确的.exp文件是正确转换.cap为您的应用程序/库的要求。

对于JCDK,我认为你只需要配置正确的-exportpath,因为GP应该包含在JCDK中。

于 2019-07-01T11:57:41.703 回答