插件加载方法及系统技术领域
本申请涉及计算机数据处理技术领域,特别是涉及一种插件加载方法
及系统。
背景技术
在软件开发中,为了方便对软件进行功能扩展,往往采用插件方式进
行开发,将软件所能实现的一个一个功能封装在插件中,最后将各个插
件集成在软件主程序包中,通过与主程序代码文件一同发布实现插件的
加载。
由于现有的很多操作系统,例如Android系统,都具有开源性,很多
基于这些开源性操作系统的终端厂商会对原生系统进行适应性的修改以
实现终端的多样性,满足市场需求。这就可能出现同时存在基于不同版
本修改的多种操作系统,因为插件是需要基于操作系统开发,所以,当
某个插件在基于某个操作系统的某个版本开发后,若该操作系统出现了
多种版本,那么通过现有的插件加载方法就无法保证该插件被加载后在
该操作系统的其他版本上正常运行,即可能出现安装后的插件无法正常
使用的情况。因此,现有的插件加载方法无法满足常见的开源性的操作
系统。
发明内容
本申请提供一种插件加载方法及系统,能够插件加载后无法正常适用
以及与开源性操作系统无法很好适配的问题。
为了解决上述问题,本申请公开了一种插件加载方法,包括:
收集操作系统平台信息,所述操作系统平台信息包括操作系统版本、
安装所述操作系统的终端厂商信息、终端型号;
将所述操作系统平台信息传给服务器;
服务器依据所述操作系统版本、安装所述操作系统的终端厂商信息、
终端型号确定当前匹配的操作系统,并提取所述操作系统适配的插件;
服务器返回所述插件下载地址;
根据所述插件下载地址下载所述插件;
加载所述下载的插件。
优选地,所述收集操作系统平台信息包括:
在需要进行插件加载之前收集并存储在操作系统中,当需要时直接
提取所述操作系统平台信息;或
在需要进行插件加载时实时收集。
优选地,所述服务器依据操作系统版本、安装所述操作系统的终端
厂商信息、终端型号确定当前匹配的操作系统,并提取所述操作系统适
配的插件的步骤包括:
将所述操作系统版本、安装所述操作系统的终端厂商信息、终端型
号与预先收集的操作系统的特征信息进行匹配比较,找到匹配的操作系
统;
根据预先收集的操作系统与插件的对应关系,确定与所述操作系统
适配的插件。
优选地,在所述根据所述插件下载地址下载所述插件之后还包括:
验证所述下载得到的插件的合法性,若验证通过,则加载所述下载
的插件。
优选地,所述验证所述下载得到的插件的合法性包括:
创建所述插件的MD5值;
使用所述插件的公钥解密所述插件中被加密的MD5值;
比较所述解密的MD5值和所述新创建的MD5值是否匹配,如果匹
配,则验证通过,如果不匹配,则验证不通过;
优选地,所述操作系统为Android系统。
优选地,所述加载所述下载的插件的步骤之后,还包括:
根据升级协议来增加新插件,删除所述插件和/或更新所述插件。
优选地,所述增加新插件的步骤为,在所述操作系统平台信息中加
入新插件的结构信息,并由客户端下载所述插件;
和/或,所述删除插件的步骤为,将待删除插件的状态置为不可用;
和/或,所述更新插件的步骤为,将新版本插件的版本号与下载地址置
于插件的特征信息中。
本申请实施例还公开了一种插件加载系统,包括:
信息收集模块,用于收集操作系统平台信息,所述操作系统平台信
息包括操作系统版本、安装所述操作系统的终端厂商信息、终端型号;
信息发送模块,用于将所述操作系统平台信息传给服务器;
位于服务器的匹配提取模块,用于依据所述操作系统版本、安装所
述操作系统的终端厂商信息、终端型号确定当前匹配的操作系统,并提
取所述操作系统适配的插件;
位于服务器的信息接收模块,用于返回所述插件下载地址;
插件下载模块,用于根据所述插件下载地址下载所述插件;
加载模块,用于加载所述下载的插件。
优选地,所述位于服务器的信息接收模块包括:
信息匹配子模块,用于将所述操作系统版本、安装所述操作系统的
终端厂商信息、终端型号与预先收集的操作系统的特征信息进行匹配,
找到匹配的操作系统;和
插件选取子模块,用于根据预先收集的操作系统与插件的对应关系,
确定与所述操作系统适配的插件。
优选地,所述系统还包括:
验证模块,用于验证所述插件下载模块下载得到的插件的合法性,
若验证通过,则加载所述下载的插件。
优选地,所述验证模块包括:
创建特征值子模块,用于创建所述插件的MD5值;
解密特征值子模块,用于将所述插件中被加密的MD5值使用所述插
件的公钥进行解密;
比较子模块,用于比较所述解密的MD5值和所述新创建的MD5值
是否匹配,如果匹配,则验证通过,如果不匹配,则验证不通过。
优选地,所述系统还包括:
升级模块,用于加载所述下载的插件之后,根据升级协议来增加新
插件,删除所述插件和更新所述插件。
与现有技术相比,本申请包括以下优点:
本申请的插件加载方法及系统通过将操作系统所在终端平台的信息
进行收集,并发送给服务器进行比较后,由服务器选取适合当前操作系
统的插件包,即插件包的选取具有针对性,为动态过程,从而使加载的
插件与加载插件的操作系统能够兼容,保证加载的插件能够正常运行,
从而更适用于各种开源性的操作系统,减少了适配开发的工作量。
当然,实施本申请的任一产品不一定需要同时达到以上所述的所有
优点。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对
实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的
附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不
付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请的插件加载方法实施例一的流程图;
图2是本申请的插件加载方法实施例二的流程图;
图3是本申请的插件加载方法实例的流程图;
图4是本申请的插件加载系统实施例一的结构示意图;
图5是本申请的插件加载系统实施例二的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案
进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实
施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术
人员所获得的所有其他实施例,都属于本申请保护的范围。
参照图1,示出本申请的一种插件加载方法实施例一,包括以下步骤:
步骤101,收集操作系统平台信息,所述操作系统平台信息包括操作
系统版本、安装所述操作系统的终端厂商信息、终端型号。
操作系统平台信息可以在需要进行插件加载之前收集并存储在操作
系统中,当需要时直接提取所述操作系统平台信息即可。例如,在插件
加载系统被安装于当前操作系统中时就进行收集。操作系统平台信息也
可以在需要进行插件加载时,实时收集。
操作系统平台信息包括操作系统版本、安装所述操作系统的终端厂
商信息、终端型号等能够表示当前操作系统的特征信息。因为某些操作
系统的开源性特点,很多操作系统在被使用到某些终端时已经经过了二
次开发,例如,Android系统。通过对操作系统平台信息的收集,可以能
够准确的对操作系统的特征进行表述,从而确定适合当前操作系统的插
件。
步骤102,将所述操作系统平台信息传给服务器。
为了获得配所述操作系统的适配插件,需要将所述操作系统平台信
息,即操作系统版本、安装所述操作系统的终端厂商信息和终端型号等
信息传递给服务器,由服务器进行下一步的操作。
步骤103,服务器依据所述操作系统版本、安装所述操作系统的终端
厂商信息、终端型号确定当前匹配的操作系统,并提取所述操作系统适
配的插件。
具体的,服务器中预先收集了各种可能出现的操作系统特征信息以
及对应的插件信息。通过将操作系统平台信息与这些预先收集的特征信
息进行匹配比较,找到与操作系统平台信息匹配的特征信息,与所述特
征信息对应的插件即为适合当前操作系统的插件。
步骤104,服务器返回所述插件下载地址。
获得所述操作系统适配的插件之后,服务器可以将插件下载地址返
回给插件加载系统。例如,服务器可以返回插件的配置结构,其中包括
了url节点,该url节点即为该插件的下载地址。
步骤105,根据所述插件下载地址下载所述插件。
下载所述插件可以由插件动态记载系统完成。另外,也可以由插件
加载系统将下载地址传递给需要加载插件的主程序,由所述主程序根据
下载地址下载所述插件。
步骤106,加载所述下载的插件。
可以理解,加载插件可以采用常见的加载方法,例如,采用系统提
供的类加载器,如引导加载器(Bootstrap class loader)、扩展加载器
(Extensions class loader)、系统加载器等等。可以理解,加载插件还可以
采用自定的类加载器来实现加载。例如,通过继承java.lang.ClassLoader
类的方式实现的类加载器,从而满足特殊的需求。具体的加载过程本申
请对此并不限制。
优选地,本申请采用DexClassLoader类来进行插件的加载,在加载
过程中在插件的根目录生成与插件同名的Dex文件。
优选地,在加载过程中,会将插件中的实例赋予给主程序内公开的
接口,从而使后续对插件使用时,可以直接通过该接口来调用插件的实
例,从而避免使用反射机制来实现实例的调用,简化了调用流程。
参照图2,示出本申请的插件加载方法实施例二,在实施例一的步骤
105和106之间还包括如下步骤:
步骤201,验证所述下载得到的插件的合法性。
因为下载的插件可以能会被非法篡改,也可能在网络传输过程中出
现数据错误,为了保证插件的正常使用,避免因为出现异常而导致反复
下载或加载而增加的时间成本和流程成本,可以在处理中增加验证插件
的合法性步骤。
验证下载得到的插件的合法性可以通过多种方法来实现,例如,比
较下载得到的插件和合法插件的特征值是否相同等等。本申请采用如下
方式来验证:
S11,创建所述插件的MD5值;
S12,使用所述插件的公钥解密所述插件中被加密的MD5值;
S13,比较所述解密的MD5值和所述新创建的MD5值是否匹配,如
果匹配,则验证通过,如果不匹配,则验证不通过。
具体的,本申请实施例中通过MD5算法(Message Digest Algorithm
MD5,消息摘要算法第五版)计算出所述下载得到的插件的唯一hash(哈
希)值,即MD5值。MD5算法的典型应用是对一段信息(Message)产
生信息摘要(Message-Digest),以防止被篡改。MD5算法将整个文件当
作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一
的MD5信息摘要。
当然,本领域技术人员根据实际情况采用其它算法计算可执行文件
的哈希值均是可行的,例如采用sha-1、RIPEMD以及Haval等算法,本
申请对此无需加以限制。
数字签名(Digital Signature)是使用数字证书来识别软件的发布商和
使用hash算法来确保软件的完整性一种技术。在Windows操作系统中,
微软认证码技术使用Windows受信任的根证书颁发机构颁发的代码签名
证书,对软件代码进行数字签名,从而保证了软件代码来自真实的发行
者和保证软件代码没有被非法篡改。软件代码数字签名仍然采用PKI
(Public Key Infrastructure,公钥基础设施)双钥技术,整个数字签名过
程是,数据源发送方使用自己的私钥对数据校验和或其他与数据内容有
关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对
方的公钥来解读收到的“数字签名”,并将解读结果用于对数据完整性的检
验,以确认签名的合法性。
举例而言,生成数字签名的过程为:
1)对要签名的所述插件创建MD5值;
2)使用所述插件的私钥来加密上述MD5值;
3)将被加密的MD5值和所述插件的数字证书插入到要签名的所述
插件。
相应地,数字签名的验证过程为:
1)对要验证的所述插件创建MD5值;
2)使用所述插件的公钥来解密被加密的MD5值;
3)比较解密的MD5值和新创建的MD5值,如果匹配说明所述插件
验证通过,反之,则说明验证未通过。
若验证通过,则可以进行后续加载步骤,若验证未通过,则停止加
载。优选地,在停止加载后,还可以增加相应的处理步骤。例如,重新
请求服务器匹配,或者给出其它的下载地址重新下载插件等等,并重复
验证,直到验证通过。
在实施例一的步骤106之后,还包括以下步骤:
步骤202,根据升级协议来增加新插件,删除所述插件和更新所述插
件。
步骤202中所述增加新插件还包括以下子步骤:
S21,在所述操作系统平台信息中加入新插件的结构信息,并由客户
端下载所述插件。
步骤202中所述删除插件还包括以下子步骤:
S22,将待删除插件的状态置为不可用。
步骤202中所述更新插件还包括以下子步骤:
S23,将新版本插件的版本号与下载地址置于插件的特征信息中。
因为终端与服务器端已经定义了升级协议,可以根据升级协议来控
制插件的增加,删除和更新。对于增加新插件,可以再返回终端客户端,
在所述操作系统平台信息中加入新插件的结构信息,并由客户端下载所
述插件。对于删除所述插件,可以将待删除插件的状态置为不可用。例
如,在接口配置中可以设置要删除的结点中的enable结点为0。对于更新
所述插件,可以将新版本插件的版本号与下载地址置于插件的特征信息中,
更新所述插件。
参照图3,示出本申请的插件加载方法具体实例的流程图。本实例中,
以终端平台中的Android系统为例进行说明。
首先,在终端平台的Android系统中启动插件加载系统软件。插件加
载系统的启动可以根据主程序提出加载插件请求来启动。插件加载系统
在启动后,会收集当前终端平台中Android系统的平台信息,这些信息包
括Android的版本,终端厂商信息,终端型号等。本步骤可以通过构造配
置接口的方式来实现,接口中包含有数据节点,具体包括:plugins节点、
plugin结点、type结点、version结点、Platform结点、model结点sdk-version
结点、hardware结点和Host-version结点。其中,plugins为插件结点,在
该结点中包含了主程序当前安装过的所有插件的信息;plugin结点是具体
的插件的信息,在plugins结点中可以包含多个plugin结点。type结点为
该插件的类型编号;version结点为该插件的版本号;Platform结点是系
统平台的参数;model结点为该终端的型号;sdk-version结点为该终端的
android的版本;hardware结点为该终端采用的解决方案;Host-version结
点为该终端安装的主程序的版本。
插件加载系统在收集完Android系统的平台信息后,需要将这些数据
传至云端服务器。云端服务器根据接收的数据在数据库中进行比较匹配,
找到与当前数据匹配的插件,并将插件相关信息返回给插件加载系统,
例如,插件下载地址等等。本步骤的具体实现也可以通过构造接口的方
式来实现数据交互,过程如下:当服务器端得到插件请求后,根据platform
的参数和请求的插件的type判断该目前该类型插件是否需要升级,并返
回结果。返回的结果的数据接口的结点具体为:plugins是所有插件的根
节点,plugin是插件的具体信息。enable结点为该插件是否还有效,用于
终止使用特定插件。type,version与请求接口中的结点相同。must-update
结点代表该插件必须升级才能正常使用。description结点为该版本结点的
说明信息,url结点为该插件的下载地址。
终端在接收插件下载地址后,会将下载地址转给提出加载插件请求
的主程序,然后由主程序根据下载地址下载所述插件。
在插件被下载完成后,首先需要对其进行合法性验证,以避免插件
被恶意篡改,或在网络传输过程中数据出错。具体步骤为:创建所述插
件的MD5值;使用所述插件的公钥解密所述插件中被加密的MD5值;
比较所述解密的MD5值和所述新创建的MD5值是否匹配。如果匹配,
则验证通过,继续后续加载步骤。如果不匹配,则验证不通过,返回错
误(ERROR),停止加载;
当验证该插件的合法性后,就可以通过实用反射机制加载该插件。
以加载实现了PluginEnv接口的PluginEnvImpl类为例,一般分以下几个
步骤:使用DexClassLoader类加载插件,获取Class对象。DexClassLoader
在加载过程中会在插件目录生成同名的Dex文件;通过class实例化对象。
其中,因为是在Android系统中加载的插件,其格式为在Android系
统终端平台能够安装的格式APK(Android Package),使用DexClassLoader
类加载插件的具体加载过程如下:
首先将Apk文件复制到data/app目录下;
解压Apk文件并扫描插件,将其中的classes.dex安装至
data/dalvik-cache目录下;
在data/data目录下创建对应的应用数据目录。
使用Dalvik虚拟机运行.dex文件。
在Android系统手机平台上使用经过优化的Dalvik虚拟机,它能够
运行Java平台应用程序,这些应用程序被转换成紧凑的Dalvik可执行格
式(.dex文件),该格式适合内存和处理速度受限的系统。Davlik虚拟机
使用DexClassLoader通过反射机制加载dex文件并创建类的实例。
至此插件已经加载完毕,主程序调用功能时可以使用接口类直接调
用插件内的实例。
通过前述两个步骤可以获取PluginEnv的实例化对象,就可以在主程
序中当做普通的Java类来使用了。当实现类中构造函数有参数时,也可
以通过c.getConstructors()来获取构造函数,以此实例化类。
优选地,还可以对插件进行更新,例如增加、删除和修改。因为终
端与服务器端已经定义了升级协议,可以根据升级协议来控制插件的增
加,删除和修改。对于增加新插件,可以再返回终端请求的接口plugins
结点中加入新的插件结构信息,并通过终端下载运行;对于删除插件,
在接口配置中可以设置要删除的plugin结点中的enable结点为0;对于更
新插件,在接口配置中可以设置新版本插件的版本号与下载地址即可。
参照图4,示出本申请的插件加载系统实施例一,包括信息收集模块
10、信息发送模块20、位于服务器的匹配提取模块30、位于服务器的信
息接收模块40、插件下载模块50和加载模块60。
信息收集模块10,用于收集操作系统平台信息,所述操作系统平台
信息包括操作系统版本、安装所述操作系统的终端厂商信息、终端型号。
优选地,所述信息收集模块收集的操作系统平台信息包括:在需要进行
插件加载之前收集并存储在操作系统中,当需要时直接提取所述操作系
统平台信息;或在需要进行插件加载时实时收集。
信息发送模块20,用于将所述操作系统平台信息传给服务器。
位于服务器的匹配提取模块30,依据所述操作系统版本、安装所述
操作系统的终端厂商信息、终端型号确定当前匹配的操作系统,并提取
所述操作系统适配的插件。优选地,所述服务器包括信息匹配子模块和
插件选取子模块,其中,信息匹配子模块,用于将所述操作系统版本、
安装所述操作系统的终端厂商信息、终端型号与预先收集的操作系统的
特征信息进行匹配,找到匹配的操作系统;插件选取子模块,用于根据
预先收集的操作系统与插件的对应关系,确定与所述操作系统适配的插
件。
位于服务器的信息接收模块40,用于返回所述插件下载地址;
插件下载模块50,用于根据所述插件下载地址下载所述插件;
加载模块60,用于加载所述下载的插件。
参照图5,示出本申请的插件加载系统实施例二,该系统还包括验证
模块70,用于验证所述插件下载模块下载得到的插件的合法性,若验证
通过,则加载所述下载的插件。
优选地,验证模块可以包括创建特征值子模块、解密特征值子模块
和比较子模块。其中,所述创建特征值子模块,用于创建所述插件的MD5
值。所述解密特征值子模块,用于将所述插件中被加密的MD5值使用所
述插件的公钥进行解密。所述比较子模块,用于比较所述解密的MD5值
和所述新创建的MD5值是否匹配,如果匹配,则验证通过,如果不匹配,
则验证不通过。
本申请优选的实施例中,所述系统还可以包括升级模块80,用于加
载所述下载的插件之后,根据升级协议来增加新插件,删除所述插件和
更新所述插件。具体而言,所述升级模块80中可以包括以下子模块:
增加插件子模块801,用于在所述操作系统平台信息中加入新插件的
结构信息,并由客户端下载所述插件;
删除插件子模块802,用于将待删除插件的状态置为不可用;
更新插件子模块803,用于将新版本插件的版本号与下载地址置于插
件的特征信息中。
本申请的插件加载方法及系统通过将操作系统所在终端平台的信息
进行收集,并发送给服务器进行比较后,由服务器选取适合当前操作系
统的插件包,即插件包的选取具有针对性,为动态过程,从而使加载的
插件与加载插件的操作系统能够兼容,保证加载的插件能够正常运行,
从而更适用于各种开源性的操作系统,减少了适配开发的工作量。
其次,在加载过程中,会将插件中的实例赋予给主程序内公开的接
口,从而使后续对插件使用时,可以直接通过该接口来调用插件的实例,
从而避免使用反射机制来实现实例的调用,简化了调用流程。
另外,在前述插件被加载后,因为终端与服务器端已经定义了升级
协议,可以根据升级协议来控制插件的增加,删除和修改。对于增加新
插件,可以在所述操作系统平台信息中加入新插件的结构信息,并由客
户端下载所述插件。对于删除插件,可以将待删除插件的状态置为不可
用。对于更新插件,可以将新版本插件的版本号与下载地址置于插件的
特征信息中。因此,本申请的插件加载方法及系统可以在不更新主程序
的情况下,可以实现主程序在具有差异性的操作系统终端上的正确运行,
提高了主程序的兼容性,减少了适配开发的工作量。
对于装置实施例而言,由于其基本相似于方法实施例,所以描述得
比较简单,相关之处参见方法实施例的部分说明即可。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设
备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上
面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也
不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此
描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发
明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,
本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,
并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的
一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个
特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并
不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求
比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下
面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施
例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入
该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进
行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备
中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,
以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特
征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合
对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以
及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外
明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每
个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包
括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的
特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,
在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意
的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个
处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术
人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)
来实现根据本发明实施例的装置中的一些或者全部部件的一些或者全部
功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全
部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的
实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或
者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在
载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限
制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计
出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构
造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的
元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这
样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适
当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装
置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、
以及第三等的使用不表示任何顺序。可将这些单词解释为名称。