程序组件调试更新方法及其相应的装置、设备、介质与流程

文档序号:27429010发布日期:2021-11-17 21:23阅读:87来源:国知局
程序组件调试更新方法及其相应的装置、设备、介质与流程

1.本技术涉及网络直播程序测试领域,尤其涉及一种程序组件调试更新方法、装置及其相应的电子设备和非易失性存储介质。


背景技术:

2.安卓操作系统应用程序的开发中,对应用程序所用到的公共模块、基础模块等会做组件化相关封装,然后通过在不同应用内快速添加组件之间的依赖关系,即可保证相同功能的快速复用。
3.因同一互联网平台往往提供多种应用程序,不同应用程序中复用多个组件,不同组件之间又可能存在较为复杂的资源引用关系,因此,当需要进行应用程序的调试时,对于涉及到复用组件的应用程序的测试,需要谨慎的操作,否则容易导致出错,但开发人员往往也会为了确保测试的顺利进行,将大量的人力物力投入在处理跨组件资源引用的依赖关系梳理工作上,由于互联网平台的引用资源异常繁杂多样,如果不能高效地处理这些资源引用关系,不仅会影响应用程序测试效率,甚至也会导致所发布的应用程序漏洞百出。因此,有必要尽量提升涉及到组件调用的应用程序的测试效率,在执行本地调试时先确保顺利完成相关组件成功更新到应用程序中。
4.现有方案中,组件本地构建调试一般需要先独立的构造出组件,然后再构建出该组件的宿主应用,然后宿主应用与组件一同编译出亲折宿主应用,再重新安装宿主,也就是说,宿主应用需要与组件一同构建出来才能实现宿主应用的更新,才能在此基础上实施测试。这种方式每次都要重新编译宿主应用已有的内容,编译过程繁琐、低效。
5.通常来说,组件功能单一、结构简单,构建速度更快;而宿主应用功能结构更复杂,构建时间相对组件会更长,且宿主应用卸载重装会带来应用数据的丢失,导致验证流程重复且困难,不利于程序测试工作的正常开展。因此在现有的组件本地构建调试流程中,存在操作繁琐、构建时间长、验证效率低等影响开发效率的问题。


技术实现要素:

6.本技术的目的在于解决上述问题至少之一而提供一种程序组件调试更新方法及其相应的装置、计算机设备、非易失性存储介质,以便对应用程序实施自动化分发测试。
7.为满足本技术的各个目的,本技术采用如下技术方案:
8.适应本技术的目的之一而提供的一种程序组件调试更新方法,其包括如下步骤:
9.根据功能组件的资源依赖关系信息,确定其引用资源,所述引用资源包括该功能组件开放给外部引用的目标资源及其自身需引用的外部资源;
10.创建并替换旧有的资源映射表,所述资源映射表包含所述引用资源的资源特征与资源名称之间的映射关系数据;
11.编译功能组件相对应的工程项目,生成该功能组件的程序补丁包及资源补丁包,该资源补丁包存储所述资源映射表所指向的引用资源;
12.将所述程序补丁包及资源补丁包推送至受测设备的预定路径,以在受测设备启动目标宿主程序时,由目标宿主程序加载所述程序补丁包及资源补丁包而添加该功能组件。
13.具体化的实施例中,根据功能组件的资源依赖关系信息,确定其引用资源,所述引用资源补丁包括该功能组件开放给外部引用的目标资源及其自身需引用的外部资源,包括如下步骤:
14.根据功能组件声明开放的访问接口的代码信息所表述的资源依赖关系信息,确定该功能组件开放给外部引用的自带资源;
15.针对所述自带资源,确定其中未记录在旧有的资源映射表中的自带资源构成该功能组件开放给外部引用的目标资源;
16.根据功能组件调用外部访问接口的代码信息所表述的资源依赖关系信息,确定该功能组件自身需引用的外部资源;
17.将所述目标资源与所述外部资源构造为资源集合,以表征该功能组件的引用资源。
18.具体化的实施例中,创建并替换已有的资源映射表,该资源映射表包含所述引用资源的资源特征与资源名称之间的映射关系数据,包括如下步骤:
19.创建新的资源映射表;
20.将旧有的资源映射表中所述外部资源的资源名称与资源特征之间映射关系数据复制到新的资源映射表中;
21.将所述目标资源的资源名称及为其生成的资源特征之间的映射关系数据存储至新的资源映射表中;
22.存储所述新的资源映射表以同名替换所述旧有的资源映射表。
23.具体化的实施例中,编译功能组件相对应的工程项目,生成该功能组件的程序补丁包及资源补丁包,该资源补丁包存储所述资源映射表所指向的引用资源,包括如下步骤:
24.启动对当前功能组件相对应的工程项目的编译,以生成工程项目相关联的代码文件及资源补丁包,该资源补丁包存储所述资源映射表所指向的引用资源;
25.删除当前功能组件之外的其他功能组件相对应的代码文件,以净化当前功能组件的代码文件;
26.将当前功能组件的代码文件打包为程序补丁包。
27.较佳的实施例中,将所述程序补丁包及资源补丁包推送至受测设备的预定路径,包括如下步骤:
28.调用受测设备所安装的操作系统的调试工具的连接指令建立当前设备与受测设备之间的数据通信连接;
29.调用所述调试工具的传输指令向受测设备的预定路径推送所述的程序补丁包与资源补丁包;
30.调用所述调试工具的驱动指令驱动受测设备运行目标宿主程序,以在受测设备启动目标宿主程序时,由目标宿主程序加载所述程序补丁包及资源补丁包而添加该功能组件。
31.较佳的实施例中,目标宿主程序加载所述程序补丁包及资源补丁包而添加该功能组件的过程,包括如下步骤:
32.获取目标宿主程序自身的程序安装包及其程序资源包;
33.将所述程序资源包与所述预定路径中的资源补丁包合并为宿主资源包;
34.重新创建并替换目标宿主程序的资源管理器,将其配置为优先加载所述宿主资源包;
35.调用类加载器加载程序安装包及程序补丁包中的所有功能组件。
36.具体化的实施例中,将所述程序资源包与所述预定路径中的资源补丁包合并为宿主资源包,包括如下步骤:
37.解压缩所述程序资源包获得其中的资源构成第一资源文件集;
38.解压所述预定路径中的资源补丁包获得其中的资源构成第二资源文件集;
39.将第一资源文件集与第二资源文件集在同一目录下压缩为新的压缩文件,构成所述的宿主资源包。
40.适应本技术的目的之一而提供的一种程序组件调试更新装置,其包括资源确定模块、映射更新模块、编译生成模块,以及更新推送模块。其中,所述资源确定模块,用于根据功能组件的资源依赖关系信息,确定其引用资源,所述引用资源包括该功能组件开放给外部引用的目标资源及其自身需引用的外部资源;所述映射更新模块,用于创建并替换已有的资源映射表,该资源映射表包含所述引用资源的资源特征与资源名称之间的映射关系数据;所述编译生成模块,用于编译功能组件相对应的工程项目,生成该功能组件的程序补丁包及资源补丁包,该资源补丁包存储所述资源映射表所指向的引用资源;所述更新推送模块,用于将所述程序补丁包及资源补丁包推送至受测设备的预定路径,以在受测设备启动目标宿主程序时,由目标宿主程序加载所述程序补丁包及资源补丁包而添加该功能组件。
41.具体化的实施例中,所述资源确定模块包括:确定自带子模块,用于根据功能组件声明开放的访问接口的代码信息所表述的资源依赖关系信息,确定该功能组件开放给外部引用的自带资源;自带过滤子模块,用于针对所述自带资源,确定其中未记录在旧有的资源映射表中的自带资源构成该功能组件开放给外部引用的目标资源;确定外部子模块,用于根据功能组件调用外部访问接口的代码信息所表述的资源依赖关系信息,确定该功能组件自身需引用的外部资源;资源集合子模块,用于将所述目标资源与所述外部资源构造为资源集合,以表征该功能组件的引用资源。
42.具体化的实施例中,所述映射更新模块包括:空表创建子模块,用于创建新的资源映射表;复制转移子模块,用于将旧有的资源映射表中所述外部资源的资源名称与资源特征之间映射关系数据复制到新的资源映射表中;添加补全子模块,用于将所述目标资源的资源名称及为其生成的资源特征之间的映射关系数据存储至新的资源映射表中;存储替换子模块,用于存储所述新的资源映射表以同名替换所述旧有的资源映射表。
43.具体化的实施例中,所述编译生成模块包括:编译启动子模块,用于启动对当前功能组件相对应的工程项目的编译,以生成工程项目相关联的代码文件及资源补丁包,该资源补丁包存储所述资源映射表所指向的引用资源;代码净化子模块,用于删除当前功能组件之外的其他功能组件相对应的代码文件,以净化当前功能组件的代码文件;补丁打包子模块,用于将当前功能组件的代码文件打包为程序补丁包。
44.较佳的实施例中,所述更新推送模块包括:连接建立子模块,用于调用受测设备所安装的操作系统的调试工具的连接指令建立当前设备与受测设备之间的数据通信连接;文
件推送子模块,用于调用所述调试工具的传输指令向受测设备的预定路径推送所述的程序补丁包与资源补丁包;驱动更新子模块,用于调用所述调试工具的驱动指令驱动受测设备运行目标宿主程序,以在受测设备启动目标宿主程序时,由目标宿主程序加载所述程序补丁包及资源补丁包而添加该功能组件。
45.较佳的实施例中,目标宿主程序加载所述程序补丁包及资源补丁包而添加该功能组件的过程,被配置为实现如下功能:获取目标宿主程序自身的程序安装包及其程序资源包;将所述程序资源包与所述预定路径中的资源补丁包合并为宿主资源包;重新创建并替换目标宿主程序的资源管理器,将其配置为优先加载所述宿主资源包;调用类加载器加载程序安装包及程序补丁包中的所有功能组件。
46.具体化的实施例中,将所述程序资源包与所述预定路径中的资源补丁包合并为宿主资源包,被配置为实现如下功能:解压缩所述程序资源包获得其中的资源构成第一资源文件集;解压所述预定路径中的资源补丁包获得其中的资源构成第二资源文件集;将第一资源文件集与第二资源文件集在同一目录下压缩为新的压缩文件,构成所述的宿主资源包。
47.适应本技术的目的之一而提供的一种计算机设备,包括中央处理器和存储器,所述中央处理器用于调用运行存储于所述存储器中的计算机程序以执行本技术所述的程序组件调试更新方法的步骤。
48.适应本技术的另一目的而提供的一种非易失性存储介质,其以计算机可读指令的形式存储有依据所述的程序组件调试更新方法所实现的计算机程序,该计算机程序被计算机调用运行时,执行该方法所包括的步骤。
49.相对于现有技术,本技术的优势如下:
50.本技术先根据功能组件的引用资源,包括其所引用的外部资源及其被引用的目标资源,更新其工程项目中原有的资源映射表,实现对功能组件的资源依赖关系的有效组织,在此基础上编译出功能组件相对应的程序补丁包及资源补丁包,体积小巧,编译高效,然后将其传输至受测设备中直接由宿主应用程序对程序补丁包和资源补丁包进行加载,实现宿主应用程序的升级更新,完成组件本地调试构建。本技术通过自动梳理功能组件的引用资源的依赖关系,简化了资源整理引起的操作过程,通过形成程序补丁包和资源补丁包交付宿主应用程序自行加载实现更新,一方面节约了组件本地构建所需的时间,另一方面由于无需在受测设备中重新安装宿主应用程序,因此,宿主应用程序的原有数据得以继续利用,避免原有数据的重复验证,有助提升验证效率。总体上,本技术的技术方案自然也有助于提升应用程序的开发效率。
附图说明
51.本技术上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
52.图1为实施本技术的技术方案相关的一种典型的部署架构示意图;
53.图2为本技术的程序组件调试更新方法的典型实施例的流程示意图;
54.图3为本技术的程序组件调试更新方法确定引用资源过程的流程示意图;
55.图4为本技术的程序组件调试更新方法更新资源映射表过程的流程示意图;
56.图5为本技术的程序组件调试更新方法编译功能组件过程的流程示意图;
57.图6为本技术的程序组件调试更新方法启动测试过程的流程示意图;
58.图7为本技术的目标宿主程序加载功能组件过程的流程示意图;
59.图8为本技术的目标宿主程序合并引用资源过程的流程示意图;
60.图9为本技术的程序组件调试更新装置的典型实施例的原理框图;
61.图10为本技术所采用的一种计算机设备的结构示意图。
具体实施方式
62.下面详细描述本技术的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本技术,而不能解释为对本技术的限制。
63.本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本技术的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
64.本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本技术所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
65.本技术领域技术人员可以理解,这里所使用的“客户端”、“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,进行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他诸如个人计算机、平板电脑之类的通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;pcs(personal communications service,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;pda(personal digital assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或gps(global positioning system,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“客户端”、“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“客户端”、“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是pda、mid(mobile internet device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
66.本技术所称的“服务器”、“客户端”、“服务节点”等名称所指向的硬件,本质上是具
备个人计算机等效能力的电子设备,为具有中央处理器(包括运算器和控制器)、存储器、输入设备以及输出设备等冯诺依曼原理所揭示的必要构件的硬件装置,计算机程序存储于其存储器中,中央处理器将存储在外存中的程序调入内存中运行,执行程序中的指令,与输入输出设备交互,借此完成特定的功能。
67.需要指出的是,本技术所称的“服务器”这一概念,同理也可扩展到适用于服务器机群的情况。依据本领域技术人员所理解的网络部署原理,所述各服务器应是逻辑上的划分,在物理空间上,这些服务器既可以是互相独立但可通过接口调用的,也可以是集成到一台物理计算机或一套计算机机群的。本领域技术人员应当理解这一变通,而不应以此约束本技术的网络部署方式的实施方式。
68.请参阅图1,本技术相关技术方案实施时所需的硬件基础可按图中所示的架构进行部署,其各部分的作用及功能揭示如下:
69.本技术所称的远程服务器80可以作为一个前端的应用服务器,负责进一步连接起相关数据服务器,以此构成逻辑上相关联的服务机群,来为相关的终端设备例如图中所示的智能手机81、82和个人计算机提供服务。所述的智能手机81、82和个人计算机均可通过公知的网络接入方式与远程服务器80建立数据通信链路。
70.本技术的远程服务器80适于提供网络直播、即时通信之类的互联网业务,通过运行服务而向相应的终端设备提供相应的互联网业务,由此,不同用户通过各自的终端设备使用远程服务器80的服务,便可实现用户之间的通信数据的交换。例如,一个用户可以通过该远程服务器80获取另一个用户的视频流、信息、指令等。
71.本技术的终端设备配备有相关操作系统,例如android、homoneyos以及其他提供同等功能的操作系统,在此类操作系统的支持下,远程服务器80与终端设备之间可以通过彼此约定的通信链路进行数据通信,而为这些操作系统适应性开发的应用程序也得以在终端设备中正常运行,正是借助这些应用程序的运行,使得终端设备可以实现人机交互、远程交互以及通过远程服务器与其他终端实现各种间接交互。
72.本技术所称的主控服务器88,其作为独立设备,主要用于实施本技术的程序组件调试更新方法,以便控制本技术的受测设备81和/或82进行测试。本技术所称的受测设备81、82即为所述的终端设备,主要用于安装本技术的宿主应用程序,以便通过宿主应用程序的运行配合主控服务器所执行的程序组件调试更新方法,在受测设备中测试相关组件植入宿主应用程序之后的表现。主控服务器88与终端设备工作于server/client模式,主控服务器88作为server端实施控制,受测设备81、82作为client端接受测试,两者之间可以采用物理有线连接或无线连接建立通信链路,甚至在操作系统支持的前提下,还可通过公网上的第三方服务器来建立这种通信机制。根据本技术的原理,主控服务器88通过控制一台或多台受测设备81、82实施测试,各受测设备81、82在主控服务器88的控制下通过所述远程服务器进行通信数据交换,由此便可实现多台受测设备81、82的交互业务流程的测试。
73.需要指出的是,为了支持主控服务器88与受测设备81、82之间形成c/s架构,主控服务器88将按照本技术的程序组件调试更新方法实现相应的应用程序以便在其运行后可以实施该方法而构成server端,而受测设备81、82中也会被植入用于与server端通信并负责执行server端的指令的后台程序,这一后台程序依据与本技术的程序组件调试更新方法相配合以实施测试的方式而实现,在该后台程序运行时接收server端的各种指令而执行相
应的功能,从而使受测设备81、82发挥client端的作用。
74.本技术所称的应用程序,其通称意义是指运行于服务器或终端设备之类的电子设备的应用程序,这些应用程序采用编程的方式实现了本技术的相关技术方案,其程序代码可被以计算机可执行指令的形式保存于计算机能识别的非易失性存储介质中,并被中央处理器调入内存中运行,通过该应用程序在计算机的运行而构造出本技术的相关装置。其中,本技术所称的宿主应用程序,是接受测试的应用程序,其将运行于所述的受测设备81、82中,通过其运行并加载本技术的相关功能组件而接受测试。
75.本领域技术人员对此应当知晓:本技术的各种方法,虽然基于相同的概念而进行描述而使其彼此间呈现共通性,但是,除非特别说明,否则这些方法都是可以独立执行的。同理,对于本技术所揭示的各个实施例而言,均基于同一发明构思而提出,因此,对于相同表述的概念,以及尽管概念表述不同但仅是为了方便而适当变换的概念,应被等同理解。
76.本技术即将揭示的各个实施例,除非明文指出彼此之间的相互排斥关系,否则,各个实施例所涉的相关技术特征可以交叉结合而灵活构造出新的实施例,只要这种结合不背离本技术的创造精神且可满足现有技术中的需求或解决现有技术中的某方面的不足即可。对此变通,本领域技术人员应当知晓。
77.请参阅图2,本技术的一种程序组件调试更新方法,由主控服务器侧的应用程序负责执行体现,在其典型实施例中,其包括如下步骤:
78.步骤s1100、根据功能组件的资源依赖关系信息,确定其引用资源,所述引用资源包括该功能组件开放给外部引用的目标资源及其自身需引用的外部资源:
79.根据本技术的技术方案所实现的所述主控服务器所运行的应用程序,参与到一个开发框架中,该开发框架提供给开发人员开发本技术的功能组件的开发环境,由此,开发人员可以在其中编写本技术的功能组件相关的代码,添加相应的资源等。可以理解,根据功能组件的代码所定义或调用的各种功能接口的代码内容或者注释内容,可以确定功能组件所涉及的引用资源的资源依赖关系信息。
80.所述的功能组件一般是以类的形式进行代码编写,必要时为其添加相应的注释。所述的引用资源,包括但不限于计算机可读写的图片、文本、音频、视频、数据索引、数据属性等类型,每个引用资源本质上是一个可被独立调用的计算机数据对象。在开发框架中,同一项目之下,允许同步开发多个功能组件,每个功能组件对应其所属的工程项目之下的一个工程。不同工程之间,也即不同功能组件之间,可以彼此携带自己引入的资源进行自行引用,也可能共同引用同一资源。一个功能组件可能通过接口声明来开放其自身引入的资源供其他功能组件引用,从而构成其被引用的自带资源;也可能引用其他功能组件声明开放的其他资源,即外部资源。因此,所述引用资源的引用关系可能错综复杂,需要通过所述的资源依赖关系信息来确定,一般也需要对同一工程项目下的相关资源进行唯一性特征化来加以管理。
81.所述的资源依赖关系信息,如前所述,对于每个当前功能组件而言,可以通过当前功能组件以及其其他功能组件的代码和/或注释来确定,通常也反映在各个功能组件的访问接口的定义信息中,因此,通过检测这些访问接口的相关定义信息以及所述的代码、注释等,可以获知当前功能组件与其他功能组件之间的资源依赖关系信息,包括当前功能组件适于被其他功能组件引用的自带资源的依赖关系信息,以及当前功能组件引用其他功能组
件的资源即外部资源的依赖关系信息,据此便可搜集出与当前功能组件相关的引用资源。对此,本领域技术人员均可知晓。
82.根据所述的资源依赖关系信息确定出的当前功能组件所引用的外部资源,可能有至少一个或多个外部资源已经事先存储在当前工程项目中,这种情况下这些外部资源通常已被特征化,即其在当前工程项目的资源映射表中已经存在相应的映射关系数据,该映射关系数据包含其相对应的外部资源的资源名称及其起唯一性指示作用的资源特征,两者一一对应,通过所述资源特征可以确定外部资源的资源名称,由于该资源名称一般是外部资源的文件名,因此通过该资源名称可以调用该外部资源。
83.根据所述的资源依赖关系信息确定出的当前功能组件的自带资源,其中部分自带资源可能与资源映射表中已特征化的资源重复,因此,可以对自带资源进行过滤,过滤掉已经出现在资源映射表中的自带资源,剩余部分作为当前功能组件开放给外部引用的目标资源,以便后续仅对所述自带资源中的此部分目标资源进行特征化存储。
84.本领域技术人员可以理解,所述的资源映射表,一般也不仅仅包括各功能组件所引用的一种或数种资源,对于安卓开发环境而言,资源映射表所存储的资源包括layout、id、drawble、attr、styleable等类型的资源。在本技术中,考虑到功能组件所调用的资源的特点,对于本技术所示例的安卓开发环境而言,收集功能组件的自带资源可以通过收集功能组件所有api模块的drawable和layout源文件来直接确定。
85.可见,根据功能组件的资源依赖关系信息,可以确定其两个方向的引用资源,包括其声明开放给外部引用的目标资源以及已经存在于当前工程项目的资源映射表中的属于其他功能组件所开放的外部资源。
86.步骤s1200、创建并替换旧有的资源映射表,所述资源映射表包含所述引用资源的资源特征与资源名称之间的映射关系数据:
87.当前功能组件在工程项目中被构建之后便拥有一张资源映射表,该资源映射应随着当前功能组件的引用资源的变化而变动,为了使当前功能组件提供给宿主应用程序时,能够确保各种引用资源被准确调用,因而,需要确保宿主应用程序适应当前功能组件的加入而更新其资源映射表,故而需要在此处保持当前功能组件的资源映射表能够反映当前功能组件的引用资源的实际情况,故该资源映射表不仅应包含原有的已经特征化的引用资源的相关映射关系数据,也应包括当前功能组件新增的相关目标资源的映射关系数据。
88.为了实现当前功能组件的资源映射表的更新,可先在内存中创建一个空的资源映射表,用于替换其旧有的资源映射表,然后,将旧有的资源映射表中已经被特征化的,且属于当前功能组件所引用的外部资源的映射关系数据迁移到新创建的资源映射表中,继而,进一步将所述引用资源中的目标资源也特征化后形成所述的映射关系数据,存储于新创建的资源映射表中,由此,资源映射表便完整反映了当前功能组件所涉及的所有引用资源的映射关系数据,根据一个资源特征查询该资源映射表,便可唯一性地确定一个相应的资源名称,根据该资源名称便可直接获取到相应的引用资源。
89.完成内存中的资源映射表的编辑之后,便可将其以旧有的资源映射表相同的名称进行保存,实现对对旧有的资源映射表的替换。一般而言,根据安卓的规范,该资源映射表的文件名为resources.arsc。
90.步骤s1300、编译功能组件相对应的工程项目,生成该功能组件的程序补丁包及资
源补丁包,该资源补丁包存储所述资源映射表所指向的引用资源:
91.当前功能组件完成其相关引用资源的处理后,便可对其进行编译,编译的执行是在工程项目的框架下进行的,在编译过程中形成的产物中,主要需要获取当前功能组件相关的代码及资源,因此,对于非当前功能组件的其他功能组件的代码文件可以过滤掉,仅保留当前功能组件相关的代码文件,而对于当前功能组件所涉的引用资源,则依据最新的资源映射表便可确定并获取。
92.编译当前功能组件所构成的产物主要包括两部分,一是程序补丁包,二是资源补丁包。
93.程序补丁包用于存储当前功能组件相关的代码文件,具体可将当前功能组件被编译产生的代码文件打包压缩为程序补丁包,由于一般是测试所需,因而可不加签名、不进行代码混淆,直接打包即可,后缀为区别起见,可命名为apk。
94.资源补丁包则打包存储所述资源映射表中各个映射关系数据中资源名称所指向的各种相应的资源,包括当前功能组件的引用资源,其文件名后缀用zip起区别作用即可。
95.程序补丁包与资源补丁包的文件名中,除后缀外,其余可采用相同字符串进行命名,以便实现其彼此的关联,增强可读性,简化编程引用。
96.步骤s1400、将所述程序补丁包及资源补丁包推送至受测设备的预定路径,以在受测设备启动目标宿主程序时,由目标宿主程序加载所述程序补丁包及资源补丁包而添加该功能组件:
97.如前所述,受测设备是用于安装宿主应用程序的终端设备,该宿主应用程序也便构成此处的目标宿主程序,因此,当前功能组件的所述程序补丁包及资源补丁包应推送至受测设备的预定路径中,以便所述宿主应用程序可以对其实施加载。
98.所述的预定路径,一般是开发人员预定的受测设备存储结构中的指定目录的路径,其为宿主应用程序为获取补丁包而默认访问的存储处所,当宿主应用程序被启动时,便可根据开发人员预先为宿主应用程序开发的业务逻辑,自行去该预定路径中检索是否存在所述的补丁包,一旦存在便启动对功能组件的加载,将功能组件添加到宿主应用程序中运行。
99.所述宿主应用程序,出于配合本技术的技术方案的实施的需要,已经由开发人员预置相关业务逻辑,在该业务逻辑的控制下,其在被启动之后,先于其类加载器加载各个类所表达的功能组件而即行搜索获知所述的程序补丁包及资源补丁包,将资源补丁包合并到自身的资源存储路径之后,再启动其类加载器(classloader)加载其自身及该程序补丁包中的功能组件,从而完成其自身的启动,实现将功能组件添加到自身进程环境中参与程序测试。
100.本技术先根据功能组件的引用资源,包括其所引用的外部资源及其被引用的目标资源,更新其工程项目中原有的资源映射表,实现对功能组件的资源依赖关系的有效组织,在此基础上编译出功能组件相对应的程序补丁包及资源补丁包,体积小巧,编译高效,然后将其传输至受测设备中直接由宿主应用程序对程序补丁包和资源补丁包进行加载,实现宿主应用程序的升级更新,完成组件本地调试构建。
101.本技术通过自动梳理功能组件的引用资源的依赖关系,简化了资源整理引起的操作过程,通过形成程序补丁包和资源补丁包交付宿主应用程序自行加载实现更新,一方面
节约了组件本地构建所需的时间,另一方面由于无需在受测设备中重新安装宿主应用程序,因此,宿主应用程序的原有数据得以继续利用,避免原有数据的重复验证,有助提升验证效率。总体上,本技术的技术方案自然也有助于提升应用程序的开发效率。
102.请参阅图3,具体化的实施例中,所述步骤s1100,包括如下步骤:
103.步骤s1110、根据功能组件声明开放的访问接口的代码信息所表述的资源依赖关系信息,确定该功能组件开放给外部引用的自带资源:
104.如前所述,功能组件对于自身开发给外部调用的访问接口,即api,在其代码信息中存在相关定义信息,通过这些定义信息便可确定其被依赖的信息,也即确定其相对应的资源依赖关系信息,由此可确定其开放给外部引用的自带资源。
105.步骤s1120、针对所述自带资源,确定其中未记录在旧有的资源映射表中的自带资源构成该功能组件开放给外部引用的目标资源:
106.所述的自带资源,可能包括见或未见于当前工程项目的资源,无论如何,对于其中未记录在旧有的资源映射表中的自带资源,将其删除实现过滤,余下的自带资源不曾存储于当前工程项目的资源映射表中,本质上是新增资源,这部分新增资源在此处即构成所述的目标资源。
107.步骤s1130、根据功能组件调用外部访问接口的代码信息所表述的资源依赖关系信息,确定该功能组件自身需引用的外部资源:
108.至于当前功能组件所调用的外部访问接口,也可见于其代码信息中,通过其代码信息可以确知其调用了哪些外部访问接口,即其他功能组件的api,进而同理可以获得当前功能组件对其所引用的外部资源的资源依赖关系信息,依据这一信息便可确定其具体引用的外部资源。
109.步骤s1140、将所述目标资源与所述外部资源构造为资源集合,以表征该功能组件的引用资源:
110.确定所述的目标资源及外部资源之后,便需要对其进行存储,其中,对于外部资源,由于其他功能组件一般已经存在于工程项目之中,因此,所述的外部资源一般已经被预先特征化,因此一般无需针对外部资源进行特征化;而对于目标资源,由于通常是新增资源,因此,需要对其进行特征化以获得其资源特征,以便将其与资源名称构成映射关系数据。
111.为了集中管理当前功能组件的引用资源,此处可利用同一目录存储由目标资源和外部资源构成的资源集合,通过该资源集合来表征当前功能组件的引用资源,方便后续调用。
112.本实施例将获取功能组件的自带资源及外部资源的过程具体化,明确其依据的资源依赖关系信息存储于当前功能组件的代码信息中,由此可见,无需依赖外部参考,仅依赖功能组件自身的代码信息,便可高效地获取到当前功能组件所涉的各种引用资源,其实现效率高,全程可高效自动化实现。
113.请参阅图4,具体化的实施例中,所述步骤s1200,包括如下步骤:
114.步骤s1210、创建新的资源映射表:
115.如前所述,可在内存或缓存中创造一个空的资源映射表,以用于临时存储相关的资源的映射关系数据。
116.步骤s1220、将旧有的资源映射表中所述外部资源的资源名称与资源特征之间映射关系数据复制到新的资源映射表中:
117.旧有的资源映射表,即工程项目中此先生成的资源映射表,其存储有工程项目所涉的资源的资源名称及资源特征之间的映射关系数据,但由于其中的资源包括当前功能组件未必用到的资源,即非引用资源,因此,为了实现过滤,此处仅将属于当前功能组件所引用的外部资源相关的映射关系数据从旧有的资源映射表中复制迁移到新的资源映射表中即可。
118.步骤s1230、将所述目标资源的资源名称及为其生成的资源特征之间的映射关系数据存储至新的资源映射表中:
119.对于当前功能组件所引用的目标资源,需预先对其进行特征化以生成其资源特征,在此基础上,此处将其资源名称与资源特征之间的映射关系数据对应存储至新的资源映射表中,实现目标资源的映射关系数据与外部资源的映射关系数据的合并。
120.步骤s1240、存储所述新的资源映射表以同名替换所述旧有的资源映射表:
121.将所述资源映射表存储为所述旧有的资源映射表相同的名称,便可实现对旧有的资源映射表的替换。
122.灵活变换的实施例中,新的资源映射表也可不替换旧有的资源映射表,而采用其他名称命名,只要在后续调用时加以识别区分即可,本领域技术人员对此应灵活变通。
123.本实施例,采用简便的方式实现了工程项目中资源映射表的快速高效的更新,为当前功能组件精准获取其引用资源的映射信息提供解决方案,有助于确保运行阶段的准确调用,降低出错率,增强宿主应用程序在测试过程中的鲁棒性。
124.请参阅图5,具体化的实施例中,所述步骤s1300,包括如下步骤:
125.步骤s1310、启动对当前功能组件相对应的工程项目的编译,以生成工程项目相关联的代码文件及资源补丁包,该资源补丁包存储所述资源映射表所指向的引用资源:
126.以安卓开发环境为例,应用程序代码以java编写,因此,当需要编译当前功能组件时,调用开发环境中集成的javacompiler对当前功能组件相对应的工程项目进行编译。在编译过程中,默认会对整个工程项目进行翻译,因此,不仅会产生当前功能组件相对应的代码文件,也会产生其他功能组件相对应的功能组件。
127.在实施编译的过程中,也会依据当前功能组件相对应的所述的资源映射表,根据其中各个映射关系数据确定所指向的相应的引用资源,将这些引用资源直接打包成zip格式的文件,获得资源补丁包。
128.步骤s1320、删除当前功能组件之外的其他功能组件相对应的代码文件,以净化当前功能组件的代码文件:
129.由于编译产物中包括了当前功能组件之外的产物,故需要在工程项目的编译产物中执行过滤操作,将属于其他功能组件的编译产物删除,仅保留属于当前功能组件的代码文件。
130.步骤s1330、将当前功能组件的代码文件打包为程序补丁包:
131.在编译产物得到净化的基础上,便将当前功能组件相对应的代码文件打包成apk格式的程序补丁包。理论上,本领域技术人员可以按需对程序补丁包进行签名、混淆或者加密,但考虑到本地测试的实际需求,可以省去这些安全措施,以便提升测试效率。
132.本实施例进一步揭示了功能组件的程序补丁包及资源补丁包的形成过程,通过此处的介绍可以理解,本技术只需在既有的开发环境中对工程项目的编译产物稍做过滤,即可制备本地测试所需的相关补丁包,容易高效实现。
133.请参阅图6,较佳的实施例中,所述步骤s1400,包括如下步骤:
134.步骤s1410、调用受测设备所安装的操作系统的调试工具的连接指令建立当前设备与受测设备之间的数据通信连接:
135.所述的调试工具,是受测设备所安装运行的操作系统提供的,可以在主控服务器中调用这些调试工具所提供的所述设备调试指令,来建立主控服务器与受测设备之间的通信链路,实现在主控服务器中控制所述的受测设备。不同的终端设备操作系统提供的系统调试工具不同,对于android操作系统而言,其为主控服务器提供adb调试工具来建立该主控服务器对受测设备的调试控制。
136.adb(android debug bridge)是一个通用命令行工具,其允许充当主控服务器的计算机与模拟器实例或与该计算机连接的android设备进行通信,可为这些android设备的管理和操作提供便利,如安装和调试受测设备上的应用程序等。关于利用adb所具有的设备调试命令与android设备进行通信的具体操作方式,属于本领域技术人员熟知的技术内容,故此处恕不赘述。此外,其他不同的操作系统,一般也会提供类似的命令行工具,以便为充当主控服务器的计算机提供可操控运行该操作系统的终端设备的手段。
137.在通信媒介上,目前多采用usb之类的数据线将所述的主控服务器与所述的受测设备直连的方式来实现,这些系统调试工具理论上也可在主控服务器与终端设备之间建立无线连接或者基于公共网络远程连接的情况下发挥作用,无论如何,主控服务器与受测设备可以通过彼此约定的某个端口构造形成通信链路,必要时结合端口重定位手段,来畅通主控服务器与终端设备双方的数据通信。
138.为了实现主控服务器与受测设备之间的数据通信连接,具体而言,可以通过调试工具提供的连接指令来实施,关于adb的具体连接指令的名称及其用法,本领域技术人员均知晓,恕不赘述。
139.步骤s1420、调用所述调试工具的传输指令向受测设备的预定路径推送所述的程序补丁包与资源补丁包:
140.在主控服务器与受测设备之间基于adb建立数据通信连接之后,便可向将主控服务器上产生的程序补丁包及资源补丁包推送到受测设备的预定路径中。所述的预定路径,一般是开发人员指定的路径,并且已经写入宿主应用程序中,为该宿主应用程序可以为获取补丁包的目的而默认访问的路径。基于adb调试工具,可在主控服务器侧调用adb push命名作为所述的传输指令,来实现将所述程序补丁包和资源补丁包推送到所述的预定路径中。
141.步骤s1430、调用所述调试工具的驱动指令驱动受测设备运行目标宿主程序,以在受测设备启动目标宿主程序时,由目标宿主程序加载所述程序补丁包及资源补丁包而添加该功能组件:
142.当确认所述安装包已经被受测设备成功接收之后,可以进一步借助系统调试工具调用驱动指令,驱动受测设备启动目标宿主程序,由宿主应用程序在启动过程中加载所述的程序补丁包及资源补丁包,从而实现本技术的当前功能组件的加载。
143.具体而言,在受测设备已经安装了本技术的目标宿主程序(即所述的宿主应用程序)的基础上,便可由主控服务器控制受测设备启动该目标宿主程序。举例而言,对于受测设备运行android操作系统的情况,可以通过adb start这一设备调试指令来驱动受测设备启动该目标宿主程序。
144.本实施例进一步揭示本技术仅依据受测设备操作系统提供的调试工具便可逐步完成所述程序补丁包、资源补丁包的传输和安装的过程,整个过程均可本地化实现,而位于受测设备中的宿主应用程序由于其已经内置了加载所述程序补丁包和资源补丁包的内在业务逻辑,因此,当其被驱动运行之后,便可根据该内存业务逻辑自行加载相应的功能组件,从而无需重新安装宿主应用程序,仅需由其自行加载,即可完成向宿主应用程序中植入新的功能组件配合进行测试,整个过程非常简便,且宿主应用程序也可节省验证量,整体上非常高效,有利于提升涉及功能组件的调试效率。
145.请参阅图7,较佳的实施例中,所述步骤s1400中,目标宿主程序加载所述程序补丁包及资源补丁包而添加该功能组件的过程,包括如下步骤:
146.步骤s2100、获取目标宿主程序自身的程序安装包及其程序资源包:
147.目标宿主程序,即运行于受测设备的被测试的宿主应用程序,开发人员预先在宿主应用程序中植入了自动搜索并加载本技术的功能组件的业务逻辑,因此,当其在安卓系统中被启动时,便优先执行搜索功能组件相对应的资源补丁包及宿主应用程序自身携带的程序资源包的业务逻辑,当两者对应存在于预定路径中时,便可确认接收到功能组件的完整数据,据此可继续其将该功能组件加载到其进程的业务逻辑。
148.步骤s2200、将所述程序资源包与所述预定路径中的资源补丁包合并为宿主资源包:
149.所述的程序资源包,是宿主应用程序已携带的所有资源的集合,受测设备中可能存在其相对应的包文件,也可能是散见存储于其相关联的一个或数个路径,总之,宿主应用程序可以获取这些资源的集合,构成所述的程序资源包。
150.为了确保后续将加载的功能组织能够正常使用其引用资源,宿主应用程序需要将所述资源补丁包与所述程序资源包进行合并,以便完善宿主应用程序所携带的所有资源,由此便构成用于替换所述程序资源包的新的宿主资源包。
151.请参阅图8,进一步具体化的实施例中,本步骤可细化为包括如下步骤:
152.步骤s2210、解压缩所述程序资源包获得其中的资源构成第一资源文件集:
153.如果受测设备中存在以实体文件存储的所述程序资源包,将所述程序资源包解压缩到一个临时目录中,获得其中的资源,这些资源构成第一资源文件集。
154.步骤s2220、解压所述预定路径中的资源补丁包获得其中的资源构成第二资源文件集:
155.同理,将所述资源补丁包解压出来构成第二资源文件集,存储到同一临时目录中。
156.步骤s2230、将第一资源文件集与第二资源文件集在同一目录下压缩为新的压缩文件,构成所述的宿主资源包。
157.同一临时目录之下,存在着所述第一资源文件集与第二资源文件集,因此,可直接对该临时目录下的所有资源进行压缩,获得新的压缩文件,该文件便构成新的宿主资源包。
158.步骤s2300、重新创建并替换目标宿主程序的资源管理器,将其配置为优先加载所
述宿主资源包:
159.适应安卓系统的特点,目标宿主程序会构造一个资源管理器,以便访问其所携带的所有资源,因此,适应宿主资源包的更新,需要重新创建新的资源管理器实现替换,并且将该资源管理器配置为优先加载所述的宿主资源包,由此,当新的资源管理器响应资源调用时,其首先从宿主资源包中加载相应的资源,确保对引用资源的调用正常。
160.步骤s2400、调用类加载器加载程序安装包及程序补丁包中的所有功能组件:
161.完成资源准备之后,便可按照安卓系统加载应用程序的固有逻辑,调用类加载器classloader进行类加载,将宿主应用程序程序安装包原有的类,以及所述功能组件相应的程序补丁包中的类加载到虚拟机中,实现将功能组件添加到宿主应用程序中参与测试。
162.本实施例进一步揭示被测试的宿主应用程序如何高效地实现功能组件的加载,可以看出,由于宿主应用程序具备自动加载功能组件的功能,因此,本技术只需在主控服务器向受测设备传输所述的功能组件相应的程序补丁包及资源补丁包,便可由宿主应用程序据此自动加载所述的功能组件,全程自动实现,无需人工干预,非常高效快速。每次需要为宿主应用程序添加新的功能组件时,均可以这种方式实施,对于同一功能组件在不同宿主应用程序中进行批量测试的情况来说,更显高效。
163.进一步,可以通过将上述各实施例所揭示的方法中的各个步骤进行功能化,构造出本技术的一种程序组件调试更新装置,按照这一思路,请参阅图9,其中的一个典型实施例中,该装置包括资源确定模块1100、映射更新模块1200、编译生成模块1300,以及更新推送模块1400,其中:所述资源确定模块1100,用于根据功能组件的资源依赖关系信息,确定其引用资源,所述引用资源包括该功能组件开放给外部引用的目标资源及其自身需引用的外部资源;所述映射更新模块1200,用于创建并替换已有的资源映射表,该资源映射表包含所述引用资源的资源特征与资源名称之间的映射关系数据;所述编译生成模块1300,用于编译功能组件相对应的工程项目,生成该功能组件的程序补丁包及资源补丁包,该资源补丁包存储所述资源映射表所指向的引用资源;所述更新推送模块1400,用于将所述程序补丁包及资源补丁包推送至受测设备的预定路径,以在受测设备启动目标宿主程序时,由目标宿主程序加载所述程序补丁包及资源补丁包而添加该功能组件。
164.具体化的实施例中,所述资源确定模块1100包括:确定自带子模块,用于根据功能组件声明开放的访问接口的代码信息所表述的资源依赖关系信息,确定该功能组件开放给外部引用的自带资源;自带过滤子模块,用于针对所述自带资源,确定其中未记录在旧有的资源映射表中的自带资源构成该功能组件开放给外部引用的目标资源;确定外部子模块,用于根据功能组件调用外部访问接口的代码信息所表述的资源依赖关系信息,确定该功能组件自身需引用的外部资源;资源集合子模块,用于将所述目标资源与所述外部资源构造为资源集合,以表征该功能组件的引用资源。
165.具体化的实施例中,所述映射更新模块1200包括:空表创建子模块,用于创建新的资源映射表;复制转移子模块,用于将旧有的资源映射表中所述外部资源的资源名称与资源特征之间映射关系数据复制到新的资源映射表中;添加补全子模块,用于将所述目标资源的资源名称及为其生成的资源特征之间的映射关系数据存储至新的资源映射表中;存储替换子模块,用于存储所述新的资源映射表以同名替换所述旧有的资源映射表。
166.具体化的实施例中,所述编译生成模块1300包括:编译启动子模块,用于启动对当
前功能组件相对应的工程项目的编译,以生成工程项目相关联的代码文件及资源补丁包,该资源补丁包存储所述资源映射表所指向的引用资源;代码净化子模块,用于删除当前功能组件之外的其他功能组件相对应的代码文件,以净化当前功能组件的代码文件;补丁打包子模块,用于将当前功能组件的代码文件打包为程序补丁包。
167.较佳的实施例中,所述更新推送模块1400包括:连接建立子模块,用于调用受测设备所安装的操作系统的调试工具的连接指令建立当前设备与受测设备之间的数据通信连接;文件推送子模块,用于调用所述调试工具的传输指令向受测设备的预定路径推送所述的程序补丁包与资源补丁包;驱动更新子模块,用于调用所述调试工具的驱动指令驱动受测设备运行目标宿主程序,以在受测设备启动目标宿主程序时,由目标宿主程序加载所述程序补丁包及资源补丁包而添加该功能组件。
168.较佳的实施例中,目标宿主程序加载所述程序补丁包及资源补丁包而添加该功能组件的过程,被配置为实现如下功能:获取目标宿主程序自身的程序安装包及其程序资源包;将所述程序资源包与所述预定路径中的资源补丁包合并为宿主资源包;重新创建并替换目标宿主程序的资源管理器,将其配置为优先加载所述宿主资源包;调用类加载器加载程序安装包及程序补丁包中的所有功能组件。
169.具体化的实施例中,将所述程序资源包与所述预定路径中的资源补丁包合并为宿主资源包,被配置为实现如下功能:解压缩所述程序资源包获得其中的资源构成第一资源文件集;解压所述预定路径中的资源补丁包获得其中的资源构成第二资源文件集;将第一资源文件集与第二资源文件集在同一目录下压缩为新的压缩文件,构成所述的宿主资源包。
170.为解决上述技术问题,本技术实施例还提供计算机设备。如图10所示,计算机设备的内部结构示意图。该计算机设备包括通过系统总线连接的处理器、非易失性存储介质、存储器和网络接口。其中,该计算机设备的非易失性存储介质存储有操作系统、数据库和计算机可读指令,数据库中可存储有控件信息序列,该计算机可读指令被处理器执行时,可使得处理器实现一种程序组件调试更新方法。该计算机设备的处理器用于提供计算和控制能力,支撑整个计算机设备的运行。该计算机设备的存储器中可存储有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器执行本技术的程序组件调试更新方法。该计算机设备的网络接口用于与终端连接通信。本领域技术人员可以理解,图9中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
171.本实施方式中处理器用于执行图9中的各个模块及其子模块的具体功能,存储器存储有执行上述模块或子模块所需的程序代码和各类数据。网络接口用于向用户终端或服务器之间的数据传输。本实施方式中的存储器存储有本技术的程序组件调试更新装置中执行所有模块/子模块所需的程序代码及数据,服务器能够调用服务器的程序代码及数据执行所有子模块的功能。
172.本技术还提供一种存储有计算机可读指令的存储介质,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行本技术任一实施例的程序组件调试更新方法的步骤。
173.本领域普通技术人员可以理解实现本技术上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(read

only memory,rom)等非易失性存储介质,或随机存储记忆体(random access memory,ram)等。
174.综上所述,本技术通过将功能组件编译为相应补丁包发送给受测设备的目标宿主程序自动加载实现程序测试,简化了测试操作流程,可避免因新增功能组件而频繁重装目标宿主程序的麻烦,提升了测试效率。
175.本技术领域技术人员可以理解,本技术中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本技术中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本技术中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
176.以上所述仅是本技术的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本技术的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1