CN109933326A - 改写代码的编译方法、装置及相应终端 - Google Patents

改写代码的编译方法、装置及相应终端 Download PDF

Info

Publication number
CN109933326A
CN109933326A CN201711353857.1A CN201711353857A CN109933326A CN 109933326 A CN109933326 A CN 109933326A CN 201711353857 A CN201711353857 A CN 201711353857A CN 109933326 A CN109933326 A CN 109933326A
Authority
CN
China
Prior art keywords
variable
type
configuration information
compilation
annotation
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.)
Granted
Application number
CN201711353857.1A
Other languages
English (en)
Other versions
CN109933326B (zh
Inventor
亓海龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201711353857.1A priority Critical patent/CN109933326B/zh
Publication of CN109933326A publication Critical patent/CN109933326A/zh
Application granted granted Critical
Publication of CN109933326B publication Critical patent/CN109933326B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明提供一种改写代码的编译方法、装置及相应终端,该方法包括:根据用户指令,获取项目的配置信息;分析项目中被注解的方法和变量,确定各个方法和变量的注解类型;针对任一方法或变量,基于其注解类型对应的注解,根据配置信息执行相应的改写操作,本发明通过用户指令取代修改代码的Debug开关控制方式,减少了因为遗忘修改Debug开关而造成的危害,且本发明是在线上代码的基础上进行方法或变量的改写,避免了由人工修改带来的代码污染风险,在编译的过程中就已经完成了数据的替换,不会对软件运行效率造成影响,显著提升了软件版本控制的效果。

Description

改写代码的编译方法、装置及相应终端
技术领域
本发明涉及计算机技术领域,具体而言,本发明涉及一种改写代码的编译方法、装置及相应终端。
背景技术
在软件开发中一直存在软件版本控制的需求,针对面向的目标不同而对软件版本进行区分,例如开发者暂时不希望把软件中开发出来的某些功能展现给用户,就会在正式发布的版本中剔去,或者开发者希望软件中的某些参数在测试、开发以及正式发布阶段存在不同的多个版本。这时候,不同的软件版本相关部分会采用不同的代码。
一直以来,开发者通过Debug开关对不同软件版本中的代码进行控制。这个Debug开关一般是一个boolean类型的变量,显示为True或False。在发布不同的软件版本时,通过修改这个开关的True为False或者修改False为True来改变被这个开关所覆盖的变量或方法的状态,来达到控制相应功能显示或隐藏的作用。
但是,开发者或测试人员若没有及时修改Debug开关的值,就会导致版本间的错误,例如正式版本的产品中发布了测试数据,当软件上线后,造成线上事故,给公司或个人带来损失。即使正确修改了Debug开关的值,修改完后需要重新提交代码,这样线上测试好的代码就有被污染的风险。且被Debug开关控制的变量以及方法在软件运行时方才生效,一定程度上降低了软件的运行效率。
发明内容
为克服上述技术问题或者至少部分地解决上述技术问题,特提出以下技术方案:
本发明提供一种改写代码的编译方法,包括如下步骤:
根据用户指令,获取项目的配置信息;
分析项目中被注解的方法和变量,确定各个方法和变量的注解类型;
针对任一方法或变量,基于其注解类型对应的注解,根据所述配置信息执行相应的改写操作。
其中,所述配置信息包括以下至少一项:
预设信息;编译类型;
其中预设信息包括以下至少一项:
变量预留值相关的参数;
方法的方法体预设内容相关的参数;
编译类型包括以下至少一种:
正式发布编译模式;
正式单元编译模式;
调试编译模式;
调试单元编译模式;
测试编译模式。
具体地,根据用户指令,获取项目的配置信息的步骤,包括以下至少一种方式:
读取用户指令中的参数信息,根据所述参数信息更新默认配置文件中的预设信息;
根据默认配置文件,获取默认的预设信息;
根据用户指令,确定项目的编译类型。
进一步地,方法的注解类型包括:
方法删除类型;
方法体清空类型;
变量的注解类型包括:
变量修改类型。
具体地,针对所述注解类型为方法删除类型的任一方法,所述根据所述配置信息执行相应的改写操作的步骤,包括:
根据该注解类型对应的注解以及所述配置信息中包括的编译类型,确定是否删除该方法;
若确定删除,则对该方法执行删除操作。
具体地,针对所述注解类型为变量修改类型的任一变量或方法,所述根据所述配置信息执行相应的改写操作的步骤,包括:
基于该注解类型对应的注解,根据所述配置信息中包括的所述变量预留值相关的参数,获取该变量的预留值;
根据所述预留值对该变量执行修改操作。
具体地,针对所述注解类型为方法体清空类型的任一方法,所述根据所述配置信息执行相应的改写操作的步骤,包括:
根据该注解类型对应的注解以及所述配置信息中包括的所述方法的方法体预设内容相关的参数,确定是否清空该方法的方法体;
若确定清空,则对该方法的方法体执行清空操作。
进一步地,所述方法还包括:
针对清空方法体的该方法,添加用于声明异常的代码语句。
本发明还提供一种改写代码的编译装置,包括:
获取装置,用于根据用户指令,获取项目的配置信息;
确定装置,用于分析项目中被注解的方法和变量,确定各个方法和变量的注解类型;
改写装置,用于针对任一方法或变量,基于其注解类型对应的注解,根据所述配置信息执行相应的改写操作。
其中,所述配置信息包括以下至少一项:
预设信息;编译类型;
其中预设信息包括以下至少一项:
变量预留值相关的参数;
方法的方法体预设内容相关的参数;
编译类型包括以下至少一种:
正式发布编译模式;
正式单元编译模式;
调试编译模式;
调试单元编译模式;
测试编译模式。
具体地,所述获取装置具体用于读取用户指令中的参数信息,根据所述参数信息更新默认配置文件中的预设信息;以及,
所述获取装置具体用于根据默认配置文件,获取默认的预设信息;以及,
所述获取装置具体用于根据用户指令,确定项目的编译类型。
进一步地,方法的注解类型包括:
方法删除类型;
方法体清空类型;
变量的注解类型包括:
变量修改类型。
具体地,针对所述注解类型为方法删除类型的任一方法,所述改写装置具体用于根据该注解类型对应的注解以及所述配置信息中包括的编译类型,确定是否删除该方法;以及,
所述改写装置具体用于若确定删除,则对该方法执行删除操作。
具体地,针对所述注解类型为变量修改类型的任一变量或方法,所述改写装置具体用于基于该注解类型对应的注解,根据所述配置信息中包括的所述变量预留值相关的参数,获取该变量的预留值;以及,
所述改写装置具体用于根据所述预留值对该变量执行修改操作。
具体地,针对所述注解类型为方法体清空类型的任一方法,所述改写装置具体用于根据该注解类型对应的注解以及所述配置信息中包括的所述方法的方法体预设内容相关的参数,确定是否清空该方法的方法体;以及,
所述改写装置还具体用于若确定清空,则对该方法的方法体执行清空操作。
进一步地,所述改写装置还具体用于针对清空方法体的该方法,添加用于声明异常的代码语句。
本发明还提供一种终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一项所述的编译方法。
本发明还提供一种可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一项所述的编译方法。
本发明提供的改写代码的编译方法、装置及相应终端,根据用户指令,获取项目的配置信息;分析项目中被注解的方法和变量,确定各个方法和变量的注解类型;针对任一方法或变量,基于其注解类型对应的注解,根据配置信息执行相应的改写操作,本发明通过用户指令取代修改代码的Debug开关控制方式,减少了因为遗忘修改Debug开关而造成的危害,且本发明是在线上代码的基础上进行方法或变量的改写,避免了由人工修改带来的代码污染风险,在编译的过程中就已经完成了数据的替换,不会对软件运行效率造成影响,显著提升了软件版本控制的效果。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例提供的改写代码的编译方法的流程示意图;
图2为本发明实施例提供的获取预设信息的流程示意图;
图3为本发明实施例提供的获取编译类型的流程示意图;
图4为本发明实施例提供的执行相应的改写操作的流程示意图;
图5为本发明实施例提供的改写代码的编译装置的框架示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
下面结合附图具体介绍本发明实施例的技术方案。
本发明实施例提供了一种改写代码的编译方法,如图1所示,包括如下步骤:
步骤S110:根据用户指令,获取项目的配置信息;步骤S120:分析项目中被注解的方法和变量,确定各个方法和变量的注解类型;步骤S130:针对任一方法或变量,基于其注解类型对应的注解,根据配置信息执行相应的改写操作。
本发明实施例提供的改写代码的编译方法,根据用户指令,获取项目的配置信息;分析项目中被注解的方法和变量,确定各个方法和变量的注解类型;针对任一方法或变量,基于其注解类型对应的注解,根据配置信息执行相应的改写操作,本发明通过用户指令取代修改代码的Debug开关控制方式,减少了因为遗忘修改Debug开关而造成的危害,且本发明是在线上代码的基础上进行方法或变量的改写,避免了由人工修改带来的代码污染风险,在编译的过程中就已经完成了数据的替换,不会对软件运行效率造成影响,显著提升了软件版本控制的效果。
本发明实施例以框架机制Gradle为基础,本发明实施例的方法,通过生成两个功能模块Module:AJTools-Library模块和AJTools-Plugin模块来实现。下面,将对本发明实施例提供的各个模块的运行方法进行详细介绍,具体如下:
步骤S110:根据用户指令,获取项目的配置信息。
不同于采用Debug开关需要手动修改源代码的方式来控制软件版本,本发明实施例中,通过用户指令来控制编译时生成不同的代码版本,避免了由人工修改带来的代码污染风险。
其中,用户指令可以是由用户输入的命令行生成的,也可以是用户在本发明实施例提供的用户界面UI上通过勾选不同的选项或输入不同的命令生成的,本发明实施例在此不做限制。
在接收到用户指令后,根据用户指令获取项目的配置信息,用于依照用户的需求在编译时配置不同的代码版本。
具体地,配置信息包括以下至少一项:预设信息、编译类型。
本发明实施例通过初始化AJTools-Plugin模块下的一个ProfileTask任务来执行预设信息的读取工作,该任务由继承自org.gradle.api.DefaultTask的ProfileTask类生成。如图2所示,ProfileTask任务将用户指令中获取到的信息写入预设的AJTools.json默认配置文件中,用于更新AJTools.json文件中的预设信息。若用户指令中没有与预设信息相关的信息,则直接采用原始预设的AJTools.json默认配置文件中默认的预设信息,以便执行后续步骤,其中,预设信息包括以下至少一项:变量预留值相关的debug参数;方法的方法体预设内容相关的module参数。
对于编译类型的获取工作,本发明实施例的AJTools-Plugin模块提供了一个插件,在实施本发明实施例前已预先集成到系统中,通过一个AJToolsPlugin任务来执行编译过程的监听工作,该任务由继承自Plugin的AJToolsPlugin类生成,用于实现该类下的apply方法,以获得系统的project方法参数,通过project方法参数可以实现对项目的编译过程进行监听。在接收到用户指令后,project方法参数会监听根据用户指令开始执行的编译过程,如图3所示,AJTools-Plugin模块根据project方法参数,获取项目的编译类型,并写入预设的BuildType.json文件中,以便执行后续步骤,其中,编译类型包括以下至少一种:正式发布Release编译模式;正式单元ReleaseUnit编译模式;调试Debug编译模式;调试单元DebugUnit编译模式;测试DebugAndroidTest编译模式。
需要说明的是,图3中编译类型的数量和判断顺序可以根据实际情况进行设置,作为示例地,可以根据用户指令为各种编译类型设置优先级和/或权重,在判断项目的编译类型时根据优先级设置判断顺序,根据权重值设置判断的数量等,本发明实施例对此不作限制。
步骤S120:分析项目中被注解的方法和变量,确定各个方法和变量的注解类型。
该步骤中,本发明实施例通过初始化AJTools-Library模块下的一个AJProcessor任务来对项目中的方法和变量执行分析工作,该任务由继承自javax.annotation.processing.AbstractProcessor的AJProcessor类生成。通过AJProcessor任务可以分析项目中被注解的方法和变量,确定各个方法和变量的注解类型,从而实现后续步骤中对各种注解类型的方法或变量执行相应的操作。
可以理解,本发明实施例所实施的项目,在项目开发时,已针对不同软件版本中可能会不同的方法和变量设置标签,并区分不同的注解类型以执行相应的修改,并为各注解类型编写注解,以指示修改的方式。可选地,各个注解类型的注解中对上述各个编译类型对应的修改方式作出了说明。
另外,若用户未选择上述任意一个编译类型,则本发明实施例可以在后续步骤中不再对变量和方法进行分析,直接进行编译。
具体而言,为可能需要修改的变量标记@AJDebug标签,或者对可能需要修改的变量为其所在的方法标记@AJDebug标签,并编写相应的@AJDebug注解。
为可能需要删除的方法标记@AJDelete标签,并编写相应的@AJDelete注解。
为可能需要清空方法体的方法标记@AJModule标签,并编写相应的@AJDelete注解。
也就是说,方法的注解类型至少包括:标记@AJDelete标签的方法删除类型、标记@AJModule标签方法体清空类型。
变量的注解类型包括:标记@AJDebug标签的变量修改类型。
步骤S130:针对任一方法或变量,基于其注解类型对应的注解,根据配置信息执行相应的改写操作。
该步骤中,本发明实施例通过初始化AJTools-Library模块下的一个com.sun.tools.*任务来对项目中的抽象代码书执行改写工作,该任务根据JDK(Java语言的软件开发工具包)提供的JSR269标准实现的com.sun.tools.*类生成,实现在线上代码的基础上进行方法或变量的改写,避免了由人工修改带来的代码污染风险。
具体地,首先要初始化一个Profile任务和一个BuildType任务,分读取AJTools.json文件与BuildType.json文件中的内容,即预设信息和编译类型。
接着要初始化一个Handler任务来对执行注解处理工作,后续步骤中的执行各种具体处理方式的子任务都继承自该生成Handler任务的父类Handler类。
本发明实施例中,配置信息中包括的编译类型用于结合@AJDelete注解,对注解类型为方法删除类型的方法执行删除操作。
因此,@AJDelete注解中可以包含一个枚举类BuildTypes,用于声明上述五种编译类型。
具体而言,@AJDelete注解中设置有BuildTypes[]range()方法,BuildTypes[]range()用于判断BuildType任务在BuildType.json文件中读取到的编译类型是否是注解中需要删除该方法的编译类型,若注解中包含了BuildType任务在BuildType.json文件中读取到的编译类型需要删除该方法的相关信息,则该方法的删除操作生效。若注解中需要删除该方法的编译类型不包含BuildType任务在BuildType.json文件中读取到的编译类型,则该方法的删除操作失效。
可选地,考虑到实际编译过程中与注解编写过程中会有需求的变化,可结合用户指令中的信息进一步确认是否对注解类型为方法删除类型的方法执行删除操作。具体地,@AJDelete注解中还设置有String value()方法,String value()用于读取用户预留的信息。若用户预留的内容中对应的需要删除方法的相关信息与@AJDelete注解中一致,则该方法的删除操作生效,否则,则该方法的删除操作失效。
即如图4所示,通过继承自Handler类的一个AJDeleteHandler类生成一个AJDeleteHandler任务,针对方法删除类型的任一方法,根据该注解类型对应的注解以及配置信息中包括的编译类型,确定是否删除该方法;若确定删除,则对该方法执行删除操作。
本发明实施例中,配置信息中包括的变量预留值相关的debug参数用于结合@AJDebug注解,对注解类型为变量修改类型的变量或者注解类型为变量修改类型的方法中的变量执行修改操作。
可以理解,若需要对一变量进行修改,在开发时可以直接为该变量标记@AJDebug标签,也可以为其所在的方法标记@AJDebug标签,都可起到识别该变量的作用。
同理,@AJDebug注解中也可以包含一个枚举类AJTypeTag,用于声明用户可以预留的值的类型。
具体而言,@AJDebug注解中设置有String value()和AJTypeTag type()两个方法,String value()用于读取用户预留的值;AJTypeTag type()用于读取用户预留值的类型。将被标记的变量的类型修改为用户预留值的类型,然后赋值用户预留的值,就可以实现变量的改写。
随后,继续如图4所示,通过继承自Handler类的一个AJDebugHandler类生成一个AJDebugHandler任务,基于该注解类型对应的注解,根据配置信息中包括的变量预留值相关的参数,获取该变量的预留值;根据预留值对该变量执行修改操作。
本发明实施例中,配置信息中包括的方法的方法体预设内容相关的module参数用于结合@AJModule注解,对注解类型为方法体清空类型的方法执行方法体清空及写入异常提示信息的操作。
具体而言,@AJModule注解中设置有String value()方法,String value()用于读取用户预留的内容。若注解中包含了用户预留的内容对应的需要清空的方法体的相关信息,则该标记@AJModule的方法的方法体清空操作生效。若注解中需要清空方法体的方法不包含用户预留的内容对应的方法,则该方法的方法体的清空操作失效。
随后,继续如图4所示,通过继承自Handler类的一个AJModuleHandler类生成一个AJModuleHandler任务,针对注解类型为方法体清空类型的任一方法,根据该注解类型对应的注解以及配置信息中包括的方法的方法体预设内容相关的参数,确定是否清空该方法的方法体;若确定清空,则对该方法的方法体执行清空操作。可选地,针对清空方法体的该方法,添加用于声明异常的代码语句,便于开发人员检查维护。
本发明实施例在完成相应的改写操作后,对项目进行编译,生成客户需要的软件版本。软件代码在编译的过程中就已经完成了数据的替换,不会对软件运行效率造成影响,显著提升了软件版本控制的效果。
本发明实施例还提供一种改写代码的编译装置,如图5所示,包括:
获取装置510,用于根据用户指令,获取项目的配置信息;
确定装置520,用于分析项目中被注解的方法和变量,确定各个方法和变量的注解类型;
改写装置530,用于针对任一方法或变量,基于其注解类型对应的注解,根据配置信息执行相应的改写操作。
其中,配置信息包括以下至少一项:预设信息;编译类型。
其中预设信息包括以下至少一项:变量预留值相关的参数;方法的方法体预设内容相关的参数。
编译类型包括以下至少一种:正式发布编译模式;正式单元编译模式;调试编译模式;调试单元编译模式;测试编译模式。
具体地,获取装置510具体用于读取用户指令中的参数信息,根据所述参数信息更新默认配置文件中的预设信息;
以及,获取装置510具体用于根据默认配置文件,获取默认的预设信息;
以及,获取装置510具体用于根据用户指令,确定项目的编译类型。
进一步地,方法的注解类型包括:方法删除类型;方法体清空类型。
变量的注解类型包括:变量修改类型。
具体地,针对注解类型为方法删除类型的任一方法,改写装置530具体用于根据该注解类型对应的注解以及配置信息中包括的编译类型,确定是否删除该方法;
以及,改写装置530具体用于若确定删除,则对该方法执行删除操作。
具体地,针对注解类型为变量修改类型的任一变量或方法,改写装置530具体用于基于该注解类型对应的注解,根据配置信息中包括的变量预留值相关的参数,获取该变量的预留值;
以及,改写装置530具体用于根据预留值对该变量执行修改操作。
具体地,针对注解类型为方法体清空类型的任一方法,改写装置530具体用于根据该注解类型对应的注解以及配置信息中包括的方法的方法体预设内容相关的参数,确定是否清空该方法的方法体;
以及,改写装置530具体用于若确定清空,则对该方法的方法体执行清空操作。
进一步地,改写装置530还具体用于针对清空方法体的该方法,添加用于声明异常的代码语句。
本发明实施例所提供的装置可以为设备上的特定硬件或者加载于设备上的软件或固件等。本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容,在此不再赘述。
本发明提供的改写代码的编译装置,根据用户指令,获取项目的配置信息;分析项目中被注解的方法和变量,确定各个方法和变量的注解类型;针对任一方法或变量,基于其注解类型对应的注解,根据配置信息执行相应的改写操作,本发明通过用户指令取代修改代码的Debug开关控制方式,减少了因为遗忘修改Debug开关而造成的危害,且本发明是在线上代码的基础上进行方法或变量的改写,避免了由人工修改带来的代码污染风险,在编译的过程中就已经完成了数据的替换,不会对软件运行效率造成影响,显著提升了软件版本控制的效果。
本发明实施例还提供一种终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述的编译方法。
该终端可以为包括计算机、手机、平板电脑、PDA(Personal Digital Assistant,个人数字助理)、POS(Point of Sales,销售终端)、车载电脑等任意终端设备。
其中,存储器可用于存储软件程序以及模块,处理器通过运行存储在存储器的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器可主要包括存储程序区和存储数据区。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
处理器是控制中心,利用各种接口和线路连接整个终端的各个部分,通过运行或执行存储在存储器内的软件程序和/或模块,以及调用存储在存储器内的数据,执行各种功能和处理数据,从而对终端进行整体监控。可选的,处理器可包括一个或多个处理单元;优选的,处理器可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器中。
本发明实施例还提供一种可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一实施例所述的编译方法。
本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种改写代码的编译方法,其特征在于,包括如下步骤:
根据用户指令,获取项目的配置信息;
分析项目中被注解的方法和变量,确定各个方法和变量的注解类型;
针对任一方法或变量,基于其注解类型对应的注解,根据所述配置信息执行相应的改写操作。
2.根据权利要求1所述的编译方法,其特征在于,所述配置信息包括以下至少一项:
预设信息;编译类型;
其中预设信息包括以下至少一项:
变量预留值相关的参数;
方法的方法体预设内容相关的参数;
编译类型包括以下至少一种:
正式发布编译模式;
正式单元编译模式;
调试编译模式;
调试单元编译模式;
测试编译模式。
3.根据权利要求1或2所述的编译方法,其特征在于,根据用户指令,获取项目的配置信息的步骤,包括以下至少一种方式:
读取用户指令中的参数信息,根据所述参数信息更新默认配置文件中的预设信息;
根据默认配置文件,获取默认的预设信息;
根据用户指令,确定项目的编译类型。
4.根据权利要求3所述的编译方法,其特征在于,方法的注解类型包括:
方法删除类型;
方法体清空类型;
变量的注解类型包括:
变量修改类型。
5.根据权利要求4所述的编译方法,其特征在于,针对所述注解类型为方法删除类型的任一方法,所述根据所述配置信息执行相应的改写操作的步骤,包括:
根据该注解类型对应的注解以及所述配置信息中包括的编译类型,确定是否删除该方法;
若确定删除,则对该方法执行删除操作。
6.根据权利要求4所述的编译方法,其特征在于,针对所述注解类型为变量修改类型的任一变量或方法,所述根据所述配置信息执行相应的改写操作的步骤,包括:
基于该注解类型对应的注解,根据所述配置信息中包括的所述变量预留值相关的参数,获取该变量的预留值;
根据所述预留值对该变量执行修改操作。
7.根据权利要求4所述的编译方法,其特征在于,针对所述注解类型为方法体清空类型的任一方法,所述根据所述配置信息执行相应的改写操作的步骤,包括:
根据该注解类型对应的注解以及所述配置信息中包括的所述方法的方法体预设内容相关的参数,确定是否清空该方法的方法体;
若确定清空,则对该方法的方法体执行清空操作。
8.一种改写代码的编译装置,其特征在于,包括:
获取装置,用于根据用户指令,获取项目的配置信息;
确定装置,用于分析项目中被注解的方法和变量,确定各个方法和变量的注解类型;
改写装置,用于针对任一方法或变量,基于其注解类型对应的注解,根据所述配置信息执行相应的改写操作。
9.一种终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-7任一项所述的编译方法。
10.一种可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-7任一项所述的编译方法。
CN201711353857.1A 2017-12-15 2017-12-15 改写代码的编译方法、装置及相应终端 Active CN109933326B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711353857.1A CN109933326B (zh) 2017-12-15 2017-12-15 改写代码的编译方法、装置及相应终端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711353857.1A CN109933326B (zh) 2017-12-15 2017-12-15 改写代码的编译方法、装置及相应终端

Publications (2)

Publication Number Publication Date
CN109933326A true CN109933326A (zh) 2019-06-25
CN109933326B CN109933326B (zh) 2023-03-17

Family

ID=66980471

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711353857.1A Active CN109933326B (zh) 2017-12-15 2017-12-15 改写代码的编译方法、装置及相应终端

Country Status (1)

Country Link
CN (1) CN109933326B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110908706A (zh) * 2019-11-28 2020-03-24 上海电气富士电机电气技术有限公司 一种多版本软件的管理方法
CN111796865A (zh) * 2020-06-28 2020-10-20 北京字节跳动网络技术有限公司 一种字节码文件修改方法、装置、终端设备及介质
WO2021037050A1 (zh) * 2019-08-26 2021-03-04 华为技术有限公司 一种代码变更方法及装置
CN113377342A (zh) * 2020-02-25 2021-09-10 武汉斗鱼鱼乐网络科技有限公司 一种项目构建方法、装置、电子设备及存储介质
CN113553059A (zh) * 2021-07-28 2021-10-26 北京达佳互联信息技术有限公司 局部变量查询方法、装置、服务器及存储介质

Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6766514B1 (en) * 1999-10-19 2004-07-20 General Electric Co. Compiler having real-time tuning, I/O scaling and process test capability
WO2004077261A2 (en) * 2003-02-26 2004-09-10 Bea Systems Inc. Systems and methods for type-independent source code editing
US20050246693A1 (en) * 2003-09-15 2005-11-03 Plum Thomas S Automated safe secure techniques for eliminating undefined behavior in computer software
CN1755721A (zh) * 2004-10-01 2006-04-05 微软公司 组件化和可扩展的工作流模型
US20060130021A1 (en) * 2003-09-15 2006-06-15 Plum Thomas S Automated safe secure techniques for eliminating undefined behavior in computer software
CN101013362A (zh) * 2004-10-01 2007-08-08 微软公司 用于设计工作流的可扩展框架
JP2009238231A (ja) * 2003-05-12 2009-10-15 An Mo Jeong コンポーネント基盤環境下で拡張されたメタデータを利用したソフトウェア開発方法及びその開発システム
US20110184990A1 (en) * 2010-01-22 2011-07-28 Ronald Francis Murphy System and method for creating, managing, and reusing schema type definitions in services oriented architecture services, grouped in the form of libraries
CN104391717A (zh) * 2014-11-18 2015-03-04 南京大学 一种调试时代码动态更新方法
US20150113513A1 (en) * 2013-10-18 2015-04-23 Microsoft Corporation Incrementally compiling software artifacts from an interactive development environment
CN105103127A (zh) * 2013-02-28 2015-11-25 微软技术许可有限责任公司 基于编译器的混淆
CN106528261A (zh) * 2016-12-02 2017-03-22 武汉斗鱼网络科技有限公司 应用页面初始化的编译控制装置及方法
CN107018005A (zh) * 2016-01-28 2017-08-04 纬创资通股份有限公司 事件触发方法、事件管理系统及系统
CN107203535A (zh) * 2016-03-16 2017-09-26 阿里巴巴集团控股有限公司 信息查询方法及装置
CN107391218A (zh) * 2017-07-07 2017-11-24 北京小米移动软件有限公司 编译方法及装置、电子设备和计算机可读存储介质

Patent Citations (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6766514B1 (en) * 1999-10-19 2004-07-20 General Electric Co. Compiler having real-time tuning, I/O scaling and process test capability
WO2004077261A2 (en) * 2003-02-26 2004-09-10 Bea Systems Inc. Systems and methods for type-independent source code editing
JP2009238231A (ja) * 2003-05-12 2009-10-15 An Mo Jeong コンポーネント基盤環境下で拡張されたメタデータを利用したソフトウェア開発方法及びその開発システム
US20050246693A1 (en) * 2003-09-15 2005-11-03 Plum Thomas S Automated safe secure techniques for eliminating undefined behavior in computer software
US20060130021A1 (en) * 2003-09-15 2006-06-15 Plum Thomas S Automated safe secure techniques for eliminating undefined behavior in computer software
CN1755721A (zh) * 2004-10-01 2006-04-05 微软公司 组件化和可扩展的工作流模型
US20060074732A1 (en) * 2004-10-01 2006-04-06 Microsoft Corporation Componentized and extensible workflow model
CN101013362A (zh) * 2004-10-01 2007-08-08 微软公司 用于设计工作流的可扩展框架
US20110184990A1 (en) * 2010-01-22 2011-07-28 Ronald Francis Murphy System and method for creating, managing, and reusing schema type definitions in services oriented architecture services, grouped in the form of libraries
CN105103127A (zh) * 2013-02-28 2015-11-25 微软技术许可有限责任公司 基于编译器的混淆
US20150113513A1 (en) * 2013-10-18 2015-04-23 Microsoft Corporation Incrementally compiling software artifacts from an interactive development environment
CN104391717A (zh) * 2014-11-18 2015-03-04 南京大学 一种调试时代码动态更新方法
CN107018005A (zh) * 2016-01-28 2017-08-04 纬创资通股份有限公司 事件触发方法、事件管理系统及系统
CN107203535A (zh) * 2016-03-16 2017-09-26 阿里巴巴集团控股有限公司 信息查询方法及装置
CN106528261A (zh) * 2016-12-02 2017-03-22 武汉斗鱼网络科技有限公司 应用页面初始化的编译控制装置及方法
CN107391218A (zh) * 2017-07-07 2017-11-24 北京小米移动软件有限公司 编译方法及装置、电子设备和计算机可读存储介质

Non-Patent Citations (7)

* Cited by examiner, † Cited by third party
Title
HANNES DROFMANN: "《http://hannersdorfmann.com/annotation-processing/annotationprocessing101》", 10 January 2015 *
姜文等: "基于Linux环境的C/C++软件重量级静态检查", 《微型电脑应用》 *
姜文等: "基于VxWorks平台的软件重量级静态检查", 《微型机与应用》 *
李剑慧等: "注解信息制导的动态二进制翻译及优化", 《小型微型计算机系统》 *
胡荣贵等: "基于类型注解的认证编译器设计与实现", 《计算机研究与发展》 *
黄河明等: "一种基于反汇编基础上的C反编译的新方法", 《科学技术与工程》 *
黄诤杰等: "基于云计算技术的在线编译平台的设计分析", 《网络安全技术与应用》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021037050A1 (zh) * 2019-08-26 2021-03-04 华为技术有限公司 一种代码变更方法及装置
CN110908706A (zh) * 2019-11-28 2020-03-24 上海电气富士电机电气技术有限公司 一种多版本软件的管理方法
CN110908706B (zh) * 2019-11-28 2023-10-17 上海电气富士电机电气技术有限公司 一种多版本软件的管理方法
CN113377342A (zh) * 2020-02-25 2021-09-10 武汉斗鱼鱼乐网络科技有限公司 一种项目构建方法、装置、电子设备及存储介质
CN113377342B (zh) * 2020-02-25 2024-01-19 南昌节点汇智科技有限公司 一种项目构建方法、装置、电子设备及存储介质
CN111796865A (zh) * 2020-06-28 2020-10-20 北京字节跳动网络技术有限公司 一种字节码文件修改方法、装置、终端设备及介质
CN111796865B (zh) * 2020-06-28 2024-04-16 北京字节跳动网络技术有限公司 一种字节码文件修改方法、装置、终端设备及介质
CN113553059A (zh) * 2021-07-28 2021-10-26 北京达佳互联信息技术有限公司 局部变量查询方法、装置、服务器及存储介质
CN113553059B (zh) * 2021-07-28 2024-04-30 北京达佳互联信息技术有限公司 局部变量查询方法、装置、服务器及存储介质

Also Published As

Publication number Publication date
CN109933326B (zh) 2023-03-17

Similar Documents

Publication Publication Date Title
CN109933326A (zh) 改写代码的编译方法、装置及相应终端
CN101046767B (zh) 用于自动测试基于图形的编程工具的方法和系统
CN112270149B (zh) 验证平台自动化集成方法、系统及电子设备和存储介质
CN104932973B (zh) 一种版本兼容测试方法和装置
CN106909510A (zh) 一种获取测试用例的方法以及服务器
US20030033592A1 (en) Software debugger and software development support system
Di Ruscio et al. Evolutionary togetherness: how to manage coupled evolution in metamodeling ecosystems
CN105426310B (zh) 一种检测目标进程的性能的方法和装置
Rose et al. A comparison of model migration tools
US7895575B2 (en) Apparatus and method for generating test driver
CN105159732B (zh) 在移动终端安装或更新应用程序的方法和移动终端
CN105094783A (zh) 安卓应用稳定性测试的方法及装置
CN106776334A (zh) 基于注释生成测试用例方法及装置
CN102968371A (zh) 测试java api单元组件的方法及装置
CN108846264A (zh) 代码加固方法、装置、智能终端和计算机可读存储介质
EP3314409B1 (en) Tracing dependencies between development artifacts in a software development project
CN109918075A (zh) 利用打包插件的sdk打包方法、打包插件及相应终端
CN106126425B (zh) 基于Android自动化测试框架的功能遍历方法及系统
CN106919431B (zh) 持续集成中的代码比对方法、设备以及系统
CN108874662A (zh) 测试方法和存储程序的非暂态计算机可读介质
Khan et al. A study: selection of model metamodel and SPL tools for the verification of software product lines
Asplund et al. Qualifying software tools, a systems approach
CN107902507B (zh) 控制软件现场调试系统以及调试方法
CN112527312B (zh) 一种嵌入式系统的测试方法和测试装置
CN103678114B (zh) 产生断言的设备和方法以及验证处理器的设备和方法

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