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