一种活动的注册方法、装置、设备及介质与流程

文档序号:33695895发布日期:2023-03-31 15:49阅读:47来源:国知局
一种活动的注册方法、装置、设备及介质与流程

1.本公开涉及计算机软件应用技术领域,尤其涉及一种活动的注册方法、装置、设备及介质。


背景技术:

2.activity(活动)是进行终端开发必不可少的组件,用于为用户提供一个执行操作的可视化界面。在开发过程中,能够自动地生成activity,同时,每一新生成的activity都必须在应用清单manifest配置文件中注册该activity的信息。在能够自动生成activity的情况下,研发人员希望也能够自动注册activity。
3.注册activity需要修改manifest配置文件;由于manifest配置文件是一个经处理被压缩进资源缓存文件中的二进制格式的文件,目前只能依靠研发人员人工修改manifest配置文件。因此,目前还无法实现自动化注册activity。


技术实现要素:

4.为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种活动的注册方法、装置、设备及介质。
5.本公开实施例提供了一种活动的注册方法,包括:
6.当应用程序启动活动activity时,获取所述activity的activity信息;
7.从所述应用程序的安装包中提取应用清单manifest配置文件;
8.拦截编译执行任务,在拦截的编译执行任务中,基于所述activity信息强制修改所述manifest配置文件;
9.将修改后的manifest配置文件压缩至资源缓存文件中,完成所述activity的注册。
10.可选的,所述拦截编译执行任务,包括:通过hook函数拦截所述编译执行任务。
11.可选的,所述安装包包括应用程序安装包apk;
12.所述从所述应用程序的安装包中提取应用清单manifest配置文件,包括:
13.通过所述apk的资源处理任务获取资源缓存文件的输出路径;
14.对所述输出路径下的资源缓存文件进行解压,得到解压后的二进制格式的manifest配置文件;其中,所述manifest配置文件的文件区由多个区块构成。
15.可选的,所述基于所述activity信息强制修改所述manifest配置文件,包括:
16.根据当前待注册的activity的activity信息,构建与manifest配置文件中所述区块一致的多个文件区块;
17.将多个所述文件区块确定为所述当前待注册的activity对应的activity节点;
18.利用二进制文件修改器将所述activity节点插入至所述manifest配置文件。
19.可选的,所述方法还包括:将各所述activity的activity信息存储到中间目录的预设json文件中。
20.可选的,所述安装包包括应用程序捆绑包aab;
21.所述从所述应用程序的安装包中提取应用清单manifest配置文件,包括:
22.通过所述aab的资源处理任务提取pb格式的proto文件;
23.通过protoc编译器对所述proto文件进行反编译,得到反编译后的manifest配置文件;其中,所述manifest配置文件包括多个tag属性和各所述tag属性对应的数据。
24.可选的,所述基于所述activity信息强制修改所述manifest配置文件,包括:
25.基于所述activity信息构建多个activity节点,并将所述多个activity节点插入所述manifest配置文件。
26.可选的,所述基于所述activity信息构建多个activity节点,包括:
27.根据预设的第一映射关系,确定所述activity信息中包括的目标tag属性对应的目标资源标识;其中,第一映射关系是从所述manifest配置文件中收集的tag属性与资源标识之间的映射关系;
28.基于所述目标资源标识构建所述多个activity节点。
29.可选的,所述基于所述activity信息构建多个activity节点,包括:
30.根据预设的第二映射关系,确定所述activity信息中包括的目标tag属性对应的目标字段;其中,第二映射关系用于记录各tag属性对应的字段;
31.基于所述目标字段和预设格式,生成所述目标tag属性对应的目标资源标识;其中,所述预设格式包括:资源包标识、类型标识和条目标识;
32.基于所述目标资源标识构建所述多个activity节点。
33.可选的,所述将所述多个activity节点插入所述manifest配置文件,包括:
34.查找所述manifest配置文件中,tag属性的名称为指定名称的目标tag属性,在所述目标tag属性后插入所述多个activity节点。
35.可选的,所述方法还包括:
36.通过预先创建的类加载器获取所述protoc编译器;
37.基于权限命令控制所述protoc编译器的权限为具有可执行权限。
38.本公开实施例还提供了一种活动的注册装置,包括:
39.活动获取模块,用于当应用程序启动活动activity时,获取所述activity的activity信息;
40.文件获取模块,用于从所述应用程序的安装包中提取应用清单manifest配置文件;
41.文件修改模块,用于拦截编译执行任务,在拦截的编译执行任务中,基于所述activity信息强制修改所述manifest配置文件;
42.文件压缩模块,用于将修改后的manifest配置文件压缩至资源缓存文件中,完成所述activity的注册。
43.本公开实施例还提供了一种电子设备,所述电子设备包括:处理器;用于存储所述处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现如本公开实施例提供的活动的注册方法。
44.本公开实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行如本公开实施例提供的活动的注册方法。
45.本公开实施例提供的技术方案与现有技术相比具有如下优点:
46.本公开实施例提供了一种活动的注册方法、装置、设备及介质,首先当应用程序启动activity时,获取activity的activity信息;然后从应用程序的安装包中提取manifest配置文件;之后拦截编译执行任务,在拦截的编译执行任务中,基于activity信息修改manifest配置文件;以及,将修改后的manifest配置文件压缩至资源缓存文件中,完成activity的注册。在该技术方案中,能够在拦截的编译执行任务中,基于activity信息修改manifest配置文件,以自动化注册activity,从而能够减少研发人员重复的工作,降低时间和人工成本,提高activity的注册效率。
附图说明
47.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
48.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
49.图1为本公开实施例提供的一种活动的注册方法的流程示意图;
50.图2为本公开实施例提供的一种manifest配置文件修改方法的流程示意图;
51.图3为本公开实施例提供的一种活动的注册装置的结构示意图;
52.图4为本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
53.为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
54.在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
55.在终端开发过程中,已经能够利用插件实现activity的自动生成了,在此情况下,研发人员希望也能够实现activity的自动注册。activity注册的方式为:在打包阶段,即kapt(kotlin annotation processing tool,kotlin注解处理工具)阶段或者transform(转换)阶段,收集新生成的activity,而后将收集的activity写入manifest配置文件(也即androidmanifest文件)中。可见,注册activity需要修改manifest配置文件;现有技术中主要是修改合并之后的manifest配置文件的源文件来实现注册。然而,由于在打包阶段,manifest配置文件已经被处理为一个压缩进资源缓存文件中的二进制文件了,因此,目前的方案无法实现自动化注册activity。如何在打包阶段,动态地修改资源缓存文件中的二进制格式的manifest配置文件,已经成为了实现自动化注册activity的首要需求。基于此,本公开实施例提供了一种activity的注册方法、装置、设备及介质。
56.图1为本公开实施例提供的一种activity的注册方法的流程示意图,该方法可以由activity的注册装置执行,其中该装置可以采用软件和/或硬件实现,一般可集成在移动
终端、计算机等电子设备中,当然,还可以为位于服务器集群中的某一个服务器等,此处不作限定。如图1所示,该方法包括:
57.步骤s102,当应用程序启动activity时,获取activity的activity信息。
58.本实施例中,可以通过用户点击应用程序的图标等操作触发应用程序启动未注册的activity;当应用程序启动activity时,向操作系统发送该activity的启动请求,启动请求中包括activity信息。操作系统基于启动请求执行activity信息的注册。
59.步骤s104,从应用程序的安装包中提取manifest配置文件。其中,用程序的安装包可以包括apk(android application package,安卓应用程序包)或者aab(android app bundle,安卓应用捆绑包)。上述manifest配置文件为安卓系统中包含应用程序的配置信息的文件。
60.步骤s106,拦截编译执行任务,在拦截的编译执行任务中,基于activity信息强制修改manifest配置文件。
61.在实际应用中,研发人员发现,一次只能在manifest配置文件中注册一个activity;也就是说,对于增量编译,在通过修改manifest配置文件完成当前一个activity的注册后,便由aapt(android asset packaging tool,安卓资源打包工具)或aapt2(优化后的aapt)生成资源缓存文件;在此情况下,manifest配置文件是被压缩进资源缓存文件中的二进制文件,对于后续新生成的activity依然无法自动注册。随着应用程序中activity的修改或新生成,activity是动态增加的;面对动态增加的activity,编译执行任务无法重复运行,导致增量编译生成的资源缓存文件不能携带上研发人员希望插入的多个activity。
62.在此情况下,本实施例可以在编译执行任务运行前,首先拦截编译执行任务,而后再在拦截的编译执行任务中,基于activity信息修改manifest配置文件。在一种具体实施例中,可以通过hook函数拦截编译执行任务。在操作系统调用编译执行任务之前,hook函数先捕获该编译执行任务,得到该任务的控制权,从而可以修改该编译执行任务的执行逻辑。拦截之后的编译执行任务能够重复运行,基于多个activity的activity信息修改manifest配置文件,最终使增量编译生成的资源缓存文件成功携带上研发人员希望插入的每个activity节点。上述修改manifest配置文件的方式可以为:基于activity信息构建多个activity节点,并将多个activity节点插入manifest配置文件。
63.步骤s108,将修改后的manifest配置文件压缩至资源缓存文件中,完成activity的注册。
64.在本实施例中,资源处理任务使用aapt或aapt2对上述修改后的manifest配置文件进行资源压缩,并在预设的输出路径下生成资源缓存文件,在资源缓存文件中,上述修改后的manifest配置文件被压缩为二进制格式;至此,完成activity的自动化注册。接下来,在运行安装包打包任务时,会将资源缓存文件与dex(安卓平台上可执行文件的类型)等文件进行合并、签名和优化等处理,得到最终的安装包。
65.本公开实施例提供的活动的注册方法,包括:首先当应用程序启动activity时,获取activity的activity信息;然后从应用程序的安装包中提取manifest配置文件;之后拦截编译执行任务,在拦截的编译执行任务中,基于activity信息修改manifest配置文件;以及,将修改后的manifest配置文件压缩至资源缓存文件中,完成activity的注册。在该技术
方案中,能够在拦截的编译执行任务中,基于activity信息修改manifest配置文件,以自动化注册activity,从而能够减少研发人员重复的工作,降低时间和人工成本,提高activity的注册效率。
66.本实施例以上述实施例中各个可选方案为基础进行具体化,在本实施例中,按照安装包包括apk或者aab,分别给出activity的注册方法的具体实现方式。
67.针对安装包为apk的应用场景,在提取manifest配置文件的方法中,可以依据apk的打包方式获取apk的资源缓存文件的路径,而后通过该路径获取manifest配置文件。其中,apk的打包方式可参照如下所示:
68.在运行资源处理任务时,使用aapt或aapt2进行资源压缩,并在预设的输出路径下生成资源缓存文件。其中,资源缓存文件中包括二进制格式的manifest配置文件。
69.基于apk的上述打包方式,提取manifest配置文件的方法可以包括:通过apk的资源处理任务获取资源缓存文件的输出路径;对输出路径下的资源缓存文件进行解压,得到解压后的二进制格式的manifest配置文件。
70.在apk下,manifest配置文件根据功能划分大致可以划分为四个区:头部、字符串区、资源标识区以及xml文件区。其中的xml文件区是manifest配置文件整体的核心部分,包含了命名空间和tag(标记)相关信息等;该文件区可以划分为多个文件区块(chunk),并由多个区块构成,比如可以包括:开始标记区块(start tag chunk)、结束标记区块(end tag chunk)、文本块(text chunk)、开始命名空间区块(start namespace chunk)、结束命名空间区块(end namespace chunk)等。
71.在本实施例中,基于activity信息对上述提取到的manifest配置文件进行修改。考虑到待注册的activity通常为多个,为了在运行编译执行任务时便于使用activity信息,本实施例可以预先将待注册的各activity的activity信息存储到中间目录的预设json文件中。而后再通过hook函数拦截编译执行任务,在拦截的编译执行任务中,可以强制修改manifest配置文件,修改manifest配置文件的实现方式可参照图2所示:
72.步骤s202,根据当前待注册的activity的activity信息,构建与manifest配置文件中区块一致的多个文件区块。本步骤针对每个待注册的activity的activity信息,均构建该activity对应的多个文件区块,在此以其中任一activity作为当前待注册的activity进行描述。构建的文件区块可以包括但不限于:开始标记区块、结束标记区块、字符串区块。
73.步骤s204,将多个文件区块确定为当前待注册的activity对应的activity节点。本实施例生成的activity节点与manifest配置文件具有数据结构一致的文件区块,基于此,能够将activity节点插入至manifest配置文件中。当然可以理解的是,插入activity节点后的manifest配置文件,还需要适应性地修改头部、字符串区等信息,在此不再具体描述。
74.步骤s206,利用二进制文件修改器将activity节点插入至manifest配置文件。
75.之后,将修改后的manifest配置文件重新压缩至资源缓存文件中,完成activity的自动化注册。
76.在本公开实施例中,针对安装包包括aab的应用场景下,从aab中提取manifest配置文件的方法包括:通过aab的资源处理任务提取pb格式的proto文件;通过protoc编译器对proto文件进行反编译,得到反编译后的manifest配置文件。
77.在具体实现时,aab的资源处理任务使用aapt或aapt2处理manifest配置文件时,实际分别使用的是两个pb格式的proto文件。基于此,本实施例可以通过protoc编译器对上述两个proto文件进行反编译。
78.在实际应用场景中,一些电子设备上可能没有安装protoc编译器,基于此,可以在提取manifest配置文件之前,在aab中预先安装protoc编译器。本实施例提供一种预装protoc编译器的方法,包括:通过预先创建的类加载器获取protoc编译器;基于权限命令控制protoc编译器的权限为具有可执行权限。
79.在具体实施时,通过类加载器以流形式获取protoc编译器,将protoc编译器拷贝到中间目录。对于保存至中间目录下的protoc编译器,使用权限命令控制protoc编译器的权限为具有可执行权限。
80.具有可执行权限的protoc编译器对上述proto文件进行反编译,得到数据格式易于阅读理解的manifest配置文件;该manifest配置文件是一种类json但不是json格式的文件,其包括child(子项)、elememt(元素)和attribute(属性)等多个tag属性和各tag属性对应的数据。
81.根据类json格式的manifest配置文件,本实施例提供一种基于activity信息修改manifest配置文件的方法,主要包括:基于activity信息构建多个与manifest配置文件的数据结构一致的activity节点,以及将构建的多个activity节点插入manifest配置文件。
82.其中,在构建activity节点过程中,activity信息中除tag属性之外的其他信息,均可以按照键值对形式构建各自的activity节点。对于tag属性,不同的tag属性对应不同的资源标识;在此情况下,可以提供针几种针对tag属性构建activity节点的实现方式。
83.实现方式一,包括如下步骤(1)和(2):
84.(1)根据预设的第一映射关系,确定activity信息中包括的目标tag属性对应的目标资源标识;其中,第一映射关系是从manifest配置文件中收集的tag属性与资源标识之间的映射关系。第一映射关系中记录了manifest配置文件中所有tag属性及其对应的资源标识,基于此,可以利用第一映射关系确定当前activity信息中目标tag属性对应的目标资源标识。
85.(2)基于目标资源标识构建多个activity节点;其中,每个目标资源标识分别对应一个activity节点。
86.实现方式二,包括如下步骤(i)至(iii):
87.(i)根据预设的第二映射关系,确定activity信息中包括的目标tag属性对应的目标字段;其中,第二映射关系用于记录各tag属性对应的字段。
88.(ii)基于目标字段和预设格式,生成目标属性对应的目标资源标识;该预设格式包括如下三部分:资源包标识(package_id)、类型标识(type_id)和条目标识(entry_id)。资源包标识表示资源是系统资源,是固定字段;类型标识用于表示应用程序所属电子设备(如手机)的标识,也是固定字段;条目标识用于表示tag属性,各tag属性对应具有唯一性的字段。本实施例按照预设格式填写各个部分对应的字段,生成目标资源标识。
89.(iii)基于目标资源标识构建多个activity节点。
90.可以理解的是,以上仅为针对tag属性构建activity节点的两种示例,在实际应用中,也可采用其它构建方式,在此不作限制。
91.接下来,参照如下实施例将构建的activity节点插入manifest配置文件:
92.查找manifest配置文件中,tag属性的名称为指定名称的目标tag属性,在目标tag属性后插入多个activity节点。具体的,可以通过解析tag属性递归获取名称为指定名称的多个目标tag属性,将各目标tag属性中定义的行号确定为待插入的目标位置,并在目标位置下插入activity节点。
93.通过protoc编译器对插入activity节点后的manifest配置文件进行编译,将插入activity节点后的manifest配置文件以pb格式重新压缩至资源缓存文件中,完成activity的自动化注册。
94.综上,本公开实施例分别提供了面向apk和aab的自动化注册activity的技术方案,该技术方案能够在拦截的编译执行任务中,基于activity信息修改manifest配置文件,从而自动化注册activity,该方案能够减少研发人员重复的工作,降低时间和人工成本,提高activity的注册效率。
95.图3为本公开实施例提供的一种活动的注册装置的结构示意图,该装置可由软件和/或硬件实现,一般可集成在电子设备中,可通过执行活动的注册方法来自动化注册activity。如图3所示,该装置包括:
96.活动获取模块302,用于当应用程序启动activity时,获取activity的activity信息;
97.文件获取模块304,用于从应用程序的安装包中提取应用清单manifest配置文件;
98.文件修改模块306,用于拦截编译执行任务,在拦截的编译执行任务中,基于activity信息强制修改manifest配置文件;
99.文件压缩模块308,用于将修改后的manifest配置文件压缩至资源缓存文件中,完成activity的注册。
100.在一种实施例中,上述文件修改模块306具体用于:通过hook函数拦截编译执行任务。
101.在一种实施例中,上述安装包包括apk;上述文件获取模块304具体用于:
102.通过apk的资源处理任务获取资源缓存文件的输出路径;对输出路径下的资源缓存文件进行解压,得到解压后的二进制格式的manifest配置文件;其中,manifest配置文件的文件区由多个区块构成。
103.在一种实施例中,上述文件修改模块306具体用于:
104.根据当前待注册的activity的activity信息,构建与manifest配置文件中区块一致的多个文件区块;将多个文件区块确定为当前待注册的activity对应的activity节点;利用二进制文件修改器将activity节点插入至manifest配置文件。
105.在一种实施例中,上述装置还包括信息存储模块,其用于:将各activity的activity信息存储到中间目录的预设json文件中。
106.在一种实施例中,上述安装包包括aab;上述文件获取模块304具体用于:
107.通过aab的资源处理任务提取pb格式的proto文件;通过protoc编译器对proto文件进行反编译,得到反编译后的manifest配置文件;其中,manifest配置文件包括多个tag属性和各tag属性对应的数据。
108.在一种实施例中,上述文件修改模块306具体用于:基于activity信息构建多个
activity节点,并将多个activity节点插入manifest配置文件。
109.在一种实施例中,上述文件修改模块306具体用于:
110.根据预设的第一映射关系,确定activity信息中包括的目标tag属性对应的目标资源标识;其中,第一映射关系是从manifest配置文件中收集的tag属性与资源标识之间的映射关系;基于目标资源标识构建多个activity节点。
111.在一种实施例中,上述文件修改模块306具体用于:
112.根据预设的第二映射关系,确定activity信息中包括的目标tag属性对应的目标字段;其中,第二映射关系用于记录各tag属性对应的字段;基于目标字段和预设格式,生成目标tag属性对应的目标资源标识;其中,预设格式包括:资源包标识、类型标识和条目标识;基于目标资源标识构建多个activity节点。
113.在一种实施例中,上述文件修改模块306具体用于:
114.查找manifest配置文件中,tag属性的名称为指定名称的目标tag属性,在目标tag属性后插入多个activity节点。
115.在一种实施例中,上述还包括编译器获取模块,其用于:
116.通过预先创建的类加载器获取protoc编译器;基于权限命令控制protoc编译器的权限为具有可执行权限。
117.本公开实施例所提供的活动的注册装置可执行本公开任意实施例所提供的活动的注册方法,具备执行方法相应的功能模块和有益效果。
118.图4为本公开实施例提供的一种电子设备的结构示意图。如图4所示,电子设备400包括一个或多个处理器401和存储器402。
119.处理器401可以是中央处理单元(cpu)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备400中的其他组件以执行期望的功能。
120.存储器402可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(rom)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器401可以运行所述程序指令,以实现上文所述的本公开的实施例的活动的注册方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。
121.在一个示例中,电子设备400还可以包括:输入装置403和输出装置404,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
122.此外,该输入装置403还可以包括例如键盘、鼠标等等。
123.该输出装置404可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出装置404可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
124.当然,为了简化,图4中仅示出了该电子设备400中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备400还可以包括任何其他适当的组件。
125.除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计
算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所述的活动的注册方法。
126.所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、c++等,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
127.此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所提供的活动的注册方法。
128.所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
129.本公开实施例还提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现本公开实施例中的方法。
130.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
131.以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1