发明内容
本发明实施例提供一种组件代码修改方法及设备,以解决现有组件代码修改破坏完整性,因为组件代码自身逻辑更改导致第三方的工程无法及时更新或者更新困难的问题。
第一方面,本发明实施例提供一种组件代码修改方法,包括:
利用第三方库的管理工具集成目标组件,并确定所述目标组件的应用程序编程接口;
获取待替换业务,并确定所述待替换业务的应用程序编程接口;
根据所述目标组件和所述待替换业务,确定所述待替换业务的应用程序编程接口对应的所述目标组件的应用程序编程接口中的目标应用程序编程接口;
根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用所述待替换业务的组件代码,在所述待替换业务中对所述目标组件的目标组件代码进行修改。
在一种可能的设计中,所述根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用所述待替换业务的组件代码,在所述待替换业务中对所述目标组件的目标组件代码进行修改,包括:
根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用Run Time、Method Swizzling、继承和Category中的一种或多种,在所述待替换业务中对所述待替换业务的应用程序编程接口和所述目标组件的目标应用程序编程接口进行绑定,并利用所述待替换业务的组件代码,对所述目标组件的目标组件代码进行替换。
在一种可能的设计中,上述的方法,还包括:
为所述目标组件创建方法定义、属性和Objective-C源代码文件,所述方法定义用于对所述目标组件的原有方法进行重新定义,所述属性用于对所述目标组件的原有组件的属性进行重新定义,所述Objective-C源代码文件用于声明所述目标组件内部的属性及实现所属类内部的方法;
为所述待替换业务创建方法定义、属性和Objective-C源代码文件;
所述根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用所述待替换业务的组件代码,在所述待替换业务中对所述目标组件的目标组件代码进行修改,包括:
基于为所述目标组件创建的方法定义、属性和Objective-C源代码文件,以及为所述待替换业务创建的方法定义、属性和Objective-C源代码文件,根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用所述待替换业务的组件代码,在所述待替换业务中对所述目标组件的目标组件代码进行修改。
在一种可能的设计中,上述的方法,还包括:
根据实现所述目标组件自身业务的方法或者带有实现所述目标组件自身业务的方法的类,确定所述目标组件的功能;
根据所述目标组件的功能确定所述待替换业务。
在一种可能的设计中,上述的方法,还包括:
接收业务调整指令,根据所述业务调整指令调整所述待替换业务,并将调整后的待替换业务作为新的待替换业务,执行所述确定所述待替换业务的应用程序编程接口的步骤。
第二方面,本发明实施例提供一种组件代码修改设备,包括:
组件集成模块,用于利用第三方库的管理工具集成目标组件,并确定所述目标组件的应用程序编程接口;
待替换业务处理模块,用于获取待替换业务,并确定所述待替换业务的应用程序编程接口;
接口对应模块,用于根据所述目标组件和所述待替换业务,确定所述待替换业务的应用程序编程接口对应的所述目标组件的应用程序编程接口中的目标应用程序编程接口;
组件代码修改模块,用于根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用所述待替换业务的组件代码,在所述待替换业务中对所述目标组件的目标组件代码进行修改。
在一种可能的设计中,所述组件代码修改模块,还用于根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用Run Time、MethodSwizzling、继承和Category中的一种或多种,在所述待替换业务中对所述待替换业务的应用程序编程接口和所述目标组件的目标应用程序编程接口进行绑定,并利用所述待替换业务的组件代码,对所述目标组件的目标组件代码进行替换。
在一种可能的设计中,上述的设备,还包括:
第一信息创建模块,用于为所述目标组件创建方法定义、属性和Objective-C源代码文件,所述方法定义用于对所述目标组件的原有方法进行重新定义,所述属性用于对所述目标组件的原有组件的属性进行重新定义,所述Objective-C源代码文件用于声明所述目标组件内部的属性及实现所属类内部的方法;
第二信息创建模块,用于为所述待替换业务创建方法定义、属性和Objective-C源代码文件;
所述组件代码修改模块,还用于基于为所述目标组件创建的方法定义、属性和Objective-C源代码文件,以及为所述待替换业务创建的方法定义、属性和Objective-C源代码文件,根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用所述待替换业务的组件代码,在所述待替换业务中对所述目标组件的目标组件代码进行修改。
在一种可能的设计中,上述的设备,还包括:
功能实现模块,用于根据实现所述目标组件自身业务的方法或者带有实现所述目标组件自身业务的方法的类,确定所述目标组件的功能;
业务确定模块,用于根据所述目标组件的功能确定所述待替换业务。
在一种可能的设计中,所述待替换业务处理模块,还用于接收业务调整指令,根据所述业务调整指令调整所述待替换业务,并将调整后的待替换业务作为新的待替换业务,执行所述确定所述待替换业务的应用程序编程接口的步骤。
第三方面,本发明实施例提供一种组件代码修改设备,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第一方面以及第一方面各种可能的设计所述的组件代码修改方法。
第四方面,本发明实施例提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一方面以及第一方面各种可能的设计所述的组件代码修改方法。
本实施例提供的组件代码修改方法及设备,该方法通过利用第三方库的管理工具集成目标组件,确定目标组件的应用程序编程接口,获取待替换业务,并确定待替换业务的应用程序编程接口;然后根据目标组件和待替换业务,确定待替换业务的应用程序编程接口对应的目标组件的目标应用程序编程接口;最后根据待替换业务的应用程序编程接口对应的目标组件的目标应用程序编程接口,利用待替换业务的组件代码,在待替换业务中对目标组件的目标组件代码进行修改,能够在使用组件功能的同时根据业务实现自身的个性化需求,而且可以在不改变集成的第三方组件的代码结构上完成自身逻辑的开发,大大减少了代码的耦合度,解决了因为自身逻辑更改导致第三方组件无法及时更新或者更新困难的问题,并且提供了多种实现工程中的解决方案,保证了iOS开发的进行。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
随着互联网技术的发展以及业务需求的日益增多,人们对组件要求越来越高,很多情况下,需要对组件进行修改。组件可以包括菜单组件、按钮组件、对话框组件、编辑框组件、单选框组件、复选框组件、列表框组件、内容显示组件(图片或文字等)和滚动条组件等。目前,敏捷开发成为越来越重要的开发模式,组件快速迭代的同时也集成了很多第三方的组件。然而,现有这种模式各个组件代码耦合度高,如果要对组件代码进行修改,破坏完整性,而且因为组件代码自身逻辑更改也会导致第三方的组件无法及时更新或者更新困难。
因此,考虑到上述问题,本发明提供一种组件代码修改方法,通过利用第三方库的管理工具集成目标组件,确定目标组件的应用程序编程接口,获取待替换业务,并确定待替换业务的应用程序编程接口;然后根据目标组件和待替换业务,确定待替换业务的应用程序编程接口对应的标应用程序编程接口;最后根据待替换业务的应用程序编程接口对应的目标组件的目标应用程序编程接口,利用待替换业务的组件代码,在待替换业务中对目标组件的目标组件代码进行修改,能够在使用组件功能的同时根据业务实现自身的个性化需求,而且可以在不改变集成的第三方组件的代码结构上完成自身逻辑的开发,大大减少了代码的耦合度,解决了因为自身逻辑更改导致第三方组件无法及时更新或者更新困难的问题,并且提供了多种实现工程中的解决方案,保证了iOS开发的进行。
图1为本发明提供的一种组件代码修改方法的应用场景图。如图1所示,终端设备101可以利用第三方库的管理工具102集成目标组件,并确定所述目标组件的应用程序编程接口,可以获取待替换业务,并确定所述待替换业务的应用程序编程接口,可以根据所述目标组件和所述待替换业务,确定所述待替换业务的应用程序编程接口对应的所述目标组件的应用程序编程接口中的目标应用程序编程接口,也可以根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用所述待替换业务的组件代码,在所述待替换业务中对所述目标组件的目标组件代码进行修改等。
可以理解,本发明所涉及的终端设备也可以称为用户设备、移动台、移动终端等。终端设备可以是手机、平板电脑、带无线收发功能的电脑等,本发明中不做具体的限制。
图2为本发明实施例提供的组件代码修改方法的流程示意图,本实施例的执行主体可以为图1所示实施例中的终端设备,也可以为服务器,本实施例此处不做特别限制。如图2所示,该方法包括:
S201、利用第三方库的管理工具集成目标组件,并确定所述目标组件的应用程序编程接口。
具体的,第三方库的管理工具可以根据实际需要确定,例如,使用CocoaPods集成所需组件工程,并确定集成的各个组件工程暴露的应用程序编程接口(ApplicationProgramming Interface,简称API),其中,CocoaPods是专门为iOS工程提供第三方库的管理工具,通过CocoaPods,可以更方便地管理每个第三方库的版本,而且不需要做太多的配置,就可以直观、集中和自动化地管理相应项目的第三方库。
上述集成的目标组件可以通过以下方式获取:根据实际情况从网上下载开源的组件,将下载的组件作为目标组件,这里的开源不是开放编译器的源代码,而是由相关人员写完软件源代码后,发布到网上,供大家学习、改进等。
在上述利用第三方库的管理工具集成目标组件之后,还可以接收组件调整指令,根据该组件调整指令调整集成的目标组件,并将调整后的目标组件作为新的目标组件,执行所述确定所述目标组件的应用程序编程接口的步骤,其中,组件调整指令可以根据实际需要设置。
可选的,在上述利用第三方库的管理工具集成目标组件之后,还可以为所述目标组件创建方法定义、属性和Objective-C源代码文件,所述方法定义用于对所述目标组件的原有方法进行重新定义,所述属性用于对所述目标组件的原有组件的属性进行重新定义,所述Objective-C源代码文件用于声明所述目标组件内部的属性及实现所属类内部的方法。
这里,为上述组件创建有方法定义、属性和Objective-C源代码文件,所述方法用于对组件工程的原有方法进行重新定义,所述属性用于对原有工程的私有属性进行重新定义,所述Objective-C源代码文件用于声明组件工程内部的属性及实现该类内部的方法。
S202、获取待替换业务,并确定所述待替换业务的应用程序编程接口。
可选的,可以根据实现所述目标组件自身业务的方法或者带有实现所述目标组件自身业务的方法的类,确定所述目标组件的功能;
根据所述目标组件的功能确定所述待替换业务。
具体的,可以根据上述目标组件的功能和实际需要确定待替换业务逻辑,并进一步确定其API接口和方法参数,以供调用。
可选的,在上述获取待替换业务之后,还可以接收业务调整指令,根据所述业务调整指令调整所述待替换业务,并将调整后的待替换业务作为新的待替换业务,执行所述确定所述待替换业务的应用程序编程接口的步骤,其中,业务调整指令可以根据实际需要设置。
可选的,在上述获取待替换业务之后,还可以为所述待替换业务创建方法定义、属性和Objective-C源代码文件,所述方法用于对待替换业务的原有方法进行重新定义,所述属性用于对待替换业务的私有属性进行重新定义,所述Objective-C源代码文件用于声明待替换业务内部的属性及实现该类内部的方法。
S203、根据所述目标组件和所述待替换业务,确定所述待替换业务的应用程序编程接口对应的所述目标组件的应用程序编程接口中的目标应用程序编程接口。
这里,可以首先在目标组件中确定与待替换业务对应的组件,然后根据该组件的应用程序编程接口,确定待替换业务的应用程序编程接口对应的目标组件的目标应用程序编程接口。
S204、根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用所述待替换业务的组件代码,在所述待替换业务中对所述目标组件的目标组件代码进行修改。
可选的,可以基于为所述目标组件创建的方法定义、属性和Objective-C源代码文件,以及为所述待替换业务创建的方法定义、属性和Objective-C源代码文件,根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用所述待替换业务的组件代码,在所述待替换业务中对所述目标组件的目标组件代码进行修改。
具体的,可以通过使用Run Time、Method Swizzling、继承、Category等技术使用组件暴露的API接口进行动态绑定、替换,实现对组件代码的修改。
本实施例提供的组件代码修改方法,通过利用第三方库的管理工具集成目标组件,确定目标组件的应用程序编程接口,获取待替换业务,并确定待替换业务的应用程序编程接口;然后根据目标组件和待替换业务,确定待替换业务的应用程序编程接口对应的目标组件的目标应用程序编程接口;最后根据待替换业务的应用程序编程接口对应的目标组件的目标应用程序编程接口,利用待替换业务的组件代码,在待替换业务中对目标组件的目标组件代码进行修改,能够在使用组件功能的同时根据业务实现自身的个性化需求,而且可以在不改变集成的第三方组件的代码结构上完成自身逻辑的开发,大大减少了代码的耦合度,解决了因为自身逻辑更改导致第三方组件无法及时更新或者更新困难的问题,并且提供了多种实现工程中的解决方案,保证了iOS开发的进行。
图3为本发明实施例提供的组件代码修改方法的流程示意图,本实施例在图2实施例的基础上,对本实施例的具体实现过程进行了详细说明。如图3所示,该方法包括:
S301、利用第三方库的管理工具集成目标组件,并确定所述目标组件的应用程序编程接口。
这里,以CocoaPods集成所需组件工程为例,可以进一步根据组件工程暴露的API接口完成初期基本的功能实现和调用。
S302、获取待替换业务,并确定所述待替换业务的应用程序编程接口。
具体的,可以根据需求实现需要替换上的业务逻辑,并且暴露出API接口和方法参数,以供调用。
S303、根据所述目标组件和所述待替换业务,确定所述待替换业务的应用程序编程接口对应的所述目标组件的应用程序编程接口中的目标应用程序编程接口。
S304、根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用Run Time、Method Swizzling、继承和Category中的一种或多种,在所述待替换业务中对所述待替换业务的应用程序编程接口和所述目标组件的目标应用程序编程接口进行绑定,并利用所述待替换业务的组件代码,对所述目标组件的目标组件代码进行替换。
上述通过利用Run Time、Method Swizzling、继承、Category等技术,使用组件工程暴露的API接口进行动态绑定、替换,对组件代码进行修改,其中,Runtime的特性主要是消息(方法)传递,如果消息(方法)在对象中找不到,就进行转发。Method Swizzling是发生在运行时的,主要用于在运行时将两个Method进行交换,可以将Method Swizzle代码写到任何地方,但是只有在Method Swizzling这段Method Swizzle代码执行完毕之后互换才起作用。Category是Objective-C 2.0之后添加的语言特性,分类、类别其实都是指的Category。Category的主要作用是为已经存在的类添加方法。Objective-C中的Category就是对装饰模式的一种具体实现。它的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法。
本实施例提供的组件代码修改方法,能够在使用组件功能的同时根据业务实现自身的个性化需求,而且可以在不改变集成的第三方组件的代码结构上完成自身逻辑的开发,大大减少了代码的耦合度,解决了因为自身逻辑更改导致第三方组件无法及时更新或者更新困难的问题。
图4为本发明实施例提供的组件代码修改设备的结构示意图。如图4所示,该组件代码修改设备40包括:组件集成模块401、待替换业务处理模块402、接口对应模块403以及组件代码修改模块404。
其中,组件集成模块401,用于利用第三方库的管理工具集成目标组件,并确定所述目标组件的应用程序编程接口。
待替换业务处理模块402,用于获取待替换业务,并确定所述待替换业务的应用程序编程接口。
接口对应模块403,用于根据所述目标组件和所述待替换业务,确定所述待替换业务的应用程序编程接口对应的所述目标组件的应用程序编程接口中的目标应用程序编程接口。
组件代码修改模块404,用于根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用所述待替换业务的组件代码,在所述待替换业务中对所述目标组件的目标组件代码进行修改。
本实施例提供的设备,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
图5为本发明实施例提供的组件代码修改设备的结构示意图。如图5所示,本实施例在图4实施例的基础上,还包括:第一信息创建模块405、第二信息创建模块406、功能实现模块407和业务确定模块408。
在一种可能的设计中,所述组件代码修改模块404,还用于根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用Run Time、MethodSwizzling、继承和Category中的一种或多种,在所述待替换业务中对所述待替换业务的应用程序编程接口和所述目标组件的目标应用程序编程接口进行绑定,并利用所述待替换业务的组件代码,对所述目标组件的目标组件代码进行替换。
在一种可能的设计中,第一信息创建模块405,用于为所述目标组件创建方法定义、属性和Objective-C源代码文件,所述方法定义用于对所述目标组件的原有方法进行重新定义,所述属性用于对所述目标组件的原有组件的属性进行重新定义,所述Objective-C源代码文件用于声明所述目标组件内部的属性及实现所属类内部的方法。
第二信息创建模块406,用于为所述待替换业务创建方法定义、属性和Objective-C源代码文件。
所述组件代码修改模块404,还用于基于为所述目标组件创建的方法定义、属性和Objective-C源代码文件,以及为所述待替换业务创建的方法定义、属性和Objective-C源代码文件,根据所述待替换业务的应用程序编程接口对应的所述目标组件的目标应用程序编程接口,利用所述待替换业务的组件代码,在所述待替换业务中对所述目标组件的目标组件代码进行修改。
在一种可能的设计中,功能实现模块407,用于根据实现所述目标组件自身业务的方法或者带有实现所述目标组件自身业务的方法的类,确定所述目标组件的功能。
业务确定模块408,用于根据所述目标组件的功能确定所述待替换业务。
在一种可能的设计中,所述待替换业务处理模块402,还用于接收业务调整指令,根据所述业务调整指令调整所述待替换业务,并将调整后的待替换业务作为新的待替换业务,执行所述确定所述待替换业务的应用程序编程接口的步骤。
本实施例提供的设备,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
图6为本发明实施例提供的组件代码修改设备的硬件结构示意图。如图6所示,本实施例的组件代码修改设备60包括:处理器601以及存储器602;其中
存储器602,用于存储计算机执行指令;
处理器601,用于执行存储器存储的计算机执行指令,以实现上述实施例中组件代码修改设备所执行的各个步骤。具体可以参见前述方法实施例中的相关描述。
可选地,存储器602既可以是独立的,也可以跟处理器601集成在一起。
当存储器602独立设置时,该组件代码修改设备还包括总线603,用于连接所述存储器602和处理器601。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上所述的组件代码修改方法。
在本发明所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例所述方法的部分步骤。
应理解,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(Application Specific Integrated Circuits,简称:ASIC)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备或主控设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。