CN109918059A - 应用的功能扩展方法、装置、终端设备和存储介质 - Google Patents
应用的功能扩展方法、装置、终端设备和存储介质 Download PDFInfo
- Publication number
- CN109918059A CN109918059A CN201711329401.1A CN201711329401A CN109918059A CN 109918059 A CN109918059 A CN 109918059A CN 201711329401 A CN201711329401 A CN 201711329401A CN 109918059 A CN109918059 A CN 109918059A
- Authority
- CN
- China
- Prior art keywords
- address
- goal approach
- replacement method
- stored
- approach
- 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
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本申请实施例提供了一种应用的功能扩展方法、装置、终端设备和存储介质,以实现在应用中扩展功能。所述的方法包括:在应用运行过程中,建立存储在第一地址的目标方法和存储在第二地址的替换方法;交换所述目标方法和替换方法的存储地址,并建立存储在第二地址的目标方法和存储在第一地址的替换方法之间的对应关系;执行所述第一地址的替换方法,并依据所述替换方法回调第二地址的目标方法,执行所述目标方法。扩展的替换方法不影响目标方法的正常执行,从而能够实现对应用功能的扩展,具有较好的扩展性和灵活性。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种应用的功能扩展方法、一种应用的功能扩展装置、一种终端设备和一种存储介质。
背景技术
AOP(Aspect Oriented Programming,面向切面编程技术)是可通过预编译和运行期动态代理的方式,实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
针对Android Art虚拟机,现有的AOP方式通常是在编译时插入字节码,如AspectJ,执行的方法是把aspect类(即AOP的切面类)和目标类(被AOP的类)放在一起用,用特殊的编译器进行编译。具体的,可编写目标类;创建PointCut(切入点),该切入点可确定在何处注入一段特定代码的表达式,例如,在哪些joint points(连接点)应用一个特定的Advice(代码);编写Advice,即需要注入到.class文件的代码;然后可执行指令,依据切入点执行织入过程,即注入代码(advices)到目标位置(joint points)的过程,生成新的aspect类;运行该新的aspect类。
但是,上述这种方式在一个APP(Application,应用程序)从发布的平台下载到用户设备后,在应用编译时插入字节码无法发挥作用,即在已经发布的应用程序中无法使用,即上述这种在编译时插入字节码的方式,可扩展性差,灵活性差。
发明内容
本申请实施例所要解决的技术问题是提供一种应用的功能扩展方法,以实现在应用中扩展功能。
相应的,本申请实施例还提供了一种应用的功能扩展装置、一种终端设备和一种存储介质,用以保证上述方法的实现及应用。
为了解决上述问题,本申请实施例公开了一种应用的功能扩展方法,包括:在应用运行过程中,建立存储在第一地址的目标方法和存储在第二地址的替换方法;交换所述目标方法和替换方法的存储地址,并建立存储在第二地址的目标方法和存储在第一地址的替换方法之间的对应关系;执行所述第一地址的替换方法,并依据所述替换方法回调第二地址的目标方法,执行所述目标方法。
本申请实施例还公开了一种应用的功能扩展装置,包括:建立模块,用于在应用运行过程中,建立存储在第一地址的目标方法和存储在第二地址的替换方法;处理模块,用于交换所述目标方法和替换方法的存储地址,并建立存储在第二地址的目标方法和存储在第一地址的替换方法之间的对应关系;执行模块,用于执行所述第一地址的替换方法,并依据所述替换方法回调第二地址的目标方法,执行所述目标方法。
本申请实施例还公开了一种终端设备,包括:一个或多个处理器;和,其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述终端设备执行如本申请实施例中一个或多个所述的应用的功能扩展方法。
本申请实施例还公开了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得终端设备执行如本申请实施例中一个或多个所述的应用的功能扩展方法。
与现有技术相比,本申请实施例包括以下优点:
在本申请实施例中,通过运行时建立存储在第一地址的目标方法和存储在第二地址的替换方法,交换所述目标方法和替换方法的存储地址并建立目标方法和替换方法的关联,从而在执行替换方法时,可依据接口回调目标方法,再执行目标方法,扩展的替换方法不影响目标方法的正常执行,从而能够实现对应用功能的扩展,具有较好的扩展性和灵活性。
附图说明
图1是本申请实施例的一种应用的功能扩展的示意图;
图2是本申请一种应用的功能扩展方法实施例的步骤流程图;
图3是本申请另一种应用的功能扩展方法实施例的步骤流程图;
图4是本申请一种应用的功能扩展装置实施例的结构框图;
图5是本申请另一种应用的功能扩展装置实施例的结构框图;
图6是本申请一实施例提供的装置的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
首先对本申请实施例中所需使用的技术名词进行解释:
AOP(Aspect Oriented Programming,面向切面编程技术)是可通过预编译和运行期动态代理的方式,实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,因此有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。
Advice是注入到class文件中的代码。典型的Advice类型有before、after和around,分别表示在目标方法执行之前、执行后和完全替代目标方法执行的代码。并且,除了在方法中注入代码,也可能会对代码做其他修改,比如在一个class中增加字段或者接口。
Joint point(连接点)是程序中可能作为代码注入目标的特定的点,例如一个方法调用或者方法入口。
Pointcut(切入点)可用于告知代码注入工具,在何处注入一段特定代码的表达式。例如,在哪些joint points应用一个特定的Advice。应用的切入点可以是一个,如执行某一个方法,也可以是多个,如标记了一个定义成@DebguTrace的自定义注解的所有方法等。
Aspect(切面)可由Pointcut和Advice的组合构成。例如,在应用中通过定义一个pointcut给advice,添加一个日志切面。
Weaving(织入)指的是注入代码(advices)到目标位置(joint points)的过程。
ArtMethod是Art虚拟机定义方法的结构体,主要包括:declaring_class、dex_cache_resolved_methods、dex_cache_resolved_types、dex_cache_strings、entry_point_from_interpreter、entry_point_from_jni、dex_code_item_offset、entry_point_from_quick_compiled_code、access_flags和dex_method_index。
对于Android Art虚拟机,现有的AOP方式通常是在编译时插入字节码,但是这种方式不适用于已经安装在终端设备中的应用程序,且该方式可扩展性差,灵活性差。
因此本申请实施例提出一种应用的功能扩展方法,能够基于AOP的方式对已安装在终端设备中的应用进行功能扩展,具有较好的扩展性和灵活性。该方法基于AOP技术和接口调用技术实现应用功能的扩展,可应用于Android Art虚拟机。
参照图1,示出了本申请实施例的一种应用的功能扩展示意图。
本申请实施例的AOP技术主要在运行阶段实现,其中,对于采用Android Art虚拟机的终端设备,应用运行时,加载替换方法,将替换方法和目标方法建立映射关系,执行替换方法后回调目标方法,扩展的替换方法不影响目标方法的正常执行,其能够实现扩展功能,具有较好的扩展性和灵活性,实现了运行时AOP。
因此可在对应用的预编译过程中,基于该应用的字节码编写目标方法(被AOP的方法)和替换方法(执行AOP的方法),即替换方法为在应用中扩展功能对应的方法,而目标方法是应用中已具有功能对应的方法。例如,需要排查应用中存储的问题,因此可依据需要排查的项目编写替换方法,并且确定与该替换方法关联的目标方法,在编写替换方法过程中会编写何时执行,如替换方法在目标方法前执行,以及编写需要调用的接口等信息在替换法方法中。并且预编译完成后,即将目标方法、替换方法均转换存储到应用本地。
用户在终端设备中启动应用并运行,在应用运行过程中,建立存储在第一地址的目标方法和存储在第二地址的替换方法,然后交换所述目标方法和替换方法的存储地址,使第一地址存储替换方法且第二地址存储目标方法,并建立存储在第二地址的目标方法和存储在第一地址的替换方法之间的对应关系,如基于第一地址和第二地址的对应关系建立替换方法和目标方法之间的关联。然后在运行过程中应用正常调用第一地址,从而能够从第一地址获取替换方法并执行,再依据该替换方法回调第二地址中的目标方法,然后执行该目标方法。
其中,交换所述目标方法和替换方法的存储地址的步骤包括:创建存储目标方法的第三地址,将第一地址的目标方法复制到第三地址,将第二地址的替换方法复制到第一地址,将第三地址的目标方法复制到第二地址,删除第三地址,从而采用第一地址存储替换方法,并采用第二地址存储目标方法。
从而运行时基于接口调用建立交换目标方法和替换方法,并目标方法和替换方法的关联,从而在执行替换方法时,可依据接口回调目标方法,再执行目标方法,扩展的替换方法不影响目标方法的正常执行,从而能够实现对应用功能的扩展,具有较好的扩展性和灵活性。
参照图2,示出了本申请一种应用的功能扩展方法实施例的步骤流程图。
步骤202,在应用运行过程中,建立存储在第一地址的目标方法和存储在第二地址的替换方法。
步骤204,交换所述目标方法和替换方法的存储地址,并建立存储在第二地址的目标方法和存储在第一地址的替换方法之间的对应关系。
步骤206,执行所述第一地址的替换方法,并依据所述替换方法回调第二地址的目标方法,执行所述目标方法。
可在预编译过程中,编写被AOP的目标方法,该目标方法可依据具体要扩展的功能、业务需求的等确定,并且编写替换方法,即AOP方法。
在预编译完成后,后续应用程序可运行,运行过程中,建立存储在第一地址的目标方法和存储在第二地址的替换方法,然后可通过接口调用交换目标方法和替换方法的存储地址,使得在第二地址存储目标方法和在第一地址存储替换方法,并基于第一地址和第二地址建立替换方法和目标方法的关联,然后应用程序运行到相应位置执行第一地址的方法,即实际执行了替换方法,基于该替换方法中的接口调用信息,按照对应关系回调第二地址的目标方法,然后执行该目标方法,从而既能够执行扩展的替换方法,也能够执行原始的目标方法。
综上,运行时建立存储在第一地址的目标方法和存储在第二地址的替换方法,交换所述目标方法和替换方法的存储地址并建立目标方法和替换方法的关联,从而在执行替换方法时,可依据接口回调目标方法,再执行目标方法,扩展的替换方法不影响目标方法的正常执行,其能够实现扩展功能,具有较好的扩展性和灵活性。
现有技术中存在一种运行时插入AOP的方式为Xposed方式。该Xposed方式可在运行时替换方法地址,在目标方法前、后执行,或替代目标方法,执行AOP的逻辑,具体的:其编写的替换方法是在目标方法前执行、在目标方法后执行,会替代目标方法,从而在运行时,会将目标方法的地址改成统一的native方法地址,运行的过程中有native方法分发时,native方法根据替换方法来执行相应的逻辑。即替换方法执行时,会跳用native函数,native函数会根据方法的入参去分发方法,从而实现AOP。但是,这种AOP方式是基于Xposed实现的,因此仅仅适用于局限于Dalvik虚拟机,而不能够支持在Android Art虚拟机上实现,且需要系统库的支持,开发难度大。可将上述基于Xposed实现的AOP方式具有局限性。
上述基于Xposed实现的AOP方式是基于反射的方式去调用对象,而本申请实施例提供的AOP方式是基于接口方式实现的,因此可基于JNI层,实现通过JNI接口回调系统原始方法,不需要系统库的支持,能够适用于Android Art虚拟机,具有更好的兼容性,对开发更友好。基于JNI接口回调方式的AOP具体通过如下方式实现:
参照图3,示出了本申请另一种应用的功能扩展方法实施例的步骤流程图。
步骤302,在应用预编译过程中,编写目标方法。
步骤304,创建接入点。
步骤306,编写待执行方法并添加接口调用信息,生成相应的替换方法。
在应用预编译过程中,编写目标方法,该目标方法为应用中设定功能对应的方法,因此会在预编译过程中编写。本申请实施例还可创建PointCut(切入点),该切入点用于指示替换方法和目标方法的执行,即基于目标方法指示对替换方法的注入。例如,该切入点指示代码注入工具在何处注入一段特定代码的表达式,例如,在哪些joint points应用一个特定的Advice(即替换方法),可确定替换方法对应joint point来注入替换方法。
应用预编译过程中还编写替换方法,如Advice,其中替换方法可包括待执行方法和接口调用信息,该待执行方法为需要扩展功能对应的方法数据,例如排查问题的方法,则待执行方法为如何排查的相关方法;接口调用信息用于支持待执行方法,即基于该接口调用信息可确定一个或多个接口,执行替换方法的注入、执行,目标方法的回调等,其中,接口可为JNI(Java Native Interface,Java本地接口),该JNI接口可实现Java和本地代码间的双向交互。
然后可在应用运行过程中执行指令,依据该切入点调用代码注入工具,执行Weaving(织入)过程,即注入替换方法的代码(advices)到目标位置(joint points)的过程,从而生成新的aspect类(AOP的切面类)。此后可执行该aspect类。具体如下:
步骤308,在应用运行过程中,建立存储在第一地址的目标方法和存储在第二地址的替换方法。
然后可在应用运行过程中,基于切入点和替换方法,可确定需要调用的通过JNI接口,然后通过该通过JNI接口交换目标方法和替换方法的存储地址,即在第一地址和第二地址中均存储目标方法,具体如下:
步骤310,创建存储目标方法的第三地址。
步骤312,将所述第一地址的目标方法复制到所述第三地址,将所述第二地址的替换方法复制到所述第一地址,将所述第三地址的目标方法复制到所述第二地址。
步骤314,删除所述第三地址中的目标方法。
其中,可通过如下子步骤实现上述步骤310-314的地址交换:
子步骤S1,通过接口查询目标方法,确定存储所述目标方法的第一地址。
子步骤S2,通过接口查询替换方法,确定存储所述替换方法的第二地址。
子步骤S3,向内存申请地址空间,确定所述地址空间对应的第三地址。
子步骤S4,复制所述目标方法,并将复制的目标方法存储到所述第三地址的地址空间中。
子步骤S5,复制所述替换方法,并将复制的替换方法存储到所述第一地址的地址空间中。
子步骤S6,复制所述第三地址的目标方法,并将复制的目标方法存储到所述第二地址的地址空间中。
子步骤S7,删除第三地址空间中的目标方法。。
可通过JNI接口查询目标方法,确定存储所述目标方法的第一地址,可通过JNI接口查询替换方法,确定存储所述替换方法的第二地址然后向内存发出申请,请求一足够存储目标方法的地址空间,获取该地址空间的地址即第三地址,然后复制所述目标方法,并将复制的目标方法存储到所述第三地址的地址空间中。将复制的替换方法存储到所述第一地址的地址空间中,复制所述第三地址的目标方法,并将复制的目标方法存储到所述第二地址的地址空间中,删除第三地址空间中的目标方法。
例如,通过JNI接口FromReflectedMethod,找到目标方法的内存地址即第一地址jmethodID(src_ptr);通过JNI接口FromReflectedMethod,找到替换方法的内存地址即第二地址jmethodID(dest_ptr);然后申请新的内存地址空间,如通过C++提供的标准函数malloc申请一块新的内存地址new_addr,即第三地址;再复制目标方法到第三地址,如通过C++提供的标准函数memcpy,将目标方法所在的第一地址jmethodID(src_ptr)中所指内容保存到第三地址new_addr内;通过C++提供的标准函数memcpy,将替换方法所在的第二地址jmethodID(dest_ptr)保存到目标方法所在的第一地址jmethodID(src_ptr),将目标方法所在的第三地址jmethodID(new_ptr)中所指内容保存到第二地址dest_ptr内,删除第三地址jmethodID(new_ptr)中所指内容,完成替换方法和目标方法的地址交换。
步骤316,建立存储在第二地址的目标方法和存储在第一地址的替换方法之间的对应关系。
在第一地址中存储替换方法并在第二地址中存储目标方法,因此可建立该第一地址和第二地址的对应关系,通过第一地址能够查询到第二地址,从而获取目标方法。其中,可将所述存储替换方法的第一地址作为查询键,将所述存储目标方法的第二地址作为查询值,建立所述查询键和查询值的对应关系。即将第一地址作为查询键key,将第二地址作为查询值value,从而查询键和查询值的对应关系,即key-value方式的对应关系,通过查询键key可查询到查询值value。如将上例第一地址jmethodID(src_ptr)作为Key值,第二地址dest_ptr做为Value值来存储。
步骤318,从所述第一地址中获取替换方法,执行所述替换方法。
应用运行过程中,应用所指向的方法地址不变,因此应用运行到目标位置(jointpoints)后,指向第一地址的方法,即从所述第一地址中获取替换方法,执行所述替换方法。
步骤320,基于所述替换方法的第一地址和所述对应关系,通过接口回调存储在第二地址的目标方法,执行所述目标方法。
即通过调用接口,确定所述替换方法所在的第一地址;以所述第一地址为查询键查询所述对应关系,确定依据所述第一地址对应的第二地址;通过接口回调存储在第二地址中的目标方法。
例如,应用运行过程中,执行第一地址src_ptr中存储的替换方法,然后回调保存的目标方法,即基于第一地址src_ptr所指函数,可调用JNI接口,通过JNI接口的FromReflectedMethod方法获取存储替换方法的第一地址jmethodID(src_ptr),然后将第一地址jmethodID(src_ptr)作为Key值,查询对应的value值即第二地址dest_ptr,通过JNI接口的JNI CallXXXMethod方法回调第二地址dest_ptr所指的目标方法,然后执行该目标方法。
其中,CallXXXMethod为JNI的接口方法:CallStaticVoidMethodA、CallStaticCharMethodA、CallStaticBooleanMethodA、CallStaticShortMethodA、CallStaticIntMethodA、CallStaticFloatMethodA、CallStaticLongMethodA、CallStaticDoubleMethodA、CallStaticObjectMethodA、CallVoidMethodA、CallCharMethodA、CallBooleanMethodA、CallShortMethodA、CallIntMethodA、CallFloatMethodA、CallLongMethodA、CallDoubleMethodA、CallObjectMethodA。
本申请实施例在运行时插入动态方法,结合Android Art虚拟机自身的特征,通过JNI所提供的系统接口,不需要系统库的支持,从而具有较好的兼容性。因此,相对于在编译时插入字节码的方式,上述运行时插入动态方法具备扩展性好,灵活性好的优点,且替换方法与字节码不同,是可撤销的,即该方式还具备可撤销的能力,能够随时基于需求调整扩展功能。并且,相对于Xposed这种运行时插入动态方法的方式,本申请实施例的接口调用方式具备更好的兼容性,对开发更友好。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。
本申请实施例还提供了一种应用的功能扩展装置,应用于终端设备中,如支持Android Art虚拟机的终端设备。
参照图4,示出了本申请一种应用的功能扩展装置实施例的结构框图,具体可以包括如下模块:
建立模块402,用于在应用运行过程中,建立存储在第一地址的目标方法和存储在第二地址的替换方法。
处理模块404,用于交换所述目标方法和替换方法的存储地址,并存储在第二地址的目标方法和存储在第一地址的替换方法之间的对应关系。
执行模块406,用于执行所述第一地址的替换方法,并依据所述替换方法回调第二地址的目标方法,执行所述目标方法。
综上,运行时建立存储在第一地址的目标方法和存储在第二地址的替换方法,交换所述目标方法和替换方法的存储地址并建立目标方法和替换方法的关联,从而在执行替换方法时,可依据接口回调目标方法,再执行目标方法,扩展的替换方法不影响目标方法的正常执行,从而能够实现对应用功能的扩展,具有较好的扩展性和灵活性。
参照图5,示出了本申请另一种应用的功能扩展装置实施例的结构框图,具体可以包括如下模块:
编写模块400,用于编写目标方法和替换方法。
建立模块402,用于在应用运行过程中,建立存储在第一地址的目标方法和存储在第二地址的替换方法。
处理模块404,用于交换所述目标方法和替换方法的存储地址,并存储在第二地址的目标方法和存储在第一地址的替换方法之间的对应关系。
执行模块406,用于执行所述第一地址的替换方法,并依据所述替换方法回调第二地址的目标方法,执行所述目标方法。
所述处理模块404,包括:交换子模块4042和关系建立子模块4044。
其中,交换子模块4042,用于创建存储目标方法的第三地址,将所述第一地址的目标方法复制到所述第三地址,将所述第二地址的替换方法复制到所述第一地址,将所述第三地址的目标方法复制到所述第二地址,删除所述第三地址中的目标方法。
关系建立子模块4044,用于将所述存储替换方法的第一地址作为查询键,将所述存储目标方法的第二地址作为查询值,建立所述查询键和查询值的对应关系。
一个可选实施例中,所述交换子模块,用于通过接口查询目标方法,确定存储所述目标方法的第一地址;通过接口查询替换方法,确定存储所述替换方法的第二地址;向内存申请地址空间,确定所述地址空间对应的第三地址;复制所述目标方法,并将复制的目标方法存储到所述第三地址的地址空间中;将第二地址的替换方法复制到第一地址,将第三地址的目标方法复制到第二地址。
所述执行模块406,包括:替换执行子模块4062、回调子模块4064和目标执行子模块4066,其中:
替换执行子模块4062,用于从所述第一地址中获取替换方法,执行所述替换方法。
回调子模块4064,用于基于所述替换方法的第一地址和所述对应关系,通过接口回调存储在第二地址的目标方法。
目标执行子模块4066,用于执行所述目标方法。
一个可选实施例中,所述回调子模块4064,用于通过调用接口,确定所述替换方法所在的第一地址;以所述第一地址为查询键查询所述对应关系,确定依据所述第一地址对应的第二地址;通过接口回调存储在第二地址中的目标方法。
所述编写模块402,还用于创建切入点,所述切入点用于指示替换方法和目标方法的执行。
所述编写模块402,用于编写待执行方法并添加接口调用信息,生成相应的替换方法。
其中,所述接口包括:JNI接口。
本申请实施例在运行时插入动态方法,结合Android Art虚拟机自身的特征,通过JNI所提供的系统接口,不需要系统库的支持,从而具有较好的兼容性。因此,相对于在编译时插入字节码的方式,上述运行时插入动态方法具备扩展性好,灵活性好的优点,且替换方法与字节码不同,是可撤销的,即该方式还具备可撤销的能力,能够随时基于需求调整扩展功能。并且,相对于Xposed这种运行时插入动态方法的方式,本申请实施例的接口调用方式具备更好的兼容性,对开发更友好。
本申请实施例还提供了一种终端设备,包括:一个或多个处理器;和其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述终端设备执行如本申请实施例中一个或多个所述的应用的功能扩展方法。
本申请实施例还提供了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得终端设备执行如本申请实施例中一个或多个所述的应用的功能扩展方法。
本公开的实施例可被实现为使用任意适当的硬件,固件,软件,或及其任意组合进行想要的配置的装置,该装置可包括服务器(集群)、终端设备等电子设备。图6示意性地示出了可被用于实现本申请中所述的各个实施例的示例性装置600。
对于一个实施例,图6示出了示例性装置600,该装置具有一个或多个处理器602、被耦合到(一个或多个)处理器602中的至少一个的控制模块(芯片组)604、被耦合到控制模块604的存储器606、被耦合到控制模块604的非易失性存储器(NVM)/存储设备608、被耦合到控制模块604的一个或多个输入/输出设备610,以及被耦合到控制模块606的网络接口612。
处理器602可包括一个或多个单核或多核处理器,处理器602可包括通用处理器或专用处理器(例如图形处理器、应用处理器、基频处理器等)的任意组合。在一些实施例中,装置600能够作为本申请实施例中所述的转码端的服务器等设备。
在一些实施例中,装置600可包括具有指令614的一个或多个计算机可读介质(例如,存储器606或NVM/存储设备608)以及与该一个或多个计算机可读介质相合并被配置为执行指令614以实现模块从而执行本公开中所述的动作的一个或多个处理器602。
对于一个实施例,控制模块604可包括任意适当的接口控制器,以向(一个或多个)处理器602中的至少一个和/或与控制模块604通信的任意适当的设备或组件提供任意适当的接口。
控制模块604可包括存储器控制器模块,以向存储器606提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
存储器606可被用于例如为装置600加载和存储数据和/或指令614。对于一个实施例,存储器606可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,存储器606可包括双倍数据速率类型四同步动态随机存取存储器(DDR4SDRAM)。
对于一个实施例,控制模块604可包括一个或多个输入/输出控制器,以向NVM/存储设备608及(一个或多个)输入/输出设备610提供接口。
例如,NVM/存储设备608可被用于存储数据和/或指令614。NVM/存储设备608可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
NVM/存储设备608可包括在物理上作为装置600被安装在其上的设备的一部分的存储资源,或者其可被该设备访问可不必作为该设备的一部分。例如,NVM/存储设备608可通过网络经由(一个或多个)输入/输出设备610进行访问。
(一个或多个)输入/输出设备610可为装置600提供接口以与任意其他适当的设备通信,输入/输出设备610可以包括通信组件、音频组件、传感器组件等。网络接口612可为装置600提供接口以通过一个或多个网络通信,装置600可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信,例如接入基于通信标准的无线网络,如WiFi、2G、3G、4G等,或它们的组合进行无线通信。
对于一个实施例,(一个或多个)处理器602中的至少一个可与控制模块604的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器602中的至少一个可与控制模块604的一个或多个控制器的逻辑封装在一起以形成系统级封装(SiP)。对于一个实施例,(一个或多个)处理器602中的至少一个可与控制模块604的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器602中的至少一个可与控制模块604的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(SoC)。
在各个实施例中,装置600可以但不限于是:服务器、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)等终端设备。在各个实施例中,装置600可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,装置600包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种应用的功能扩展方法、一种应用的功能扩展装置、一种服务器和一种存储介质,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (14)
1.一种应用的功能扩展方法,其特征在于,包括:
在应用运行过程中,建立存储在第一地址的目标方法和存储在第二地址的替换方法;
交换所述目标方法和替换方法的存储地址,并建立存储在第二地址的目标方法和存储在第一地址的替换方法之间的对应关系;
执行所述第一地址的替换方法,并依据所述替换方法回调第二地址的目标方法,执行所述目标方法。
2.根据权利要求1所述的方法,其特征在于,交换所述目标方法和替换方法的存储地址,包括:
创建存储目标方法的第三地址,将所述第一地址的目标方法复制到所述第三地址,将所述第二地址的替换方法复制到所述第一地址,将所述第三地址的目标方法复制到所述第二地址,删除所述第三地址中的目标方法。
3.根据权利要求2所述的方法,其特征在于,所述创建存储目标方法的第三地址,将所述第一地址的目标方法复制到所述第三地址,将所述第二地址的替换方法复制到所述第一地址,将所述第三地址的目标方法复制到所述第二地址,包括:
通过接口查询目标方法,确定存储所述目标方法的第一地址;
通过接口查询替换方法,确定存储所述替换方法的第二地址;
向内存申请地址空间,确定所述地址空间对应的第三地址;
复制所述目标方法,并将复制的目标方法存储到所述第三地址的地址空间中;
将第二地址的替换方法复制到第一地址,将第三地址的目标方法复制到第二地址。
4.根据权利要求1所述的方法,其特征在于,所述建立存储在第二地址的目标方法和存储在第一地址的替换方法之间的对应关系,包括:
将所述存储替换方法的第一地址作为查询键,将所述存储目标方法的第二地址作为查询值,建立所述查询键和查询值的对应关系。
5.根据权利要求4所述的方法,其特征在于,所述执行所述第一地址的替换方法,并依据所述替换方法回调第二地址的目标方法,执行所述目标方法,包括:
从所述第一地址中获取替换方法,执行所述替换方法;
基于所述替换方法的第一地址和所述对应关系,通过接口回调存储在第二地址的目标方法;
执行所述目标方法。
6.根据权利要求5所述的方法,其特征在于,所述基于替换方法的第一地址和所述对应关系,通过接口回调存储在第二地址的目标方法,包括:
通过调用接口,确定所述替换方法所在的第一地址;
以所述第一地址为查询键查询所述对应关系,确定依据所述第一地址对应的第二地址;
通过接口回调存储在第二地址中的目标方法。
7.根据权利要求1-6任一所述的方法,其特征在于,还包括:
创建切入点,所述切入点用于指示替换方法和目标方法的执行。
8.根据权利要求1-6任一所述的方法,其特征在于,还包括:
编写待执行方法并添加接口调用信息,生成相应的替换方法。
9.根据权利要求1-6任一所述的方法,其特征在于,所述接口包括:Java本地接口JNI。
10.一种应用的功能扩展装置,其特征在于,包括:
建立模块,用于在应用运行过程中,建立存储在第一地址的目标方法和存储在第二地址的替换方法;
处理模块,用于交换所述目标方法和替换方法的存储地址,并建立存储在第二地址的目标方法和存储在第一地址的替换方法之间的对应关系;
执行模块,用于执行所述第一地址的替换方法,并依据所述替换方法回调第二地址的目标方法,执行所述目标方法。
11.根据权利要求10所述的装置,其特征在于,所述处理模块,包括:
交换子模块,用于创建存储目标方法的第三地址,将所述第一地址的目标方法复制到所述第三地址,将所述第二地址的替换方法复制到所述第一地址,将所述第三地址的目标方法复制到所述第二地址,删除所述第三地址中的目标方法。
12.根据权利要求11所述的装置,其特征在于,
所述交换子模块,用于通过接口查询目标方法,确定存储所述目标方法的第一地址;通过接口查询替换方法,确定存储所述替换方法的第二地址;向内存申请地址空间,确定所述地址空间对应的第三地址;复制所述目标方法,并将复制的目标方法存储到所述第三地址的地址空间中;将第二地址的替换方法复制到第一地址,将第三地址的目标方法复制到第二地址。
13.一种终端设备,其特征在于,包括:
一个或多个处理器;和
其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述终端设备执行如权利要求1-9中一个或多个所述的应用的功能扩展方法。
14.一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得终端设备执行如权利要求1-9中一个或多个所述的应用的功能扩展方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711329401.1A CN109918059B (zh) | 2017-12-13 | 2017-12-13 | 应用的功能扩展方法、装置、终端设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711329401.1A CN109918059B (zh) | 2017-12-13 | 2017-12-13 | 应用的功能扩展方法、装置、终端设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109918059A true CN109918059A (zh) | 2019-06-21 |
CN109918059B CN109918059B (zh) | 2022-05-27 |
Family
ID=66958821
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711329401.1A Active CN109918059B (zh) | 2017-12-13 | 2017-12-13 | 应用的功能扩展方法、装置、终端设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109918059B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110780864A (zh) * | 2019-10-30 | 2020-02-11 | 网易(杭州)网络有限公司 | 类方法替换的控制方法及装置、存储介质及电子设备 |
CN112181470A (zh) * | 2020-09-22 | 2021-01-05 | 京东数字科技控股股份有限公司 | 一种部署补丁的方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050086650A1 (en) * | 1999-01-28 | 2005-04-21 | Ati International Srl | Transferring execution from one instruction stream to another |
US8006074B1 (en) * | 2003-12-24 | 2011-08-23 | Altera Corporation | Methods and apparatus for executing extended custom instructions |
CN103109278A (zh) * | 2010-09-22 | 2013-05-15 | 英特尔公司 | 通过地址交换的动态物理存储器替换 |
CN104866293A (zh) * | 2014-02-25 | 2015-08-26 | 北京娜迦信息科技发展有限公司 | 一种对Android应用程序扩展功能的方法及装置 |
CN106844109A (zh) * | 2017-01-23 | 2017-06-13 | 北京腾凌科技有限公司 | 一种固态硬盘的替换方法及装置 |
-
2017
- 2017-12-13 CN CN201711329401.1A patent/CN109918059B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050086650A1 (en) * | 1999-01-28 | 2005-04-21 | Ati International Srl | Transferring execution from one instruction stream to another |
US8006074B1 (en) * | 2003-12-24 | 2011-08-23 | Altera Corporation | Methods and apparatus for executing extended custom instructions |
CN103109278A (zh) * | 2010-09-22 | 2013-05-15 | 英特尔公司 | 通过地址交换的动态物理存储器替换 |
CN104866293A (zh) * | 2014-02-25 | 2015-08-26 | 北京娜迦信息科技发展有限公司 | 一种对Android应用程序扩展功能的方法及装置 |
CN106844109A (zh) * | 2017-01-23 | 2017-06-13 | 北京腾凌科技有限公司 | 一种固态硬盘的替换方法及装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110780864A (zh) * | 2019-10-30 | 2020-02-11 | 网易(杭州)网络有限公司 | 类方法替换的控制方法及装置、存储介质及电子设备 |
CN112181470A (zh) * | 2020-09-22 | 2021-01-05 | 京东数字科技控股股份有限公司 | 一种部署补丁的方法和装置 |
CN112181470B (zh) * | 2020-09-22 | 2024-05-17 | 京东科技控股股份有限公司 | 一种部署补丁的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109918059B (zh) | 2022-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102411506B (zh) | Java系统业务单元插件式管理系统及业务功能动态变更方法 | |
US9262237B2 (en) | Automating software availability management based on API versioning | |
US10331423B1 (en) | Utilizing cross platform streamable user interfaces to reduce software deployment frequency caused by user interface improvements | |
CN105474206A (zh) | 支持按需数据传输的虚拟同步 | |
US10929149B2 (en) | Method and system for updating firmware | |
JP2016505964A (ja) | オンラインストレージシステムでのデータ同期化に関するアプリケーションプログラミングインタフェース | |
US10346150B2 (en) | Computerized system and method for patching an application by separating executables and working data using different images | |
JP2016508349A (ja) | クラスタ境界にわたるサービス移行 | |
CN104267981A (zh) | 一种加载桌面上的应用布局的方法及装置 | |
CN105094774A (zh) | 一种终端系统界面的展示方法和装置 | |
CN111651219A (zh) | 一种多模块项目配置文件管理的方法及设备 | |
US20180239802A1 (en) | Programming language independent software testing environment | |
CN110597552B (zh) | 项目持续集成流水线的配置方法、装置、设备及存储介质 | |
CN109918059A (zh) | 应用的功能扩展方法、装置、终端设备和存储介质 | |
US10719488B2 (en) | Configurable provider for layered repository | |
CN110267077B (zh) | 离线缓存方法、装置、终端及可读存储介质 | |
CN106990974B (zh) | 一种app应用更新方法、装置及电子设备 | |
CN109688180A (zh) | 一种基于镜像的云服务软件升级方法和装置 | |
CN103218228B (zh) | 一种安卓设备内置硬盘实现ntfs文件系统的方法及装置 | |
US10409787B1 (en) | Database migration | |
JPWO2014188515A1 (ja) | ストレージシステムおよびストレージシステムの制御方法 | |
CN110955415A (zh) | 一种投影多平台服务适配的方法 | |
US20220067065A1 (en) | Providing instant and distributed access to a source blob via copy-on-read blobs and link blobs | |
CN115714706A (zh) | 基于内嵌h5的访问加速系统、方法、存储介质及电子设备 | |
CN113282325B (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 |