CN111435312B - 应用程序管理方法、装置及电子设备 - Google Patents
应用程序管理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN111435312B CN111435312B CN201910038092.5A CN201910038092A CN111435312B CN 111435312 B CN111435312 B CN 111435312B CN 201910038092 A CN201910038092 A CN 201910038092A CN 111435312 B CN111435312 B CN 111435312B
- Authority
- CN
- China
- Prior art keywords
- managed
- class file
- application program
- file
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种应用程序管理方法、装置及电子设备,其中,所述方法包括:获取待管理应用程序的class文件;基于目标插件获取所述待管理应用程序的更新配置文件,所述更新配置文件中包括处理内容及配置规则,所述配置规则定义了所述处理内容的处理方式;基于所述目标插件根据所述配置规则从所述待管理应用程序的class文件查找目标class文件;基于所述目标插件查找所述目标class文件在所述待管理应用程序中对应的源代码的位置;基于所述目标插件根据所述处理内容处理所述目标class文件中对应的源代码的位置的代码。通过插件可以执行一些待管理应用程序中的更改处理达到快速地实现对待管理应用程序的更改处理的效果。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种应用程序管理方法、装置及电子设备。
背景技术
现在的应用程序的功能越来越多,导致应用程序的代码规模也越来越大,因此,对应用程序的更新管理操作也越来越麻烦。如果需要对应用程序的代码进行更新时,需要找到代码的对应位置,然后对对应位置的代码进行修改,这样的操作会比较麻烦,浪费开发人员的时间。
发明内容
有鉴于此,本申请实施例的目的在于提供一种应用程序管理方法、装置及电子设备,能够通过在开发应用程序中运行有目标插件,通过插件可以执行一些待管理应用程序中的更改处理解决现有技术中存在的需要开发人员找到代码的对应位置,然后减少需要对应位置的代码进行修改时所带来的操作麻烦的问题,达到有效快速地实现对待管理应用程序的更改处理的效果。
根据本申请的一个方面,提供一种电子设备,可以包括一个或多个存储介质和一个或多个与存储介质通信的处理器。一个或多个存储介质存储有处理器可执行的机器可读指令。当电子设备运行时,处理器与存储介质之间通过总线通信,处理器执行所述机器可读指令,以执行一个或多个以下操作:
获取待管理应用程序的class文件;
基于目标插件获取所述待管理应用程序的更新配置文件,所述更新配置文件中包括处理内容及配置规则,所述配置规则定义了所述处理内容的处理方式;
基于所述目标插件根据所述配置规则从所述待管理应用程序的class文件查找目标class文件;
基于所述目标插件查找所述目标class文件在所述待管理应用程序中对应的源代码的位置;
基于所述目标插件根据所述处理内容处理所述目标class文件中对应的源代码的位置的代码。
本申请实施例提供的应用程序管理方法,采用在开发应用程序中置入一插件,在需要对待管理应用程序的代码进行处理时使用插件进行统一处理,从而提高待管理应用程序的管理效率。进一步地,本申请实施例中基于配置文件对待管理应用程序的代码进行处理。
在一些实施例中,所述基于所述目标插件根据所述处理内容处理所述目标class文件中对应的源代码的位置的代码的步骤,包括:
使用所述更新配置文件中的处理内容替换所述源代码的位置的代码;或/及,
将所述更新配置文件中的处理内容插入所述源代码的位置;或/及,
将所述更新配置文件中的处理内容置入所述源代码的位置的对应代码的前面和后面。
本实施例中,根据所述处理内容处理所述待管理应用程序的class文件中对应的源代码的位置的代码可以通过多种不同的方式进行处理,可以实现对不同的需求进行处理需求。例如,通过替换的方式可以实现对一些旧的处理方式统一替换,实现快速的处理代码。
在一些实施例中,所述基于所述目标插件根据所述处理内容处理所述目标class文件中对应的源代码的位置的代码步骤之后,包括:
对更新后的所述待管理应用程序的代码进行编译,得到处理后的class文件。
在一些实施例中,所述对更新后的所述待管理应用程序的代码进行编译,得到处理后的class文件的步骤,包括:
若所述更新配置文件包括新增内容,则对更新后的所述待管理应用程序的全部工程模块进行编译,得到处理后的class文件。
本实施例中,如果配置文件有新增内容可能导致待管理应用程序的整套流程存在更改,则针对更新后的所述待管理应用程序的全部工程模块进行编译,可以减少错误输出。
在一些实施例中,所述对更新后的所述待管理应用程序的代码进行编译,得到处理后的class文件的步骤,包括:
若所述更新配置文件不存在新增内容,且所述待管理应用程序的class文件中包括新增class文件,则对更新后的所述待管理应用程序的中存在更改的部分工程模块进行编译,得到处理后的class文件。
本实施例中,如果只是增加了新的工程模块,并没有对配置进行更改,则可以仅对存在更改的部分工程模块进行编译,可以减少编译消耗的时间。
在一些实施例中,所述对更新后的所述待管理应用程序的代码进行编译,得到处理后的class文件的步骤,包括:
对所述更新后的所述待管理应用程序的代码对应更新的目标工程模块的代码进行编译处理;
对所述目标工程模块对应的依赖工程模块进行编译处理。
在一些实施例中,所述配置规则中包括class文件类别筛选条件;所述基于所述目标插件根据所述配置规则从所述待管理应用程序的class文件查找目标class文件的步骤包括:
基于所述目标插件根据所述class文件类别筛选条件从所述待管理应用程序的class文件中筛选出目标class文件。
在一些实施例中,所述class文件类别筛选条件包括:可选条件及限定条件,所述可选条件用于选出需处理class文件,所述限定条件用于剔除不处理的class文件。
在一些实施例中,所述目标插件运行在一开发应用程序中,所述获取待管理应用程序的class文件的步骤,包括:
所述开发应用程序对所述待管理应用程序的代码进行编译后,得到待管理应用程序的原始class文件,编译接收到的输入的新增的功能代码得到的新增class文件;或,
所述开发应用程序对所述待管理应用程序的代码进行编译后,得到待管理应用程序的class文件。
在一些实施例中,所述基于目标插件获取所述待管理应用程序的更新配置文件的步骤,包括:
接收输入的处理内容或/及更新配置规则;
将所述处理内容或/及所述更新配置规则写入原始配置文件中,得到更新配置文件。
在另一方面,本申请实施例还提供一种应用程序管理装置,包括:
第一获取模块,用于获取待管理应用程序的class文件;
第二获取模块,用于基于目标插件获取所述待管理应用程序的更新配置文件,所述更新配置文件中包括处理内容及配置规则,所述配置规则定义了所述处理内容的处理方式;
第一查找模块,用于基于所述目标插件根据所述配置规则从所述待管理应用程序的class文件查找目标class文件;
第二查找模块,用于基于所述目标插件查找所述目标class文件在所述待管理应用程序中对应的源代码的位置;
处理模块,用于基于所述目标插件根据所述处理内容处理所述目标class文件中对应的源代码的位置的代码,得到处理后的class文件。
在一些实施例中,还包括:编译模块,用于:
对更新后的所述待管理应用程序的代码进行编译,得到处理后的class文件。
在一些实施例中,所述编译模块,还用于:
若所述更新配置文件包括新增内容,则对更新后的所述待管理应用程序的全部工程模块进行编译,得到处理后的class文件。
在一些实施例中,所述编译模块,还用于:
若所述更新配置文件不存在新增内容,且所述待管理应用程序的class文件中包括新增class文件,则对更新后的所述待管理应用程序的中存在更改的部分工程模块进行编译,得到处理后的class文件。
在一些实施例中,所述编译模块,还用于:
对所述更新后的所述待管理应用程序的代码对应更新的目标工程模块的代码进行编译处理;
对所述目标工程模块对应的依赖工程模块进行编译处理。
在一些实施例中,所述处理模块,还用于:
使用所述更新配置文件中的处理内容替换所述源代码的位置的代码;或/及,
将所述更新配置文件中的处理内容插入所述源代码的位置;或/及,
将所述更新配置文件中的处理内容置入所述源代码的位置的对应代码的前面和后面。
在一些实施例中,所述配置规则中包括class文件类别筛选条件;所述第一查找模块,还用于:
基于所述目标插件根据所述class文件类别筛选条件从所述待管理应用程序的class文件中筛选出目标class文件。
在一些实施例中,所述class文件类别筛选条件包括:可选条件及限定条件,所述可选条件用于选出需处理class文件,所述限定条件用于剔除不处理的class文件。
在一些实施例中,所述目标插件运行在一开发应用程序中,所述第一获取模块,还用于:
所述开发应用程序对所述待管理应用程序的代码进行编译后,得到待管理应用程序的原始class文件,编译接收到的输入的新增的功能代码得到的新增class文件;或,
所述开发应用程序对所述待管理应用程序的代码进行编译后,得到待管理应用程序的class文件。
在一些实施例中,所述第二获取模块,还用于:
接收输入的处理内容或/及更新配置规则;
将所述处理内容或/及所述更新配置规则写入原始配置文件中,得到更新配置文件。
在另一方面,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述任一种可能的实施方式中应用程序管理方法的步骤。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例所提供的一种电子设备的结构示意图
图2示出了本申请实施例所提供的一种应用程序管理方法的流程图;
图3示出了本申请实施例所提供的应用程序管理方法的数据走向流程图;
图4示出了本申请实施例所提供的一种应用程序管理装置的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。
随着Android应用功能的不断增加和完善,各个应用程序的代码规模也越来越大,每个版本的应用程序都可能会有大量的代码变更。开发人员如何对应用程序的大量的代码做到有效处理,处理内容可以包括:代码替换、代码插入、代码优化、耗时统计等。经发明人研究,如果采用面向切面编程(Aspect-Oriented Programming,英文简称:AOP)的编程思想,把需要更改的代码进行统一处理,则相对更加容易对应用程序的代码实现管理。
因此,发明人对AOP方案进行研究,发现现有的AOP方案存在一些不满足需求的问题。现有的AOP方案包括:AspectJ、cglib、Javassist等方案。AspectJ提供了强大的切点定义语法,可以实现在代码编译期间,将代码插入到目标代码的前面或者后面。但是,如果需要对应用程序中的一段代码进行更改时,则需要编辑应用程序中的具体代码,才能够实现修改。Cglib通过方法拦截的方式,织入横切逻辑。但是Cglib在android中是不能使用的,由于Cglib底层是采用ASM字节码生成框架,使用字节码技术生成代理类,在android中加载的是优化后的.dex文件。Javassist是一个开源的分析、编辑和创建Java字节码的类库。但是要想在Android中使用Javassist来实现AOP功能,需要自定义gradle plugin,需要对Gradle语法有一定的了解,因此使用成本高。
基于此,针对以上问题,发明人进一步地研究借鉴了AspectJ的切点语法,形成了一套基于Javassist的字节码操作方案,提供了一种轻量级的,无侵入的方式,不需要复杂的逻辑,可以通过一个可扩展标记语言(Extensible Markup Language,英文简称:XML)配置文件配置字节码处理规则,不用修改源代码就可以实现对目标class的批量修改。本申请实施例中提供的适用于Android平台的字节码修改的方法,通过启动插件,插件按照对应的配置文件中的配置规则执行代码的更改。本申请实施例中的方法通过提供一个配置文件,通过对配置文件的更改实现配置化,从而有效地实现代码的更改、代码执行耗时统计、添加TryCatch等功能。其中,Try-Catch表示Java语言中的异常处理机制。
基于上述描述,本申请实施例通过以下几个实施例,对本申请的改进进行详细描述。
实施例一
图1示出根据本申请的一些实施例的可以实现本申请思想的电子设备100的示例性硬件和软件组件的示意图。例如,处理器可以用于电子设备100上,并且用于执行本申请中的功能。
电子设备100可以是通用计算机或特殊用途的计算机,两者都可以用于实现本申请的应用程序管理方法。本申请尽管仅示出了一个计算机,但是为了方便起见,可以在多个类似平台上以分布式方式实现本申请描述的功能,以均衡处理负载。
例如,电子设备100可以包括连接到网络的网络端口110、用于执行程序指令的一个或多个处理器120、通信总线130、和不同形式的存储介质140,例如,磁盘、ROM、或RAM,或其任意组合。示例性地,计算机平台还可以包括存储在ROM、RAM、或其他类型的非暂时性存储介质、或其任意组合中的程序指令。根据这些程序指令可以实现本申请的方法。电子设备100还包括计算机与其他输入输出设备(例如键盘、显示屏)之间的输入/输出(Input/Output,I/O)接口150。
上述的存储介质140中可以存储有应用程序管理装置160,该应用程序管理装置中的各个模块用于执行本申请实施例提供的应用程序管理方法中的各个步骤。
为了便于说明,在电子设备100中仅描述了一个处理器。然而,应当注意,本申请中的电子设备100还可以包括多个处理器,因此本申请中描述的一个处理器执行的步骤也可以由多个处理器联合执行或单独执行。例如,若电子设备100的处理器执行步骤A和步骤B,则应该理解,步骤A和步骤B也可以由两个不同的处理器共同执行或者在一个处理器中单独执行。例如,第一处理器执行步骤A,第二处理器执行步骤B,或者第一处理器和第二处理器共同执行步骤A和B。
实施例二
本实施例提供一种应用程序管理方法。本实施例中的方法可以由图1所示的电子设备执行。图2示出了本申请一个实施例中的应用程序管理方法的流程图。下面对图2所示的应用程序管理方法的流程进行详细描述。
步骤S201,获取待管理应用程序的class文件。
在执行本实施例中的应用程序管理方法之前,可以先启动目标插件。
可选地,可以在对待管理应用程序的代码,或者应用程序的局部功能的代码进行编译时,启动上述的目标插件。也可以是在对待管理应用程序的代码,或者应用程序的局部功能的代码进行编译后,启动上述的目标插件。还可以是在启动用于开发待管理应用程序的代码,或者应用程序的局部功能的代码的开发软件启动时启动。
进一步地,上述的class文件可以是由待管理应用程序的对应的Java或kotlin语言编译生成的二进制文件。
在一些实施例中,如果需要新增工程模块,则可以在待管理应用程序的源代码的已经有的class文件的基础上写入新的工程代码,并进行编译可以得到新增的class文件。上述的步骤S201可以包括:开发应用程序对所述待管理应用程序的代码进行编译后,得到待管理应用程序的原始class文件,编译接收到的输入的新增的功能代码得到的新增class文件。
在一些实施例中,如果仅是对原来的工程模块中的内容进行替换修改等操作时,则不需要新增待管理应用程序的class文件。上述的步骤S201也可以包括:所述开发应用程序对所述待管理应用程序的代码进行编译后,得到待管理应用程序的class文件。
上述的待管理应用程序的class文件可以是上述的待管理应用程序中需要更新的部分功能的class文件。也可以是待管理应用程序目前已有的全部class文件。
可选地,上述的目标插件运行在一开发应用程序中,上述的待管理应用程序的class文件可以由上述的开发应用程序对待管理应用程序中需要更新的部分功能的代码进行编译得到;上述的待管理应用程序的class文件可以由上述的开发应用程序对待管理应用程序的所有代码进行编译得到。
上述的启动目标插件和步骤S201的执行顺序可以不限,可选地,启动目标插件和步骤S201可以同时执行,启动目标插件可以在步骤S201之前执行,启动目标插件也可以在步骤S201之后执行。
步骤S202,基于目标插件获取所述待管理应用程序的更新配置文件。
步骤S202可以包括:接收输入的处理内容或/及更新配置规则;将所述处理内容或/及所述更新配置规则写入原始配置文件中,得到更新配置文件。
具体地,可以提供用于接收更新配置时所需的输入的数据的写入窗口,该写入窗口接收到用户(可以是开发人员)输入的配置规则和/或处理内容。
可选地,可以仅写入了处理内容;也可以仅写入了更新规则;还可以即写入了处理内容也可以写入了更新规则。
进一步地,写入的处理内容可以对应有该处理内容对应的更新规则,例如,该代码替换原代码中的哪一段代码等。
上述的更新配置文件可以是可扩展标记语言(Extensible Markup Language,英文简称:XML)配置文件。
在需要更新配置文件时,可以启动一接收更新的配置的输入窗口,该窗口用于接收满足XML的输入数据,将输入数据作为配置文件中的配置规则。
上述的步骤S201和步骤S202的执行顺序并不以图2所示的顺序为限。在实际执行中,可以步骤S202可以在步骤S201之前执行。
步骤S203,基于所述目标插件根据所述配置规则从所述待管理应用程序的class文件查找目标class文件。
步骤S203可以包括:从所述待管理应用程序的class文件筛选出设定的可处理类别的目标class文件。
上述的配置规则中包括class文件类别筛选条件;上步骤S203可以包括:基于所述目标插件根据所述class文件类别筛选条件从所述待管理应用程序的class文件中筛选出目标class文件。
上述class文件类别筛选条件包括:可选条件及限定条件,所述可选条件用于选出需处理class文件,所述限定条件用于剔除不处理的class文件。
在一个实例中,上述的可选条件可以是所有包括设定输出的class文件。上述的剔除条件可以是剔除设定的几个工程中的class文件。具体地,上述的可选条件对应的class文件可能包括剔除条件对应的class文件。因此,通过两个条件:可选条件及限定条件,可以使用户能够更好地实现对class文件的筛选。
上述的可选条件可以是用于筛选出上述的更新配置文件中的处理内容对应的class文件。
在一个实例中,上述的处理内容可以包括需要将源代码中的输出“hello”修改成“world”的替换代码“world”相关代码。上述的可选条件则可以是用于筛选出包括“hello”相关内容的class文件。
上述的限定条件可以是用于剔除一些不需要处理的class文件。
上述的限定条件可以用于对上述的可选条件筛选出的包括“hello”相关内容的class文件进行进一步地筛选。
步骤S204,基于所述目标插件查找所述目标class文件在所述待管理应用程序中对应的源代码的位置。
确定需要处理的class文件可以先根据配置规则筛选出需要处理的class文件,再根据需要处理的class文件确定出对应在待管理应用程序的源代码中的位置。
由于上述的class文件是由应用程序的源代码编译得到的,因此,通过确定出来的目标class文件,则可以找该目标class文件在源代码中的位置。
步骤S205,基于所述目标插件根据处理内容处理所述目标class文件中对应的源代码的位置的代码。
上述的处理内容表示上述的更新配置文件中的处理内容。
本实施例中的应用程序管理方法可以用于开发应用程序中,该开发应用程序中运行有一目标插件。
可选地,上述的目标插件中可以封装有多中处理源代码的处理方式,其中可以包括:代码替换、代码环绕、代码增强及代码插入等方式。
上述的代码替换可以包括:构造方法调用替换、构造方法执行替换、字段读写替换、静态代码执行替换、方法调用替换及方法执行替换等。
上述的代码环绕可以包括:构造方法调用环绕、构造方法执行环绕、字段读写环绕、静态代码执行环绕、方法调用环绕及方法执行环绕等。
上述的代码增强可以包括:构造方法调用耗时统计、构造方法执行耗时统计、静态代码执行耗时统计、方法调用耗时统计、方法执行耗时统计、构造方法调用Try-catch、构造方法执行Try-catch、静态代码执行Try-catch、方法调用Try-catch、方法执行Try-catch等。
上述的代码插入可以包括:构造方法调用插入、构造方法执行插入、字段读写插入、静态代码执行插入、方法调用插入及方法执行插入等。
进一步地,目标插件中封装的多中处理源代码的处理方式可以是通过对Javassist进行二次封装实现的。
上述的处理内容更新所述源代码的位置对应的代码的处理方式可以有多种。具体地,可以根据配置规则进行更新。若配置规则中是使用代码替换的方式更新,则可以调用目标插件中封装的代码替换对应的多种处理方式中的一种方式执行更新动作。
针对不同的处理方式,上述的步骤S205的实现方式可以不同。
在一种实施方式中,若在执行待管理应用程序的代码时,对应的更新配置规则中是使用代码替换的方式更新,则步骤S205可以包括:使用所述更新配置文件中的处理内容替换所述源代码的位置的代码。在一些实例中,可以是针对输出结果的更新,例如,当前应用程序中的一些工程模块的输出是“hello”需要更改为“world”。则可以使用处理内容“world”替换源代码中的对应位置的“hello”。
在一种实施方式中,若在执行待管理应用程序的代码时,对应的更新配置规则中是使用代码插入的方式更新,则步骤S205可以包括:将所述更新配置文件中的处理内容插入所述源代码的位置。
在一种实施方式中,若在执行待管理应用程序的代码时,对应的更新配置规则中是使用代码增强的方式更新,则步骤S205可以包括:将所述更新配置文件中的处理内容插入所述源代码的位置。具体地,插入的处理内容可以是用于统计构造方法调用、构造方法执行、静态代码执行、方法调用及方法执行耗时情况的处理内容;也可以是用于针对构造方法调用、构造方法执行、静态代码执行、方法调用、方法执行等的Try-catch异常处理机制的处理内容。
在一种实施方式中,若在执行待管理应用程序的代码时,对应的更新配置规则中是使用代码环绕的方式更新,则步骤S205可以包括:将所述更新配置文件中的处理内容置入所述源代码的位置的对应代码的前面和后面。
本申请实施例提供的目标插件具有轻量,简单易用,无侵入,可配置化的特点。在需要对待管理应用程序进行更新时的开发者只需要引入相应的目标插件,然后,对目标插件的配置文件进行需要的配置,就可以实现代码修改、代码插入、代码耗时统计等功能。
上述的更新配置文件包括处理内容以及配置规则,步骤S205之后还可以包括:步骤S206(图未示),对更新后的所述待管理应用程序的代码进行编译,得到处理后的class文件。
上述的目标插件中封装了多种用于处理待管理应用程序的代码的方法。
进一步地考虑,由于更新的内容的不同,可能会导致需要调整的待管理应用程序中范围不同。针对更新配置文件中更新内容的不同,可以选择不同的方式执行步骤S205。由于配置文件中有新增内容,则会导致上次的构建缓存完全失效,所以可以进行全量构建,全部编译的方式更新应用程序中的所有代码。如果只修改了配置,例如新增了功能模块,只是修改了工程中的代码或者依赖。虽然本申请实施例相对其他AOP方案更加轻量,占用构建时间较少,但是为了给开发者提供更加良好的构建体验,本申请针对代码更新后的编译处理采用了增量构建的方式。
在一种实施方式中,上述的更新配置文件中中存在新增内容,步骤S205:若所述更新配置文件包括新增内容,则对更新后的所述待管理应用程序的全部工程模块进行编译,得到处理后的class文件。
在一种实施方式中,若所述更新配置文件不存在新增内容,且所述待管理应用程序的class文件中包括新增class文件,步骤S205:对更新后的所述待管理应用程序的中存在更改的部分工程模块进行编译,得到处理后的class文件。
上述的对更新后的所述待管理应用程序的中存在更改的部分工程模块进行编译,得到处理后的class文件可以包括:对所述更新后的所述待管理应用程序的代码对应更新的目标工程模块的代码进行编译处理;对所述目标工程模块对应的依赖工程模块进行编译处理。
具体地,如果需要重新处理的class文件包含两部分:1.本工程代码,对应于Dirclass的处理;2.本工程的依赖(包含jar依赖和aar依赖,由于aar依赖的class包含在jar中,因此可以统称为jar class),对应于Jar class处理。
下面以管理应用程序(Application,英文简称:App)日志为例,可以通过代码替换中的方法调用替换的方式,将原来不合理的日志输出方式,替换为自定义的日志输出方式,从而对整个待管理应用程序的日志进行管理。具体地,只需对配置文件进行更新操作,则待管理应用程序中原来所有通过Log.d方法进行日志输出,都可以变为指定的LogUtils.log方法进行日志输出。
在一个实例中,将原来的日志输出方法Log.d替换为LogUtils.log对应在配置文件的配置可以表示为:
其中,上述实例中,用于对“ZZZZ”应用的日志的输出的方法进行了替换。
上述实例中需要处理的class文件是需要满足在<Include>*</Include>限定范围内,且不在<Exclude>com.ZZZZ.tools.test.Utils</Exclude>、<Exclude>android.*</Exclude>、<Exclude>com.android.*</Exclude>对应限定的范围内的class文件。
下面在一个实例中,结合图3,描述在进行应用程序管理的全过程。
首先,启动开发应用程序,在该开发应用程序中插入上述的目标插件。在上述的目标插件的配置文件中写入用于更新的内容。其中,用于更新的内容可以包括配置规则、处理内容等。编译已经加载在上述的开发应用程序中的待管理应用程序的代码,得到该待管理应用程序的class文件。将上述的待管理应用程序的class文件使用Gradle Transform转换为dex文件。其中,Gradle Transform是Android官方提供给开发者在项目构建阶段即由class到dex转换期间修改class文件的一套api。在编译时或者在编译后可以启动已经插入在该开发应用程序中的目标插件。目标插件可以获取待管理应用程序的class文件和配置文件。目标插件中封装有过滤器Fliter,通过过滤器可以选出需要处理的目标class文件。具体地,过滤器通过配置文件(.config)中的配置规则可以从上述的待管理应用程序的class文件筛选出需要处理的目标class文件。然后,目标插件根据配置规则查找出目标class文件对应在该待管理应用程序的源代码的位置。然后,使用配置文件中的处理内容对该待管理应用程序的源代码的位置的相关代码进行处理。图3中示出了多种可以用于对代码进行处理的方式,其中,处理方式的集合(Transform collection)可以包括:Aroundtransform、EnhanceTransform、InsertTransform及ReplaceTransform等。最后,对处理完成后的该待管理应用程序的代码进行编译,得到处理后的class文件。
上述的使用所述更新配置文件中的处理内容更新所述源代码的位置对应的代码,得到更新程序代码可以包括:可以对待管理应用程序的源代码中的部分工程代码进行替换;也可以对待管理应用程序的源代码中的指定位置的前后增加处理内容,使处理内容环绕在指定位置的代码;还可以在待管理应用程序的源代码的设定位置插入处理内容;还可以在待管理应用程序的源代码增加一些增强功能。
实施例三
基于同一申请构思,本申请实施例中还提供了与应用程序管理方法对应的应用程序管理装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述应用程序管理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
图4是示出本申请的一些实施例的应用程序管理装置的框图,该应用程序管理装置实现的功能对应上述方法执行的步骤。该装置可以理解为上述服务器,或服务器的处理器,也可以理解为独立于上述服务器或处理器之外的在服务器控制下实现本申请功能的组件,如图4所示,应用程序管理装置可以包括:第一获取模块301、第二获取模块302、第一查找模块303、第二查找模块304及处理模块305,其中,
第一获取模块301,用于获取待管理应用程序的class文件;
第二获取模块302,用于基于目标插件获取所述待管理应用程序的更新配置文件,所述更新配置文件中包括处理内容及配置规则;
第一查找模块303,用于基于所述目标插件根据所述配置规则从所述待管理应用程序的class文件查找目标class文件;
第二查找模块304,用于基于所述目标插件查找所述目标class文件在所述待管理应用程序中对应的源代码的位置;
处理模块305,用于基于所述目标插件按照所述处理内容处理所述待管理应用程序的class文件中对应的源代码的位置的代码,得到处理后的class文件。
在一些实施例中,所述处理模块305,还用于:
使用所述更新配置文件中的处理内容替换所述源代码的位置的代码;或/及,
将所述更新配置文件中的处理内容插入所述源代码的位置;或/及,
将所述更新配置文件中的处理内容置入所述源代码的位置的对应代码的前面和后面。
在一些实施例中,所述编译模块306,还用于:
对更新后的所述待管理应用程序的代码进行编译,得到处理后的class文件。
在一些实施例中,所述编译模块306,还用于:
若所述更新配置文件包括新增内容,则对更新后的所述待管理应用程序的全部工程模块进行编译,得到处理后的class文件。
在一些实施例中,所述编译模块306,还用于:
若所述更新配置文件不存在新增内容,且所述待管理应用程序的class文件中包括新增class文件,则对更新后的所述待管理应用程序的中存在更改的部分工程模块进行编译,得到处理后的class文件。
在一些实施例中,所述编译模块306,还用于:
对所述更新后的所述待管理应用程序的代码对应更新的目标工程模块的代码进行编译处理;
对所述目标工程模块对应的依赖工程模块进行编译处理。
在一些实施例中,所述配置规则中包括class文件类别筛选条件;所述第一查找模块303,还用于:
基于所述目标插件根据所述class文件类别筛选条件从所述待管理应用程序的class文件中筛选出目标class文件。
在一些实施例中,所述class文件类别筛选条件包括:可选条件及限定条件,所述可选条件用于选出需处理class文件,所述限定条件用于剔除不处理的class文件。
在一些实施例中,所述第一获取模块301,还用于:
所述开发应用程序对所述待管理应用程序的代码进行编译后,得到待管理应用程序的原始class文件,编译接收到的输入的新增的功能代码得到的新增class文件;或,
所述开发应用程序对所述待管理应用程序的代码进行编译后,得到待管理应用程序的class文件。
在一些实施例中,所述第二获取模块302,还用于:
接收输入的处理内容或/及更新配置规则;
将所述处理内容或/及所述更新配置规则写入原始配置文件中,得到更新配置文件。
上述模块可以经由有线连接或无线连接彼此连接或通信。有线连接可以包括金属线缆、光缆、混合线缆等,或其任意组合。无线连接可以包括通过LAN、WAN、蓝牙、ZigBee、或NFC等形式的连接,或其任意组合。两个或更多个模块可以组合为单个模块,并且任何一个模块可以分成两个或更多个单元。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
此外,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的应用程序管理方法的步骤。
本申请实施例所提供的应用程序管理方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的应用程序管理方法的步骤,具体可参见上述方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考方法实施例中的对应过程,本申请中不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (22)
1.一种应用程序管理方法,其特征在于,包括:
获取待管理应用程序的class文件;
基于目标插件获取所述待管理应用程序的更新配置文件,所述更新配置文件中包括处理内容及配置规则,所述配置规则定义了所述处理内容的处理方式;
基于所述目标插件根据所述配置规则从所述待管理应用程序的class文件查找目标class文件;
基于所述目标插件根据所述配置规则查找所述目标class文件在所述待管理应用程序中对应的源代码的位置;
基于所述目标插件根据所述处理内容处理所述目标class文件中对应的源代码的位置的代码。
2.如权利要求1所述的方法,其特征在于,所述基于所述目标插件根据所述处理内容处理所述目标class文件中对应的源代码的位置的代码的步骤,包括:
使用所述更新配置文件中的处理内容替换所述源代码的位置的代码;或/及,
将所述更新配置文件中的处理内容插入所述源代码的位置;或/及,
将所述更新配置文件中的处理内容置入所述源代码的位置的代码的前面和后面。
3.如权利要求1所述的方法,其特征在于,所述基于所述目标插件根据所述处理内容处理所述目标class文件中对应的源代码的位置的代码的步骤之后,包括:
对更新后的所述待管理应用程序的代码进行编译,得到处理后的class文件。
4.如权利要求3所述的方法,其特征在于,所述对更新后的所述待管理应用程序的代码进行编译,得到处理后的class文件的步骤,包括:
若所述更新配置文件包括新增内容,则对更新后的所述待管理应用程序的全部工程模块进行编译,得到处理后的class文件。
5.如权利要求3所述的方法,其特征在于,所述对更新后的所述待管理应用程序的代码进行编译,得到处理后的class文件的步骤,包括:
若所述更新配置文件不存在新增内容,且所述待管理应用程序的class文件中包括新增class文件,则对更新后的所述待管理应用程序的中存在更改的部分工程模块进行编译,得到处理后的class文件。
6.如权利要求5所述的方法,其特征在于,所述对更新后的所述待管理应用程序的代码进行编译,得到处理后的class文件的步骤,包括:
对所述更新后的所述待管理应用程序的代码对应更新的目标工程模块的代码进行编译处理;
对所述目标工程模块对应的依赖工程模块进行编译处理。
7.如权利要求1所述的方法,其特征在于,所述配置规则中包括class文件类别筛选条件;所述基于所述目标插件根据所述配置规则从所述待管理应用程序的class文件查找目标class文件的步骤,包括:
基于所述目标插件根据所述class文件类别筛选条件从所述待管理应用程序的class文件中筛选出目标class文件。
8.如权利要求7所述的方法,其特征在于,所述class文件类别筛选条件包括:可选条件及限定条件,所述可选条件用于选出需处理class文件,所述限定条件用于剔除不处理的class文件。
9.如权利要求1所述的方法,其特征在于,所述目标插件运行在一开发应用程序中,所述获取待管理应用程序的class文件的步骤,包括:
所述开发应用程序对所述待管理应用程序的代码进行编译后,得到待管理应用程序的原始class文件,以及编译接收到的输入的新增的功能代码得到的新增class文件;或,
所述开发应用程序对所述待管理应用程序的代码进行编译后,得到待管理应用程序的class文件。
10.如权利要求1所述的方法,其特征在于,所述基于目标插件获取所述待管理应用程序的更新配置文件的步骤,包括:
接收输入的处理内容或/及更新配置规则;
将所述处理内容或/及所述更新配置规则写入原始配置文件中,得到更新配置文件。
11.一种应用程序管理装置,其特征在于,包括:
第一获取模块,用于获取待管理应用程序的class文件;
第二获取模块,用于基于目标插件获取所述待管理应用程序的更新配置文件,所述更新配置文件中包括处理内容及配置规则,所述配置规则定义了所述处理内容的处理方式;
第一查找模块,用于基于所述目标插件根据所述配置规则从所述待管理应用程序的class文件查找目标class文件;
第二查找模块,用于基于所述目标插件根据所述配置规则查找所述目标class文件在所述待管理应用程序中对应的源代码的位置;
处理模块,用于基于所述目标插件根据所述处理内容处理所述目标class文件中对应的源代码的位置的代码,得到处理后的class文件。
12.如权利要求11所述的装置,其特征在于,所述处理模块,还用于:
使用所述更新配置文件中的处理内容替换所述源代码的位置的代码;或/及,
将所述更新配置文件中的处理内容插入所述源代码的位置;或/及,
将所述更新配置文件中的处理内容置入所述源代码的位置的代码的前面和后面。
13.如权利要求11所述的装置,其特征在于,还包括:编译模块,用于:
对更新后的所述待管理应用程序的代码进行编译,得到处理后的class文件。
14.如权利要求13所述的装置,其特征在于,所述编译模块,还用于:
若所述更新配置文件包括新增内容,则对更新后的所述待管理应用程序的全部工程模块进行编译,得到处理后的class文件。
15.如权利要求13所述的装置,其特征在于,所述编译模块,还用于:
若所述更新配置文件不存在新增内容,且所述待管理应用程序的class文件中包括新增class文件,则对更新后的所述待管理应用程序的中存在更改的部分工程模块进行编译,得到处理后的class文件。
16.如权利要求15所述的装置,其特征在于,所述编译模块,还用于:
对所述更新后的所述待管理应用程序的代码对应更新的目标工程模块的代码进行编译处理;
对所述目标工程模块对应的依赖工程模块进行编译处理。
17.如权利要求11所述的装置,其特征在于,所述配置规则中包括class文件类别筛选条件;所述第一查找模块,还用于:
基于所述目标插件根据所述class文件类别筛选条件从所述待管理应用程序的class文件中筛选出目标class文件。
18.如权利要求11所述的装置,其特征在于,所述class文件类别筛选条件包括:可选条件及限定条件,所述可选条件用于选出需处理class文件,所述限定条件用于剔除不处理的class文件。
19.如权利要求11所述的装置,其特征在于,所述目标插件运行在一开发应用程序中,所述第一获取模块,还用于:
所述开发应用程序对所述待管理应用程序的代码进行编译后,得到待管理应用程序的原始class文件,编译接收到的输入的新增的功能代码得到的新增class文件;或,
所述开发应用程序对所述待管理应用程序的代码进行编译后,得到待管理应用程序的class文件。
20.如权利要求11所述的装置,其特征在于,所述第二获取模块,还用于:
接收输入的处理内容或/及更新配置规则;
将所述处理内容或/及所述更新配置规则写入原始配置文件中,得到更新配置文件。
21.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至10任一所述的方法的步骤。
22.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至10任一所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910038092.5A CN111435312B (zh) | 2019-01-15 | 2019-01-15 | 应用程序管理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910038092.5A CN111435312B (zh) | 2019-01-15 | 2019-01-15 | 应用程序管理方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111435312A CN111435312A (zh) | 2020-07-21 |
CN111435312B true CN111435312B (zh) | 2023-09-29 |
Family
ID=71580890
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910038092.5A Active CN111435312B (zh) | 2019-01-15 | 2019-01-15 | 应用程序管理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111435312B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112068895B (zh) * | 2020-08-10 | 2023-12-19 | 深圳市鼎盛光电有限公司 | 代码配置方法、装置、视频播放设备及存储介质 |
CN113010555A (zh) * | 2021-03-11 | 2021-06-22 | 京东数字科技控股股份有限公司 | 数据流输入参数的采集方法、装置、设备和存储介质 |
CN113900908B (zh) * | 2021-11-22 | 2024-02-23 | 北京达佳互联信息技术有限公司 | 日志更新方法、装置、电子设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101566967A (zh) * | 2009-06-03 | 2009-10-28 | 哈尔滨工程大学 | 针对java字节码文件的快速自动修改方法 |
JP2010067188A (ja) * | 2008-09-12 | 2010-03-25 | Internatl Business Mach Corp <Ibm> | プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム |
CN102402427A (zh) * | 2010-09-09 | 2012-04-04 | 阿里巴巴集团控股有限公司 | 一种Java应用程序的更新方法及装置 |
CN104199666A (zh) * | 2014-09-09 | 2014-12-10 | 北京京东尚科信息技术有限公司 | 一种应用程序动态配置方法及装置 |
CN106569844A (zh) * | 2016-09-23 | 2017-04-19 | 北京五八信息技术有限公司 | 程序代码更新的处理方法、装置和设备 |
CN106951248A (zh) * | 2017-03-16 | 2017-07-14 | 网易(杭州)网络有限公司 | 添加代码的方法、装置和可读存储介质 |
CN106990955A (zh) * | 2017-03-09 | 2017-07-28 | 武汉斗鱼网络科技有限公司 | 一种对应用程序进行打点的方法和系统 |
CN107577456A (zh) * | 2017-08-28 | 2018-01-12 | 北京奇虎科技有限公司 | 一种插件应用的处理方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9213541B2 (en) * | 2009-04-17 | 2015-12-15 | ArtinSoft Corporation, S.A. | Creation, generation, distribution and application of self-contained modifications to source code |
-
2019
- 2019-01-15 CN CN201910038092.5A patent/CN111435312B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010067188A (ja) * | 2008-09-12 | 2010-03-25 | Internatl Business Mach Corp <Ibm> | プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム |
CN101566967A (zh) * | 2009-06-03 | 2009-10-28 | 哈尔滨工程大学 | 针对java字节码文件的快速自动修改方法 |
CN102402427A (zh) * | 2010-09-09 | 2012-04-04 | 阿里巴巴集团控股有限公司 | 一种Java应用程序的更新方法及装置 |
CN104199666A (zh) * | 2014-09-09 | 2014-12-10 | 北京京东尚科信息技术有限公司 | 一种应用程序动态配置方法及装置 |
CN106569844A (zh) * | 2016-09-23 | 2017-04-19 | 北京五八信息技术有限公司 | 程序代码更新的处理方法、装置和设备 |
CN106990955A (zh) * | 2017-03-09 | 2017-07-28 | 武汉斗鱼网络科技有限公司 | 一种对应用程序进行打点的方法和系统 |
CN106951248A (zh) * | 2017-03-16 | 2017-07-14 | 网易(杭州)网络有限公司 | 添加代码的方法、装置和可读存储介质 |
CN107577456A (zh) * | 2017-08-28 | 2018-01-12 | 北京奇虎科技有限公司 | 一种插件应用的处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111435312A (zh) | 2020-07-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
CN111435312B (zh) | 应用程序管理方法、装置及电子设备 | |
US9081586B2 (en) | Systems and methods for customizing optimization/transformation/ processing strategies | |
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
US9075624B2 (en) | Compilation of system designs | |
EP1918812A1 (en) | A software development system | |
JP6217277B2 (ja) | ソフトウェア開発方法及びそのためのシステム | |
CN106775744B (zh) | 一种生成静态库的方法和装置 | |
US10514898B2 (en) | Method and system to develop, deploy, test, and manage platform-independent software | |
CN107704382A (zh) | 面向Python的函数调用路径生成方法和系统 | |
US20210365253A1 (en) | Heterogeneity-agnostic and topology-agnostic data plane programming | |
CN111880777A (zh) | 程序信息下发方法、装置、电子设备 | |
CN113312046A (zh) | 子应用页面处理方法、装置和计算机设备 | |
US11029934B2 (en) | Method and system for updating legacy software | |
Balbaert et al. | Julia: High performance programming | |
Balbaert et al. | Julia 1.0 programming complete reference guide: discover Julia, a high-performance language for technical computing | |
CN112270176B (zh) | 深度学习框架中模式转换的方法、装置和计算机存储介质 | |
Panyala et al. | On the use of term rewriting for performance optimization of legacy HPC applications | |
CN114174983B (zh) | 用于高级构造的优化的自动验证的方法和系统 | |
US10958514B2 (en) | Generating application-server provisioning configurations | |
CN107577476A (zh) | 一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质 | |
WO2021005130A1 (en) | A streaming compiler for automatic adjoint differentiation | |
CN113760291A (zh) | 日志输出的方法和装置 | |
EP4220382A1 (en) | Matching binary code to intermediate representation code | |
US12032941B2 (en) | Method and system for updating legacy software |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |