一种应用于资源受限装置的应用包安装方法和系统与流程

文档序号:32438915发布日期:2022-12-06 20:35阅读:52来源:国知局
一种应用于资源受限装置的应用包安装方法和系统与流程

1.本发明属于计算机的技术领域,具体涉及一种应用于资源受限装置的应用包安装方法和系统。


背景技术:

2.虚拟机是由一种被处理器执行的软件应用程序或指令序列产生的抽象计算机,平台无关指用python、java、kotlin等面向对象的高级编程语言编写的应用程序,可以在各种不同计算机平台上通过虚拟机来执行,虚拟机的指令序列是独立平台编码的一个或多个字节码代码流。高级语言虚拟机执行高级编程语言并用于32位或者64位结构,安全元件(智能卡、智能se、安全mcu)等资源受限装置难以承载实现基于32位操作指令的虚拟机。
3.传统在资源受限的装置如安全元件实现的面向对象的虚拟机,可通过硬件独立地执行采用高级语言编写的应用,经过编译、转换为可安装的文件格式,安装到安全元件的运行环境中执行;传统虚拟机指令集通过常量池引用导入包以及本包定义的类、静态域、实例域、静态方法以及虚方法;为在资源受限装置跨硬件平台后安装应用,需要采取优化技术简化类加载过程的处理,比如采用基于令牌的链接技术,将常量池中符号名称替换固定长度的令牌,明显减少了常量池的大小;通过引用位置组件简化了字节码中的常量池索引的解析过程;但采用现有的各种优化技术后,应用包的安装处理过程还比较繁琐,导致包安装比较慢,不能满足应用要求快速安装的应用场景。


技术实现要素:

4.针对现有技术中存在的缺陷,本发明的目的是提供一种应用于资源受限装置的应用包安装方法和系统。该方法和系统对指令集中访问类、静态域、静态方法、实例域、以及虚方法的指令针对资源受限硬件环境进行专门的设计,可以避免采用现有指令采用常量池索引,而导致在类安装时需要比较复杂解析处理的问题;本技术技术方法中,设计静态域初始方法以替代现有静态域组件技术,简化静态域的初始化操作;通过上述优化步骤达到减少安装包的文件大小,并且提高安装包的安装速度的效果。
5.为达到以上目的,本发明采用的技术方案是:一种应用于资源受限装置的应用包安装方法,应用于资源受限装置中,包括以下步骤:通过偏移对本包定义的类、静态方法及静态域进行引用;通过类段偏移对本包定义的类进行引用,通过方法段偏移对本包定义的静态方法进行引用,通过静态域镜像偏移对本包定义的静态域进行引用,所述类段的每个类包含一个用于安全检查的字段,所述字段表示该类声明的第一个包可见或者私有的实例域的索引,如果该类没有声明包可见和私有的实例域,该值为0xff;通过导出项标识对访问导入包的第一指令进行引用,所述第一指令包括对导入包的外部可见类、外部可见静态域及外部可见静态方法进行访问的指令;通过索引对访问导入包或本包定义的第二指令进行引用,所述第二指令包括对导入包或本包定义的实例域、虚方法进行访问的指令;通过接口方法索引对接口方法进行引用;根据所述导出项标识、所述索引及所述接口方法索引生成
对应的链接文件;通过预置的静态域初始化方法分配静态域镜像空间并对静态域进行初始化;通过所述导入包的链接文件以及应用包的类文件生成与应用包对应的安装文件以对所述应用包进行安装。
6.进一步的,所述通过导出项标识对访问导入包的第一指令进行引用,包括:对导入包的外部可见类、外部可见静态域及外部可见静态方法分别进行排序,获取所述外部可见类、所述外部可见静态域及所述外部可见静态方法分别对应的导出项索引;将所述外部可见类、所述外部可见静态域及所述外部可见静态方法分别对应的导出项索引,与导出项标记及所述导入包的包标识进行组合,得到所述导出项标识。
7.进一步的,所述通过索引对访问导入包或本包定义的第二指令进行引用,包括:通过实例域索引对访问所述实例域的指令进行引用;通过虚方法索引对访问所述虚方法的指令进行引用。
8.进一步的,所述静态域初始化方法包括创建基本类型数组并对数组进行初始化指令以及静态域赋值指令。
9.进一步的,所述通过所述导入包的链接文件以及应用包的类文件生成与应用包对应的安装文件以对所述应用包进行安装,包括:通过所述导入包的链接文件对所述应用包中的类文件进行转换,以将常量池中导出项的符号名称转换为对应的索引类型;将所述应用包的类文件进行转换生成与所述应用包对应的安装文件;执行所述安装文件以对所述应用包进行安装。
10.一种应用于资源受限装置的应用包安装系统,包括以下装置:第一引用装置,用于通过偏移对本包定义的类、静态方法及静态域进行引用;通过类段偏移对本包定义的类进行引用,通过方法段偏移对本包定义的静态方法进行引用,通过静态域镜像偏移对本包定义的静态域进行引用,所述类短的每个类包含一个用于安全检查的字段,所述字段表示该类声明的第一个包可见或者私有的实例域的索引,如果该类没有声明包可见和私有的实例域,该值为0xff;第二引用装置,用于通过导出项标识对访问导入包的第一指令进行引用,所述第一指令包括对导入包的外部可见类、外部可见静态域及外部可见静态方法进行访问的指令;第三引用装置,用于通过索引对访问导入包或本包定义的第二指令进行引用,所述第二指令包括对导入包或本包定义的实例域、虚方法进行访问的指令;第四引用装置,用于通过接口方法索引对接口方法进行引用;链接文件生成装置,用于根据所述导出项标识、所述索引及所述接口方法索引生成对应的链接文件;初始化装置,用于通过预置的静态域初始化方法分配静态域镜像空间并对静态域进行初始化;应用包安装装置,用于通过所述导入包的链接文件以及应用包的类文件生成与应用包对应的安装文件以对所述应用包进行安装。
11.进一步的,所述第二引用装置包括单元:排序单元,用于对导入包的外部可见类、外部可见静态域及外部可见静态方法分别进行排序,获取所述外部可见类、所述外部可见静态域及所述外部可见静态方法分别对应的导出项索引;组合单元,用于将所述外部可见类、所述外部可见静态域及所述外部可见静态方法分别对应的导出项索引,与导出项标记及所述导入包的包标识进行组合,得到所述导出项标识。
12.进一步的,所述第三引用装置包括单元:第一实例域引用单元,用于通过实例域索引对访问所述实例域的指令进行引用;第一虚方法引用单元,用于通过虚方法索引对访问
所述虚方法的指令进行引用。
13.进一步的,所述静态域初始化方法包括创建基本类型数组并对数组进行初始化指令以及静态域赋值指令。
14.进一步的,所述应用包安装装置包括单元:转换单元,用于通过所述导入包的链接文件对所述应用包中的类文件进行转换,以将常量池中导出项的符号名称转换为对应的索引类型,将指令中的对应的常量池索引替换为对应的索引类型;生成单元,用于将所述应用包的类文件进行转换生成与所述应用包对应的安装文件,所述安装文件包括文件头、类段、方法段、导入包段、导出项段以及间接包标识位置段;安装单元,用于执行所述安装文件以对所述应用包进行安装。
15.本发明的效果在于:采用本发明所述的方法,通过对指令集中访问类、静态域、静态方法、实例域、以及虚方法(包括接口方法)的指令针对资源受限硬件环境进行专门的设计,可以避免采用现有指令采用常量池索引,而导致在类安装时需要比较复杂解析处理的问题;本技术技术方法中,设计静态域初始方法以替代现有静态域组件技术,简化静态域的初始化操作;通过上述优化步骤达到减少安装包的文件大小,并且提高安装包的安装速度的效果。
附图说明
16.图1是本发明所述方法的流程图;
17.图2为本发明所述方法的子流程示意图;
18.图3为本发明所述方法的另一子流程示意图;
19.图4为本发明所述方法的又一子流程示意图;
20.图5是本发明所述系统的结构图;
21.图6是本发明所述系统中装置的结构图;
22.图7是本发明所述系统中另一装置的结构图;
23.图8是本发明所述系统中又一装置的结构图。
具体实施方式
24.下面结合附图和具体实施方式对本发明作进一步描述。
25.如图1所示,一种应用于资源受限装置的应用包安装方法,该应用于资源受限装置的应用包安装方法应用于资源受限装置中,该应用于资源受限装置的应用包安装方法通过安装于资源受限装置中的应用软件进行执行,资源受限装置可以是智能se、安全mcu等安全元件中,方法包括以下步骤:
26.s110、通过偏移对本包定义的类、静态方法及静态域进行引用。
27.对于本包定义的类、静态方法及静态域,采用类段偏移对本包定义的类进行引用,采用方法段偏移对本包定义的静态方法进行引用,采用静态域镜像偏移对本包定义的静态域进行引用,其中类段的每个类包含一个用于安全检查的字段,所述字段表示该类声明的第一个包可见或者私有的实例域的索引,如果该类没有声明包可见和私有的实例域,该值为0xff。
28.s120、通过导出项标识对访问导入包的第一指令进行引用,所述第一指令包括对
导入包的外部可见类、静态域及静态方法进行访问的指令。
29.针对非本包定义的外部导入包,访问导入包的外部可见的类、静态域以及静态方法的指令需要使用导出项标识。
30.在一实施例中,如图2所示,步骤s120包括子步骤s121和s122。
31.s121、对导入包的外部可见类、外部可见静态域及外部可见静态方法分别进行排序,获取所述外部可见类、所述外部可见静态域及所述外部可见静态方法分别对应的导出项索引。
32.s122、将所述外部可见类、所述外部可见静态域及所述外部可见静态方法分别对应的导出项索引,与导出项标记及所述导入包的包标识进行组合,得到所述导出项标识。
33.包的外部可见类(包括接口)、静态域以及静态方法分配进行排序,排序的序号称为导出项索引,指令通过导出项标识引用外包导出项。
34.例如,在具体实施例中,可设置导出项标识的长度为16位b
15b14
...b1b0)。所生成的外部可见类的导出项标识由以下部分组成:导出项标记(b
15
)+包标识(b
14b13
...b9b8)+类导出项索引(b7b6...b1b0);所生成的静态域的导出项标识由以下部分组成:导出项标记(b
15
)+包标识(b
14b13
...b9b8)+静态域导出项索引(b7b6...b1b0);所生成的静态方法的导出项标识由以下部分组成:导出项标记(b
15
)+包标识(b
14b13
...b9b8)+静态方法导出项索引(b7b6...b1b0)。
35.具体的,依据包标识的类型,导出项标识可分为直接导出项标识和间接导出项标识。
36.包标识有两种方式,直接包标识和间接包标识,生成安装文件时指定采用何种包标识方式。直接包标识依赖待安装的虚拟机平台的应用以及库的安装情况,间接包标识不依赖待安装的虚拟机平台的应用以及库的安装情况,但安装或执行效率相比直接包标识方式要低些。直接包标识:转换包的类文件时可指定采用直接包标识方式,直接包标识在系统唯一,被引用的包必须先于引用包安装,被引用包的链接文件必须包括该包的直接包标识;系统可以选择提供查询当前已安装包的直接包标识的命令。间接包标识:通过导入包表的索引指定,导入包表的表项包括导入包的aid以及包的版本号。
37.导出项标识的解析方式分为三种:第一种解析方式,需要安装文件提供导入包表段;应用安装时需要将导入包表中的aid替换为包的直接包标识,使用间接包标识通过查询导入包表得到直接包标识。第二种解析方式,需要安装文件提供导入包表段以及间接包标识位置段两个可选段;应用安装时,通过间接包标识位置段得到字节码中的间接包标识,用间接包标识通过导入包表得到包的aid,用包aid得到包的直接包标识,最后将字节码中的间接包标识替换直接包标识。第三种解析方式,需要安装文件提供导入包表段以及间接包标识位置段两个可选段;应用安装时,通过间接包标识位置段得到字节码中的间接包标识,用间接包标识通过导入包表得到包的aid,用包aid得到包的直接包标识,最后将字节码中的间接包标识以及导出项索引替换实现依赖的引用标识。
38.s130、通过索引对访问导入包或本包定义的第二指令进行引用,所述第二指令包括对导入包或本包定义的实例域、虚方法进行访问的指令。
39.在一实施例中,如图3所示,步骤s130包括子步骤s131和s132。
40.s131、通过实例域索引对访问所述实例域的指令进行引用。
41.在本技术的某一具体实施例中,访问实例域的指令,需要使用实例域索引。具体的,每个类声明的实例域通过实例域索引进行标识,实例域指令通过实例域引用指定要访问的实例域,实例域引用参见实例域引用段。对类声明的所有实例域进行统一编号,boolean、byte、short类型占一个索引号,int类型实例域需要占用两个索引号。一个根类实例域的索引从0开始连续编号,子类中的所有实例域的索引从直接父类实例域的最大索引号加1开始连续编号。为便于垃圾对象回收处理,可将每个类的引用类型静态域连续编号。如果子类和父类定义在不同包中,通过父类的链接文件可获取父类的实例域的最大索引号。
42.s132、通过虚方法索引对访问所述虚方法的指令进行引用。
43.在本技术的某一具体实施例中,访问外部可见或包可见的虚方法的指令需要使用虚方法索引。具体的,本包定义和导入包的虚方法采用虚方法索引方式引用;虚方法是动态解析的实例方法,包括全部的公有、保护和包可见的实例方法,私有实例方法和所有的构造方法都不是虚方法,在编译时被做静态解析。类的外部可见(公有或保护)虚方法分配外部可见虚方法索引,类的包可见虚方法分配包可见虚方法索引,两类索引可通过字节的最高位进行区分,虚方法索引值范围从0到127(包括边界值)。
44.外部可见虚方法索引中,所有类的父类object的外部可见虚方法的索引从0开始连续编号,子类的外部可见虚方法索引从该类的直接父类的外部可见虚方法最大索引加1开始编号,如果一个子类外部可见的虚方法覆盖了父类实现的外部可见虚方法,则该虚方法分配与父类虚方法相同的索引值。包可见虚方法索引中,所有类的父类object的包可见虚方法的索引从0开始连续编号,子类包可见虚方法索引从直接父类的包可见虚方法最大索引加1开始连续编号,如果子类包可见虚方法覆盖了父类包可见虚方法(子类和父类必须在相同包中声明),子类包可见虚方法使用与父类包可见虚方法相同的索引。
45.对于采用上述方式进行应用包安装,对所生成的链接文件的要求为:链接文件需要提供导出类的实例域的最大索引号;链接文件需要提供导出类的包可见虚方法的最大索引值。
46.在一实施例中,步骤s130还可以包括以下步骤:通过类引用及实例域索引对访问所述实例域的指令进行引用;通过类引用及虚方法索引对访问所述虚方法的指令进行引用。
47.在本技术的另一具体实施例中,访问实例域的指令,需要使用类引用以及实例域索引。具体的,实例域索引对类声明的所有实例域从0开始连续编号,boolean、byte、short类型占一个索引号,int类型实例域需要占用两个索引号。优先外部可见的实例域的编号,为便于垃圾对象回收处理,可将每个类的所有引用类型静态域连续编号。
48.在本技术的另一具体实施例中,访问外部可见或包可见的虚方法的指令需要使用类引用和虚方法索引。具体的,针对虚方法索引,虚方法是动态解析的实例方法,包括全部的公有、保护和包可见的实例方法,私有实例方法和所有的构造方法都不是虚方法,在编译时被做静态解析。类的外部可见(公有或保护)虚方法分配外部可见虚方法索引,类的包可见虚方法分配包可见虚方法索引,两类索引可通过字节的最高位进行区分,虚方法索引值范围从0到127(包括边界值)。
49.外部可见虚方法索引中,所有类的父类object的外部可见虚方法的索引从0开始
连续编号,子类的外部可见虚方法索引从该类的直接父类的外部可见虚方法最大索引加1开始编号,如果一个子类外部可见的虚方法覆盖了父类实现的外部可见虚方法,则该虚方法分配与父类虚方法相同的索引值。
50.包可见虚方法索引中,如果子类和父类的声明不在同一包中,子类的包可见虚方法的索引从0开始连续编号,如果子类包可见虚方法覆盖了父类包可见虚方法(子类和父类必须在相同包中声明),子类包可见虚方法使用与父类包可见虚方法相同的索引。
51.对于采用上述方式进行应用包安装,对所生成的链接文件的要求为:链接文件不需要提供导出类的实例域的最大索引号;链接文件不需要提供导出类的包可见虚方法最大索引值。但是,需要提供实例域和包可见虚方法引用段,实例域和包可见虚方法引用位置段。实例域和虚方法引用段包括下述内容,实例域和虚方法引用表,包括包中声明的每个类的方法引用的实例域以及包可见虚方法;引用表的格式如下:实例域或者虚方法标记(1字节)、类引用(2字节)、实例域或者包可见虚方法索引(1字节);类引用可为方法段偏移或者类导出项标识,实例域访问指令以及虚方法调用指令通过实例域和虚方法引用表的索引指定要访问实例域和包可见虚方法。虚方法的引用可采用16位引用标识,格式如下:虚方法类型标记(1位)、外部可见虚方法索引(15位)或者实例和虚方法引用表的索引(15位);实例域和包可见虚方法引用位置段用于提供字节码中使用实例域和包可见虚方法表索引的位置,包安装程序需要解析这些索引。
52.s140、通过接口方法索引对接口方法进行引用。
53.接口方法引用,采用接口方法索引方式引用。类段中的每个类定义该类实现的每个接口中方法的虚方法索引表,该表的索引为对应接口方法的索引
54.s150、根据所述所述导出项标识、所述实例域索引、所述虚方法索引及所述接口方法索引生成对应的链接文件。
55.根据上述导出项标识、实例域索引、虚方法索引及接口方法索引生成对应的链接文件。其中,偏移包括对本包定义的类、静态方法及静态域进行引用的偏移信息;导出项标识包括对访问导入包的第一指令进行引用的标识信息,其中第一指令包括对导入包的外部可见类、静态域及静态方法进行访问的指令;索引包括对访问导入包或本包定义的第二指令进行引用的索引信息;接口方法索引为对接口方法进行引用的索引信息。
56.s160、通过预置的静态域初始化方法分配静态域镜像空间并对静态域进行初始化。
57.具体的,本技术实施例采用转换工具构建的特殊方法pclinit取代现有技术的静态域组件的功能。静态域通过静态域镜像的偏移进行访问,因此需要对所有静态域进行排序,确定其偏移大小,为便于垃圾对象回收的实现,将所有引用类型静态域连续放置;统计所有静态域的需要分配的空间大小;构建静态域初始化方法,实现静态域初始化功能。安装应用包时包安装程序按照静态域镜像的大小分配空间;执行该pclinit方法进行静态域初始化操作,pclinit方法只执行一次,完成后方法代码可以丢弃。
58.其中,静态域初始化方法包括下述两条指令:(1)创建基本类型数组并对数组进行初始化指令;(2)静态域赋值指令。其中,创建基本类型数组并对数组进行初始化指令为newarrayandfilldata,其中,指令的操作数包括:offset(数组类型静态域在静态域镜像中的偏移)、type(待创建的数组的类型)、count(初始化数据的大小)、values(初始化数据)。
静态域赋值指令为putstatic,其中指令的操作数包括offset(第一个非默认值的基本类型在静态域镜像中的偏移)、count(初始化数据的大小)、values(初始化数据)。将应用包中所有类的静态域初始化指令放置到一个方法pclinit中;方法定义为statc public pclinit()。
59.s170、通过所述导入包的链接文件以及应用包的类文件生成与应用包对应的安装文件以对所述应用包进行安装。
60.可通过链接文件生成与应用包对应的安装文件,安装文件的文件头提供每个java包需要分配的静态域镜像的大小;方法pclinit放置方法组件的尾部,安装文件的文件头提供pclinit的位置信息。若采用步骤s131及步骤s132中的方法对实例域及虚方法进行引用,则采用以下步骤进行应用包的安装;若采用步骤s1301及步骤s1302中的方法对实例域及虚方法进行引用,则按照方法除包含以下步骤外,还需要提供实用例和包可见虚方法引用段,实用例和包可见虚方法引用位置段。
61.在一实施例中,如图4所示,步骤s170包括子步骤s171、s172和s173。
62.s171、通过所述导入包的链接文件对所述应用包中的类文件进行转换,以将常量池中导出项的符号名称转换为对应的索引类型,将指令中的对应的常量池索引替换为对应的索引类型;s172、将所述应用包的类文件进行转换生成与所述应用包对应的安装文件。
63.转换程序包中的类文件时,需要提供导入包的链接文件,实现将常量池中的导入项的符号名称转换为对应的索引类型。链接文件包括文件头及外部可见项列表。其中,链接文件头包括应用包的aid以及应用包的版本号、应用包的字节,每个public类的最大实例域索引,每个public类的包可见虚方法的最大索引值。外部可见项列表包括包中所有外部可见的类(包括接口)、静态域以及静态方法的有序列表,也即包括包中所有public类的有序列表、包中所有public/protected静态域的有序列表,以及包中所有public/protected静态方法(包括构造方法)的有序列表。每个列表的外部可见项的索引用于构建导出项标识。
64.示例,tgomos.base直接包标识为0,其中,外部可见列表如表1所示。
65.表1
66.索引名称0object1throwable2objectnullexception3
……
67.示例,tgomos.base.object的直接导出项标识为0x8001,其中,外部可见静态方法列表如表2所示。
68.表2
69.索引名称方法的描述符0arrayboundsexception()()v1arraynegativesizeexception()()v2arraystoretypeexception()()v3
…………
70.示例,方法arraystoretypeexception的直接导出项标识为0x8002。
71.所生成的安装文件包括文件头、导入包段、类段、方法段、导入段及间接包标识位置段。
72.其中,文件头包括包括文件格式版本号、包的唯一标识、各个段在文件中的偏移和大小;应用的aid以及应用安装方法的位置;静态域初始化方法的位置。
73.导入包段包括该应用包的所有导入包的aid以及包的版本号;应用安装时需要将导入包表中的aid替换为包的直接包标识,间接包标识通过查询导入包表得到直接包标识。
74.类段描述了程序包内定义的所有接口和类的信息,类信息包括类中定义的虚方法的引用,如果虚方法是在导入包中定义,这些虚方法的引用不在此类段中定义,而是通过对父类的查找得到该虚方法的引用。类段包括虚方法表及实现接口方法表。需方法表为包括每个类定义提供的虚方法表,其中,public/protected虚方法表,本类声明的最小公有虚方法索引,包可见的虚方法表,本类声明的最小包虚方法索引。如果某个虚方法表项对应本类声明的虚方法,则记录该虚方法在方法段中的偏移,否则设置为某个特殊值指示该虚方法在父类中定义。实现接口方法表中为每个类定义提供实现接口的接口方法表。每个接口方法在接口方法表中的索引为该接口方法的索引,提供接口方法表可实现接口方法索引到接口方法对应的公有虚方法索引的映射。
75.类段中的每个类的记录提供一个字段,表示该类声明的第一个包可见或者私有的实例域的索引,如果该类没有声明包可见和私有的实例域,该值为0xff。该字段用于虚拟机执行实例域访问指令时的安全检查;当实例域的索引不在对象所在类声明的实例域范围时,通过实例域的索引遍历该类的超类确定该实例域的定义类,如果实例域的定义类和访问实例域的方法声明所在类不在相同包中,且该索引是包可见或者私有的实例域的索引(即大于或者等于所述字段的值时),抛出安全异常。
76.方法段包括程序包中定义的所有方法的执行信息,不包括《clinit》方法和接口的方法声明,每个方法包括用于异常处理的信息以及方法的字节码。将包所有类的方法按照下述优先顺序放置:1)私有方法,包括私有静态方法、私有构造方法、私有实例方法;2)包可见的虚方法;3)外部可见的虚方法。
77.导出项段中包括包中所有类、静态方法以及静态域的外部可见项的物理位置信息,可见项的顺序同包链接文件,其中包的导出项段用于构建运行环境的引用表。导出项内容具体如表3所示。
78.表3
79.导出项导出项内容类类在类段中的偏移静态域静态域在静态域镜像中偏移静态方法静态方法在方法段中的偏移
80.指定方法的字节码中相对包标识的位置,包安装程序依据生成引用表的方式,可以选择替换字节码中的相对包标识或者整个导出项标识。
81.s173、执行所述安装文件以对所述应用包进行安装。
82.运行环境内部需要维护每个安装包的类、静态域以及静态方法三张引用表,引用表记录每个安装包的所有导出项在系统内的位置信息;包安装程序将包的导出项列表内容按原有顺序加入到引用表,将段偏移相对地址修改为物理地址;虚拟机执行指令时访问对
应的引用表。引用表采用二级表方式,一级表为包标识表,二级表为导出项表。运行环境可选维护每个安装包的导入表,实现间接包标识到直接包标识的映射。
83.由于虚拟机相关指令特殊设计,对于静态绑定项,本包定义项采用相关段的偏移,导出项采用导出项标识,对于动态绑定项,采用在类继承结构范围定义实例域和虚方法的索引,因此无现有术的常量池索引,移除常量池组件可减少安装文件的大小,并简化安装程序安装包时的链接过程,从而提高程序包的安装速度。包标识可以采用直接包标识和间接包标识,导出项标识在安装时有多种解析方式,适应不同的应用场景。转换工具构建静态初始化方法,安装程序执行该静态初始化方法,可替代现有静态域组件技术
84.本实施例中,通过偏移对本包定义的类、静态方法及静态域进行引用,通过导出项标识对访问导入包的第一指令进行引用,通过索引对访问导入包或本包定义的第二指令进行引用,通过接口方法索引对接口方法进行引用,基于上述引用关系生成链接文件,对静态域进行初始化并通过链接文件对应用包进行安装。通过上述方法,通过对指令集中访问类、静态域、静态方法、实例域、以及虚方法的指令针对资源受限硬件环境进行专门的设计,可以避免采用现有指令采用常量池索引,而导致在类安装时需要比较复杂解析处理的问题;本技术技术方法中,设计静态域初始方法以替代现有静态域组件技术,简化静态域的初始化操作;通过上述优化步骤达到减少安装包的文件大小,并且提高安装包的安装速度的效果。
85.如图5所示,一种应用于资源受限装置的应用包安装系统,该系统可配置于资源受限装置中,该系统用于执行前述的应用于资源受限装置的应用包安装方法的任一实施例,包括以下装置:第一引用装置110、第二引用装置120、第三引用装置130、第四引用装置140、链接文件生成装置150、初始化装置160和应用包安装装置170。
86.第一引用装置110,用于通过偏移对本包定义的类、静态方法及静态域进行引用;通过类段偏移对本包定义的类进行引用,通过方法段偏移对本包定义的静态方法进行引用,通过静态域镜像偏移对本包定义的静态域进行引用,所述类短的每个类包含一个用于安全检查的字段,所述字段表示该类声明的第一个包可见或者私有的实例域的索引,如果该类没有声明包可见和私有的实例域,该值为0xff。
87.第二引用装置120,用于通过导出项标识对访问导入包的第一指令进行引用,所述第一指令包括对导入包的外部可见类、外部可见静态域及外部可见静态方法进行访问的指令。
88.在一具体实施例中,如图6所示,所述第二引用装置120包括单元:排序单元121,用于对导入包的外部可见类、外部可见静态域及外部可见静态方法分别进行排序,获取所述外部可见类、所述外部可见静态域及所述外部可见静态方法分别对应的导出项索引;组合单元122,用于将所述外部可见类、所述外部可见静态域及所述外部可见静态方法分别对应的导出项索引,与导出项标记及所述导入包的包标识进行组合,得到所述导出项标识。
89.第三引用装置130,用于通过索引对访问导入包或本包定义的第二指令进行引用,所述第二指令包括对导入包或本包定义的实例域、虚方法进行访问的指令。
90.在一具体实施例中,如图7所示,所述第三引用装置130包括单元:第一实例域引用单元131,用于通过实例域索引对访问所述实例域的指令进行引用;第一虚方法引用单元132,用于通过虚方法索引对访问所述虚方法的指令进行引用。
91.在一具体实施例中,所述静态域初始化方法包括创建基本类型数组并对数组进行初始化指令以及静态域赋值指令。
92.第四引用装置140,用于通过接口方法索引对接口方法进行引用。
93.链接文件生成装置150,用于根据所述导出项标识、所述索引及所述接口方法索引生成对应的链接文件。
94.初始化装置160,用于通过预置的静态域初始化方法分配静态域镜像空间并对静态域进行初始化。
95.应用包安装装置170,用于通过所述导入包的链接文件以及应用包的类文件生成与应用包对应的安装文件以对所述应用包进行安装。
96.在一具体实施例中,如图8所示,所述应用包安装装置170包括单元:转换单元171,用于通过所述导入包的链接文件对所述应用包中的类文件进行转换,以将常量池中导出项的符号名称转换为对应的索引类型;生成单元172,用于将所述应用包的类文件进行转换生成与所述应用包对应的安装文件;安装单元173,用于执行所述安装文件以对所述应用包进行安装。
97.本实施例中,通过偏移对本包定义的类、静态方法及静态域进行引用,通过导出项标识对访问导入包的第一指令进行引用,通过索引对访问导入包或本包定义的第二指令进行引用,通过接口方法索引对接口方法进行引用,基于上述引用关系生成链接文件,对静态域进行初始化并通过链接文件对应用包进行安装。通过上述方法,通过对指令集中访问类、静态域、静态方法、实例域、以及虚方法的指令针对资源受限硬件环境进行专门的设计,可以避免采用现有指令采用常量池索引,而导致在类安装时需要比较复杂解析处理的问题;本技术技术方法中,设计静态域初始方法以替代现有静态域组件技术,简化静态域的初始化操作;通过上述优化步骤达到减少安装包的文件大小,并且提高安装包的安装速度的效果。
98.本领域技术人员应该明白,本发明所述的方法和系统并不限于具体实施方式中所述的实施例,上面的具体描述只是为了解释本发明的目的,并非用于限制本发明。本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围,本发明的保护范围由权利要求及其等同物限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1