首页> 中国专利> Java函数与C函数的绑定方法及装置

Java函数与C函数的绑定方法及装置

摘要

本申请提供一种Java函数与C函数的绑定方法及装置,其中的方法包括:将为目标Java类预定义的绑定接口基于引用传递至目标C文件;其中,所述绑定接口包括所述目标Java类中目标Java函数的描述信息;在目标C文件中调用所述绑定接口获取所述目标Java函数的描述信息;基于所述描述信息建立所述目标Java函数与所述目标C文件中的C函数之间的绑定关系。本申请可以降低绑定Java函数和C函数的复杂度。

著录项

  • 公开/公告号CN107239265A

    专利类型发明专利

  • 公开/公告日2017-10-10

    原文格式PDF

  • 申请/专利权人 阿里巴巴集团控股有限公司;

    申请/专利号CN201610184533.9

  • 发明设计人 朱德亮;

    申请日2016-03-28

  • 分类号G06F9/44(20060101);

  • 代理机构11415 北京博思佳知识产权代理有限公司;

  • 代理人林祥

  • 地址 英属开曼群岛大开曼资本大厦一座四层847号邮箱

  • 入库时间 2023-06-19 03:28:47

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-04-07

    授权

    授权

  • 2017-11-07

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20160328

    实质审查的生效

  • 2017-10-10

    公开

    公开

说明书

技术领域

本申请涉及通信领域,尤其涉及一种Java函数与C函数的绑定方法及装置。

背景技术

在APP的开发过程中,如果希望在Javascript脚本中调用Java函数,通常会涉及到建立APP的Java类中的Java函数与APP的C文件中的C函数的绑定关系的操作。然而,目前在建立Java函数与C函数的绑定关系时,需要开发人员指定需要绑定的Java函数与C函数,然后修改C函数的代码,在C函数中注册与Java函数的对应关系来实现绑定,操作较复杂。

发明内容

本申请提出一种Java函数与C函数的绑定方法,该方法包括:

将为目标Java类预定义的绑定接口基于引用传递至目标C文件;其中,所述绑定接口包括所述目标Java类中目标Java函数的描述信息;

在目标C文件中调用所述绑定接口获取所述目标Java函数的描述信息;

基于所述描述信息建立所述目标Java函数与所述目标C文件中的C函数之间的绑定关系。

可选的,所述基于所述描述信息建立所述目标Java函数与所述目标C文件中的C函数之间的绑定关系之前,所述方法还包括:

从目标html页面中获取Javascript执行代码;

基于预设的语法解析器针对所述Javascript执行代码进行语法解析;

在所述C文件中生成与所述Javascript执行代码对应的C函数。

可选的,所述方法包括:

当所述绑定关系建立完成后,在所述Javascript执行代码中调用所述目标Java函数,以将所述目标html页面转换为native页面在本地显示。

可选的,所述将为目标Java类预定义的绑定接口基于引用传递至目标C文件包括:

在目标Java类中调用预设的第一绑定函数将所述绑定接口的引用地址作为传递参数传递至所述目标C文件中的第二绑定函数。

可选的,所述绑定接口包括预定义的接口函数,所述目标Java函数的描述信息基于Json格式添加在所述接口函数中;

所述在目标C文件中调用所述绑定接口获取所述目标Java函数的描述信息包括:

在所述第二绑定函数中基于所述引用地址调用所述绑定接口;

解析所述绑定接口的接口函数,以获取所述接口函数中预添加的所述目标Java函数的描述信息。

可选的,所述语法解析器为Duktape解析引擎。

本申请还提出一种Java函数与C函数的绑定装置,该装置包括:

传递模块,用于将为目标Java类预定义的绑定接口基于引用传递至目标C文件;其中,所述绑定接口包括所述目标Java类中目标Java函数的描述信息;

第一获取模块,用于在目标C文件中调用所述绑定接口获取所述目标Java函数的描述信息;

绑定模块,用于基于所述描述信息建立所述目标Java函数与所述目标C文件中的C函数之间的绑定关系。

可选的,所述装置还包括:

第二获取模块,用于从目标html页面中获取Javascript执行代码;

解析模块,用于基于预设的语法解析器针对所述Javascript执行代码进行语法解析;

生成模块,用于在所述C文件中生成与所述Javascript执行代码对应的C函数。

可选的,所述装置还包括:

调用模块,用于在所述绑定关系建立完成后,在所述Javascript执行代码中调用所述目标Java函数,以将所述目标html页面转换为native页面在本地显示。

可选的,所述传递模块具体用于:

在目标Java类中调用预设的第一绑定函数将所述绑定接口的引用地址作为传递参数传递至所述目标C文件中的第二绑定函数。

可选的,所述绑定接口包括预定义的接口函数,所述目标Java函数的描述信息基于Json格式添加在所述接口函数中;

所述第一获取模块具体用于:

在所述第二绑定函数中基于所述引用地址调用所述绑定接口;

解析所述绑定接口的接口函数,以获取所述接口函数中预添加的所述目标Java函数的描述信息。

可选的,所述语法解析器为Duktape解析引擎。

本申请中,通过为目标Java类定义绑定接口,在绑定接口中添加待绑定的目标Java函数的描述信息,并将该绑定接口基于引用传递至目标C文件,然后在目标C文件中解析该绑定接口获取目标Java函数的描述信息,并基于获取到的描述信息建立目标Java函数与目标C文件中的C函数之间的绑定关系,实现了在建立目标Java函数与C函数的绑定关系时,只需要为目标Java函数定义绑定接口并将该绑定接口基于引用传递至目标C文件,就可以在目标C文件中自动解析该绑定接口来实现目标Java函数与C函数的绑定,而不需要针对C函数的代码执行任何修改,从而可以降低建立Java函数与C函数绑定关系的复杂度。

附图说明

图1是本申请一实施例提供的一种Java函数与C函数的绑定方法的流程图;

图2是本申请一实施例提供的一种通过Javascript解析引擎针对html页面中的Javascript脚本进行转码在目标C文件中生成对应的C函数的流程图;

图3是本申请一实施例提供的一种Java函数与C函数的绑定装置的逻辑框图;

图4是本申请一实施例提供的承载所述一种Java函数与C函数的绑定装置的客户端的硬件结构图。

具体实施方式

在APP(Application,应用)的开发过程中,通常会具有在Javascript脚本中调用Java函数的需求。

例如,开发人员希望将基于Javascript脚本创建的html(Hyper Text MarkupLanguage,超文本标记语言)页面,转换成APP支持的native页面(APP支持的以Java为底层编程语言的原生页面)在APP中显示时,则需要APP能够支持在Javascript脚本中调用Java函数。

为了实现这种需求,通常可以通过Javascript解析引擎对Javascript脚本进行转码,在APP的C文件中生成与该Javascript脚本对应的C函数,然后建立Java类中需要被调用的Java函数与该C函数的绑定关系。当该绑定关系建立完成后,则可以在Javascript脚本中直接调用该Java函数,从而可以将html页面转换为native页面在APP中显示。

然而,目前在建立Java函数与C函数之间的绑定关系时,通常需要开发人员分别在APP的Java类以及C函数中分别指定待绑定的Java函数以及C函数,然后通过修改C函数的代码,在C函数的代码中注册与Java函数的对应关系来实现绑定。由于在这种方案中,Java类中待绑定的Java函数会分别对应一个C文件中的C函数,因此当需要绑定的Java函数和C函数数量较多时,需要开发人员逐一修改C函数的代码,代码冗余量较大,操作较复杂。

有鉴于此,本申请提出一种Java函数与C函数的绑定方法,通过为目标Java类定义绑定接口,在绑定接口中添加待绑定的目标Java函数的描述信息,并将该绑定接口基于引用传递至目标C文件,然后在目标C文件中解析该绑定接口获取目标Java函数的描述信息,并基于获取到的描述信息建立目标Java函数与目标C文件中的C函数之间的绑定关系,实现了在建立目标Java函数与C函数的绑定关系时,只需要为目标Java函数定义绑定接口并将该绑定接口基于引用传递至目标C文件,就可以在目标C文件中自动解析该绑定接口来实现目标Java函数与C函数的绑定,而不需要针对C函数的代码执行任何修改,从而可以降低建立Java函数与C函数绑定关系的复杂度。

下面通过具体实施例并结合具体的应用场景对本申请进行描述。

请参考图1,图1是本申请一实施例提供的一种Java函数与C函数的绑定方法,应用于客户端,所述方法执行以下步骤:

步骤101,将为目标Java类预定义的绑定接口基于引用传递至目标C文件;其中,所述绑定接口包括所述目标Java类中目标Java函数的描述信息;

步骤102,在目标C文件中调用所述绑定接口获取所述目标Java函数的描述信息;

步骤103,基于所述描述信息建立所述目标Java函数与所述目标C文件中的C函数之间的绑定关系。

上述客户端,可以包括面向用户提供特定功能的客户端软件;例如,该客户端软件可以是用户的智能终端上安装的APP。

上述Java类,是指APP的源代码中以Java语言为编程语言的类文件(后缀名为.Java的源文件);上述C文件,是指APP的源代码中以C语言为编程语言的类文件(后缀名为.C的源文件)。上述目标Java函数,是指开发人员基于实际的业务需求,在目标Java类中指定的需要与目标C文件中的C函数建立绑定关系的Java函数。

其中,以上需要建立绑定关系的Java函数与C函数可以是功能相近,或者功能完全对等的函数,从而当二者的绑定关系建立完成后,可以通过互相调用,在不同的编程语言环境下实现相同的功能。

在本例中,如果需要实现在Javascript脚本中调用Java函数,将基于Javascript脚本创建的html页面转换成APP支持的native页面在APP中显示,通常可以通过Javascript解析引擎针对html页面中的Javascript脚本进行转码,在目标C文件中生成与该Javascript脚本对应的目标C函数,从而在通过步骤101至步骤103示出的技术方案,建立目标Java函数与该目标C函数的绑定关系后,可以通过目标Java函数与该目标C函数的互相调用,针对上述html页面中的Javascript脚本实现转码,将上述html页面转换为APP支持的native页面在APP中进行显示。

请参见图2,图2为本例中示出的通过Javascript解析引擎针对html页面中的Javascript脚本进行转码在目标C文件中生成对应的C函数的处理流程图,包括以下执行步骤:

步骤201,从目标html页面中获取Javascript执行代码;

在本例中,上述目标html页面可以是部署在服务端的html页面,APP可以通过与服务端进行交互,将部署在服务端的html页面“下拉”至本地;例如,可以主动向服务端请求html页面,也可以由服务端主动推送html页面。其中,上述服务端,可以是面向上述APP提供服务端的服务器、服务器集群或者基于服务器集群构建的云平台;例如,在实现时,上述APP可以是支付宝APP,上述服务端可以是支付宝平台,上述html页面可以是用户在支付宝APP的页面中执行特定的支付操作后,支付宝APP需要跳转的支付页面。

在上述html页面中,可以预先内嵌Javascript执行代码。上述APP将该html页面“下拉”至本地后,由于编程语言的不兼容,APP通常无法在本地直接执行html页面中的Javascript执行代码,将该html页面在本地显示。在这种情况下,APP可以获取该html页面中内嵌的Javascript执行代码在本地保存,然后针对该Javascript执行代码执行后续的转码操作,以将该html页面转换为APP支持的native页面。

步骤202,基于预设的语法解析器针对所述Javascript执行代码进行语法解析;

在本例中,上述语法解析器可以是APP预设的Javascript解析引擎。

其中,该Javascript解析引擎可以是Duktape解析引擎。Duktape解析引擎是一款主流的Javascript嵌入式开源引擎,其自身可以充当语法解析器对Javascript执行语法解析,将Javascript执行代码嵌入C文件中。

APP可以通过Duktape解析引擎针对从目标html页面中获取到的Javascript执行代码进行语法解析,以解析出该Javascript执行代码的语法。

步骤203,在所述C文件中生成与所述Javascript执行代码对应的C函数。

当APP通过Duktape解析引擎完成针对上述Javascript执行代码的语法解析后,可以根据解析出的该Javascript执行代码的语法在目标C文件的内存中,生成与该Javascript执行代码对应的C函数,从而可以实现将目标html页面中的Javascript执行代码嵌入目标C文件的目的。

当APP利用Duktape解析引擎,在目标C文件中生成了与目标html页面中的Javascript执行代码对应的C函数后,此时APP可以基于步骤101至步骤103中示出的技术方案,开始建立上述目标Java函数与目标C文件中的上述C函数之间的绑定关系。

在本例中,APP在开始建立上述目标Java函数与目标C文件中的上述C函数之间的绑定关系之前,APP的开发人员可以为指定的目标Java类预先定义绑定接口。

其中,该绑定接口,为开发人员为目标Java类定义的Java接口。在上述绑定接口的结构中,通常包含开发人员为该接口声明的方法,以及该方法的描述信息。

在本例中,开发人员在为上述绑定接口声明方法时,可以在该方法中定义预先定义一个接口函数,该接口函数可以是开发人员定义的Java函数,该Java函数用于携带目标Java类中需要进行绑定的一个或者多个目标Java函数的描述信息。当开发人员在上述绑定接口的方法中定义了上述接口函数后,可以将该目标Java类中需要进行绑定的一个或者多个Java函数的描述信息添加在该接口函数中。

在示出的一种实施方式中,开发人员在该接口函数中添加需要绑定的目标Java函数的描述信息时,可以将描述信息以Json格式添加至该接口函数中。Json格式是一种流行的数据存储格式,可以将数据以大字段的形式进行存储,具有存储的数据便于解析的特点。因此,将目标Java函数的描述信息以Json格式存储至上述接口函数中,更加利于APP后续对存储的描述信息进行解析。

例如,开发人员可以通过编辑如下代码来为目标Java类定义绑定接口:

Public interface Scriptable;

public String getScriptConfigJson();

{“count”:2,“array”:[{“JavaMethod”:“method1”},{“JavaMethod”:“method2”}],“name”:“JavaWindow”}

在以上代码中,JavaWindow为目标Java类,Scriptable为开发人员为目标Java类JavaWindow定义的绑定接口;以上第二行代码即为该绑定接口Scriptable中包含的方法,在该方法中,getScriptConfigJson即为开发人员定义的接口函数。以上第三第四行代码即为开发人员为接口函数getScriptConfigJson添加的Json格式的需要绑定的目标Java函数的描述信息,在上述描述信息中method1和method2即为待绑定的目标Java函数。在本例中,当开发人员为目标Java类定义了绑定接口后,APP可以利用Java体系中的参数传递机制,基于引用将该绑定接口传递至目标C文件,以使得可以在目标C文件中调用该绑定接口来获取该绑定接口中的上述描述信息。

其中,基于Java体系的参数传递机制,APP在基于引用将该绑定接口传递至目标C文件时,可以将该绑定接口在内存中的引用地址作为传递参数传递至目标C文件。

在示出的一种实施方式中,当APP在启动时,可以在目标Java类中调用预设的第一绑定函数(Java函数),将上述绑定接口的引用地址作为传递参数,传递至目标C文件中的第二绑定函数(C函数)。其中,上述第一绑定函数为目标Java类中的native函数,用于对目标C文件中的第二绑定函数进行调用。

当APP通过在目标Java类中调用预设的第一绑定函数,将上述绑定接口的引用地址作为传递参数,传递至目标C文件中的第二绑定函数后,APP可以在目标C文件中调用该绑定接口来获取需要绑定的目标Java函数的描述信息。

其中,APP在目标C文件中调用该绑定接口来获取目标Java函数的描述信息,可以通过上述第二绑定函数来实现。

在这种情况下,由于上述绑定接口的引用地址已由上述第一绑定函数传递至上述第二绑定函数本地,APP可以在目标C文件中调用上述第二绑定函数,在第二绑定函数中基于上述绑定接口的引用地址来调用上述绑定接口,并在第二绑定函数中执行该绑定接口中声明的方法,通过自动解析该方法中的接口函数,来获取开发人员为该接口函数预添加的Json格式的上述需要绑定的目标Java函数的描述信息。

例如,在实现时,上述第一绑定函数可以为目标Java类中的bindJavaToC函数,上述第一绑定函数为目标C文件中的bind函数(Java体系已有的绑定机制决定);其中,上述bindJavaToC函数为目标Java类中的native函数,用于调用目标C文件中的bind函数。

APP在基于引用传递上述绑定接口至目标C文件时,可以调用bindJavaToC函数,将上述绑定接口的引用地址作为传递参数,传递至目标C文件中的bind函数。

假设上述目标Java类为JavaWindow,上述绑定接口为Scriptable,上述接口函数为getScriptConfigJson,当参数传递完成后,APP可以在目标C文件中调用bind函数,执行上述绑定接口中声明的方法,并解析该方法中的接口函数getScriptConfigJson,来获取开发人员为该接口函数getScriptConfigJson预添加的需要绑定的目标Java函数的描述信息。

在本例中,当APP通过解析上述接口函数,获取到开发人员为上述接口函数预添加的目标Java函数的描述信息后,后续可以基于获取到的该描述信息,在目标C文件的内存中记录在该描述信息中由开发人员指定的目标Java函数与上述目标C文件中的C函数之间的对应关系,以完成目标Java函数与上述目标C文件中的C函数之间绑定关系的建立。

例如,假设上述目标Java函数的描述信息为:

{“count”:2,“array”:[{“JavaMethod”:“method1”},{“JavaMethod”:“method2”}],“name”:“JavaWindow”}

基于以上描述信息,method1和method2即为待绑定的目标Java函数,APP可以在目标C文件的内存中记录目标Java函数method1和method2与该目标C文件中的C函数的对应关系,完成该目标C文件中的C函数与上述目标Java函数method1和method2之间绑定关系的建立。

可见,通过这种方式,在建立目标Java函数与C函数的绑定关系时,开发人员只需要为目标Java函数定义绑定接口,并在该绑定接口中添加目标Java函数的描述信息,就可以在目标C文件中自动解析该绑定接口来实现目标Java函数与C函数的绑定。整个绑定过程中,开发人员不再需要针对C函数的代码执行任何修改,从而可以减少代码的冗余量,降低建立Java函数与C函数绑定关系的复杂度。

另外,需要说明的是:

在实际应用中,一方面,当目标Java类中新增了需要与C函数建立绑定关系的目标Java函数,开发人员也可以对上述描述信息中的目标Java函数进行更新,APP在启动后,可以重复执行以上过程,在目标C文件中自动解析该绑定接口来实现目标Java函数与C函数的绑定。

另一方面,当APP中新增了Java类,并且该Java类中存在需要与C函数建立绑定关系的Java函数时,开发人员则只需要为该Java类定义绑定接口,然后为APP更新版本,使得APP在启动后,也可以重复执行以上过程,在目标C文件中自动解析该绑定接口来实现目标Java函数与C函数的绑定。

在本例中,当上述目标Java函数与目标C文件中的C函数的绑定关系建立完成之后,APP中目标Java类中的目标Java函数已能够正常的与目标C文件中的C函数进行互相调用。而且,由于此时目标C文件的C函数中包括APP通过Javascript解析引擎针对html页面中的Javascript脚本进行语法解析后,在目标C文件中生成的与html页面中的Javascript脚本对应的C函数,因此APP可以通过目标Java函数与目标C文件中的C函数之间的互相调用,来实现在上述目标html页面中的Javascript脚本中调用目标Java函数。

在这种情况下,APP可以通过在上述目标html页面中的Javascript脚本中调用目标Java函数,完成对上述Javascript脚本的转码,将上述html页面转换为APP支持的native页面在APP中进行显示。

在以上实施例中,通过为目标Java类定义绑定接口,在绑定接口中添加待绑定的目标Java函数的描述信息,并利用Java体系现有的参数传递机制,将该绑定接口基于引用传递至目标C文件,然后在目标C文件中自动解析该绑定接口获取目标Java函数的描述信息,基于获取到的描述信息来建立目标Java函数与目标C文件中的C函数之间的绑定关系,实现了在建立目标Java函数与C函数的绑定关系时,只需要为目标Java函数定义绑定接口并将该绑定接口基于引用传递至目标C文件,就可以在目标C文件中自动解析该绑定接口来实现目标Java函数与C函数的绑定,而不需要针对C函数的代码执行任何修改,从而可以降低建立Java函数与C函数绑定关系的复杂度。

与上述方法实施例相对应,本申请还提供了装置的实施例。

请参见图3,本申请提出一种Java函数与C函数的绑定装置30,应用于客户端;其中,请参见图4,作为承载所述Java函数与C函数的绑定装置30的客户端所涉及的硬件架构中,通常包括CPU、内存、非易失性存储器、网络接口以及内部总线等;以软件实现为例,所述Java函数与C函数的绑定装置30通常可以理解为加载在内存中的计算机程序,通过CPU运行之后形成的软硬件相结合的逻辑装置,所述装置30包括:

传递模块301,用于将为目标Java类预定义的绑定接口基于引用传递至目标C文件;其中,所述绑定接口包括所述目标Java类中目标Java函数的描述信息;

第一获取模块302,用于在目标C文件中调用所述绑定接口获取所述目标Java函数的描述信息;

绑定模块303,用于基于所述描述信息建立所述目标Java函数与所述目标C文件中的C函数之间的绑定关系。

在本例中,所述装置30还包括:

第二获取模块304,用于从目标html页面中获取Javascript执行代码;

解析模块305,用于基于预设的语法解析器针对所述Javascript执行代码进行语法解析;

生成模块306,用于在所述C文件中生成与所述Javascript执行代码对应的C函数。

在本例中,所述装置30还包括:

调用模块307,用于在所述绑定关系建立完成后,在所述Javascript执行代码中调用所述目标Java函数,以将所述目标html页面转换为native页面在本地显示。

在本例中,所述传递模块301具体用于:

在目标Java类中调用预设的第一绑定函数将所述绑定接口的引用地址作为传递参数传递至所述目标C文件中的第二绑定函数。

在本例中,所述绑定接口包括预定义的接口函数,所述目标Java函数的描述信息基于Json格式添加在所述接口函数中;

所述第一获取模块302具体用于:

在所述第二绑定函数中基于所述引用地址调用所述绑定接口;

解析所述绑定接口的接口函数,以获取所述接口函数中预添加的所述目标Java函数的描述信息。

在本例中,所述语法解析器为Duktape解析引擎。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。

应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号