当创建一个Java Card应用程序的时候的典型的步骤是:
1、编写Java源代码。
2、编译你的源代码。
3、把类文件改变为一个Converted Applet(CAP)文件。
4、检验这个CAP是否有效;这个步骤是可选的。
5、安装这个CAP文件。
当用Java程序设计语言开发传统的程序的时候,头两个步骤是相同的:编写.java文件并且把它们编译成.class文件。可是,一旦你已经创建Java Card类文件,过程会变化的。
Java Card虚拟机(JCVM)被分成卡外虚拟机和卡内虚拟机。这个分解移除了昂贵的卡外操作,并且考虑到了在卡本身上的小的内存空间,但是它导致在开发Java Card应用程序的时候的额外步骤。
在Java Card类可以被导入一个Java Card设备之前,他们必须被转化成标准的CAP文件格式,然后选择性地检验:
·
转化必然伴有把每个Java程序包变换到一个CAP文件中,在一个程序包中包含类和接口的联合二进制表示法。转化是一个卡外操作。
验证是一个可选择的过程,来确认CAP文件的结构、有效的字节码子集和程序包内依赖性。你可能想在你使用的第三方供应商程序包上进行验证,或者如果你的转换工具来自一个第三方供应商。验证一般来说是一个卡外操作,但是一些卡片产品可能包括一个机载的检验器
一旦检验,CAP文件就即将安装在Java Card设备上了。
Sun JavaCard Development工具箱
你可以使用Sun JavaCard开发工具箱编写JavaCard小应用程序,并且甚至可以不使用一个智能卡或者读卡器来测试它们。这个工具箱包括所有你开发和测试所需要的Java Card小应用程序的基本工具:
1、Java Card Workstation Development Environment(JCWDE),一个便利的易于使用的JavaCard 模拟工具,允许开发者直接执行类文件,而不要转化和安装CAP文件。JCWDE可以和调试程序和IDE整合。从这个开发工具箱的2.2.1版本开始,JCWDE支持Java Card RMI(JCRMI)。注意JCWDE不是一个成熟的Java Card模拟器。它不支持许多JCRE特性,例如包安装、小应用程序实例创建、防火墙和事务。请参阅这个开发工具箱的用户指南获取更多信息。
2、C语言Java Card运行时环境(C-JCRE),一个使用C语言编写的可执行参考实现。C-JCRE是一个Java Card应用程序编程接口、虚拟机和运行时环境完全兼容的实现。它能让一个开发者在一个工作站环境中精确地测试小应用程序的行为。
C-JCRE有一些限制:它在一个卡片会话期间支持多达八个可以返回的引用,多达16个可以同时被导出的
远程对象,8个远程方法中的数组类型参数,32个支持的Java程序包和16个Java Card小应用程序。想要获得这些限制条件,请参阅Java Card开发工具箱用户指南。
3、JavaCard转化工具,用于生成CAP文件。
4、JavaCard检验,用于选择性地核对CAP和导出文件的有效性。
5、一个发送和接收应用程序协议数据单元(Application Protocol Data Units,APDUs)的APDU工具(apdutool)。这样你就可以在Java Card小应用程序测试期间发送APDU。你可以apdutool读取的脚本文件,发送APDUs到C-JCRE或者JCWDE中。
6、一个capdump工具,用于转出CAP的内容,和一个打印EXP文件的exp2text。
7、一个scriptgen工具,转换CAP文件为APDU脚本文件。这个工具还被认为是卡外安装程序。
8、支持库(用于Java Card应用编程接口的类文件和导出文件)文档和范例。
当Sun JavaCard开发工具箱允许你编写和测试Java Card小应用程序的时候,部署一个现实的端对端的智能卡应用程序需要开发工具箱中没有包含的工具,例如利用了终端应用程序编程接口,如OpenCard和Global Platform应用程序编程接口。它可能还需要利用例如Subscriber Identification Module(用户识别模块,SIM)工具包这样的工具来帮助你管理SIM。
图1显示了这个工具包的目录结构(Windows版本),以及包含开发工具的bin目录的内容。
Figure1a.Development Kit Directory Structure Figure1b.Contents of bin directory 现在让我们在看一次Java Card开发步骤,这次使用Sun Java Card Development工具箱:
1.使用你喜爱的编辑器或者IDE编写Java源程序。
java模拟器安卓2.使用你喜爱的编译程序或者IDE编译Java源程序。
3.选择性地,使用JCWDE模拟器测试你的Java Card小应用程序。重申一下,JCWDE不是一个成熟的Java Card模拟器。
4.使用工具包的bin目录下的转换程序把类文件转化成一个Converted Applet(转化过的小应用程序,CAP)文件。注意,除类文件之外,另一个输入到这个转换工具中的文件是导出文件,提供了关于你的应用程序导入的(引用)的程序包的信息。这些是还被装载到卡片中的程序包。导出文件还是转换工具的
一个输出。
5.选择性地,检验CAP的有效性。这一步包括使用verifycap脚本来验证CAP文件的有效性,使用verifyexp来验证导出文件,并且使用verifyrev来检验程序包修正之间的二进制兼容性。工具verifycap、verifyexp和verifyrev脚本全部都可在bin目录中得到。
6.安装CAP文件。使用scriptgen工具转换CAP文件为一个(安装)APDU脚本文件。然后使用apdutool 发送脚本文件(安装APDU命令和CAP文件)到Java Card设备上的C-JCRE或者一个JCRE。JCRE保存CAP 文件到卡片的内存中。
下面的图总结了这些步骤。注意每个Java Card供应商提供它自己的工具,但是这些用于开发一个Java Card小应用程序的步骤在开发工具箱之间通常是相同的:
Figure2.Java Card Development Steps(click for larger image)
---------------------------------------
JAVA卡的APPLET
1.应用工具:如转换器(converter),apdutools等。它们位于bin目录下。
2.文档:Java Card?2.1.1Development Kit User’s Guide(JAVA卡开发工具用户指南),位于
doc目录下
3.JAVA卡编译时必须的exp和class文件。exp文件位于api21目录的子目录下,它们分别是,
,和。class文件主要存放在文件中,位于bin目录下
4.例子:一些有用的例子位于sample目录下
AID(Application identifier应用ID号):ISO7816-5定义了AID的结构,为了能使每一个Applet
都有一个唯一的ID身份号。JAVA卡通过AID来确认Applet。AID是由ISO国际组织来管理的,所以它
是唯一的。
JCRE(Java Card Runtime Environment JAVA卡运行环境):它包括JAVA虚拟机,JAVA卡的框架(Frame
work)和一些基本函数(native functions)。
一些与生成JAVA卡Applet有关的重要的文件:
∙*.java JAVA语言的源代码文件
∙*.class JAVA语言的字节代码(Bytecode),它是由JAVA编译器javac编译产生的二进制代码,由JAVA解释器执行
∙*.jca JAVA卡的可读汇编语言,由转换器生成,并可进一步生成Cap文件
∙*.exp输出文件,包含JAVA卡包(packages)的公共信息和连接信息。
∙*.cap转化以后的Applet文件,它就是可以被JAVA卡装载并安装的可执行代码。∙*.jar JAVA文档文件,JAR文件是一个与平台无关的,包含多个文件的文件格式。
JAVA源代码编辑:开发JAVA卡Applet首先当然要编辑JAVA源代码,开发人员可以任意选用他所喜爱的编辑工具,如Ultr aEdit,VJ++,Visual Café等等。
JAVA源代码编译:开发人员编写好JAVA源代码后,就可以用JAVA编译器生成class文件,当然这一过程还要包括必要的代码调试过程。这一过程需要使用JAVA编译器。
Cap文件生成:JAVA卡的运行环境并不“认识”JAVA的class文件,为了使开发好的Applet能在JAVA卡中运行,包含A pplet的class文件必须被转换成Cap文件。Cap文件就是可以被装载到JAVA卡上的Applet。这一过程需要使用JAVA卡转换器(converter)。
Applet的安装:当Applet的Cap文件生成后,我们就要进行Applet的安装。在这一过程中一般我们需要使用PC机,读卡器和控制读卡器的软件工具。我们通过使用在PC机上的控制读卡器的软件来控制读卡器,从而把Cap文件装载到JAVA卡上。
编译与转换
在JAVA卡的开发过程中,编译和转换过程是两个非常关键的过程,现在我们来介绍一下这两个过程。在
介绍之前,我们先来了解一下编译和转换时,一些文件在硬盘上存放的结构:
如下图所示。我们有三层目录:根目录,项目目录和JavaCard目录。根目录是存放所有项目目录的目录。
项目目录存放着JAVA卡源代码文件和编译后的class文件。JavaCard目录是由转换器自动生成的,它
存放的是转换器的输出文件:Cap文件,Exp文件和Jca文件。一般上述这些文件的文件名需与项目目录
的目录名一致,正常情况下,我们就用项目名来命名项目目录和这些文件名,如下图所示
∙编译(compiler)
编译过程与普通的JAVA编译过程没什么区别,它将编译JAVA文件,产生一些class文件。编译器来自于Sun公司的J ava Development Kit(Java开发工具)。它是一个执行程序“”,位于JDK的bin目录下。编译时,输入文件是:Java 源代码程序(*.java)和一些JAVA卡的包(package)。这些包保存在文件中。位于Ja
va Card Development Kit的bin 目录下。输出文件是:class文件,它的前缀与输入文件一致,后缀为.class,它将位于Java源文件(*.java)同一目录下。
编译命令行:
<;编译执行程序的路径和程序名><;可选参数><JAVA源文件>
相信大家对JAVA编译命令行都较为熟悉了,不过请注意在JAVA卡Applet编译时我们只用“-g”参数,而不用“-O”参数,因为用“-g”参数时,我们能在class文件中产生“LocalVariableTable”属性,而这个属性在转换时(converter)要被使用到。但如果同时又使用了“-O”参数,“LocalVariableTable”属性就不会被产生了。这样转换时就会出错。另外–d参数指明生成的class文件放置的根目录,注意它是根目录,也就是说class文件位于此根目录下的项目目录中。
例如:
c:\JDK\bin\–g–d c:\sample\-classpath c:\jc211\bin\c:\sample\Helloworld\
如上命令行即完成了的编译,同时在编译时用到了中的一些class文件
∙转换(converter)
转换器(converter)是由Java Card Development kit提供的字节代码工具。作为字节代码工具,它需要Java解释器的帮助才能运行。它将class文件转换成一些输出文件。转换时,输入文件是:由编译器生成的class文件。输出文件是:Ca p文件,Export文件,JCA文件,它们的后缀分别是:*.cap,*.exp,*.jca,文件名与输入文件一致。它们将位于Java卡项目目录下的一个叫Javacard的子目录中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论