JavaCard 3 Eclipse 转换器错误,找不到包 org.globalplatform 的导出文件 globalplatform.exp

标签 java eclipse javacard jcop

我正在使用带有 Eclipse Oxygen3 的 jcdk 3.0.5u3 开发一个简单的 javacard applet。如果我使用来自 GlobalPlatform 的简单 API,例如 GPSystem.getCardContentState(),则会导致错误。

我尝试将 GP API v1.1v1.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 包含您的字段的字符串名称:它会激增内存需求,并且在这样一个受限的平台中动态查找类和字段也不是一个好主意。

所以如果你调用外部库那么你需要配置:

  1. 包含普通编译器的.class文件的.jar文件;
  2. .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/

相关文章:

java - 通用问题 - 推断类型不符合声明的界限

java - 我可以在 Spring Rest 方法中混合媒体类型吗?

java - 更改Android Studio默认sdk版本

java - 在 Eclipse 中导入 Gradle 项目时无法初始化类 java.net.DualStackPlainDatagramSocketImpl

php - 如何从现有 Eclipse PDT 中删除 Zend Studio 组件?

java - 将 ECPublicKey 从 Java 恢复到 JavaCard

java - 通过从丢失的下拉列表中选择新值来更改值时的 JComboBox 事件

java - 具有 Java Content Assist 覆盖字段名称的 Eclipse IDE

javacard - 如何在 Java Card 中将整数转换为二进制字符?

cryptography - Java 卡 : domain parameters for key agreement?