一种Java本地接口一致性检查方法及系统、存储介质及终端技术方案

技术编号:22185651 阅读:19 留言:0更新日期:2019-09-25 03:29
本发明专利技术提供一种Java本地接口一致性检查方法及系统、存储介质及终端,包括以下步骤:在编译阶段引入记录函数的JNI参数信息的插件;在Native库生成过程中,由所述插件对生成的Native库进行修改,以使所述Native库中增加所述JNI参数信息;JVM运行时,在JNI动态链接过程中,比较Native中的JNI参数信息和Java中的JNI参数信息是否一致,并在一致时通过所述JNI动态链接。本发明专利技术的Java本地接口一致性检查方法及系统、存储介质及终端,在Native库链接阶段由JVM检查Native库中的symbol的完整信息,以确保Java声明中的接口与Native中的实现完全一致,并在不一致的情况下,立即抛出异常,从而避免出现不可预知的行为。

A Java Local Interface Consistency Checking Method and System, Storage Media and Terminal

【技术实现步骤摘要】
一种Java本地接口一致性检查方法及系统、存储介质及终端
本专利技术涉及IT的
,特别是涉及一种Java本地接口一致性检查方法及系统、存储介质及终端。
技术介绍
Java本地接口(JavaNativeInterface,JNI)是一种编程框架,提供了若干的应用程序编程接口(ApplicationProgrammingInterface,API)实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是并不妨碍使用其他编程语言,只要调用约定受支持就可以。使用Java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java虚拟机环境。具体地,Java程序通过JNI可以调用Native程序,反之亦然。Native程序通常由C/C++或者汇编语言编写而成,这使得联合Java与C/C++/ASM等多语言开发成为可能。很多时候都需要诉诸于JNI,例如想在JAVA层面去控制硬件,或者使用一些Native算法优化库,甚至是有时候是需要直接访问底层操作系统的一些服务。具体地,JNI的示例如下:由上可知,Native部分包含一个头文件与一个实现文件,Java部分包含接口的声明,Native库的加载与调用。由于Java代码与Native代码分开编译、打包或链接。如果发生了Native接口实现与Java声明接口之间不一致的问题,则没有办法在编译阶段发现这个问题。更可怕的是,对于C语言实现的JNI来说,即使在Native库加载过程中也没有办法发现此问题。这会导致在程序运行过程中出现不可预料的问题。现有技术中缺乏有效的JNI一致性检查方案。通常的做法是在Java中声明Native方法,然后利用Javah等工具生成Nativecode头文件,Native引用该头文件并按照接口定义进行实现,然后让Nativecode编译器识别接口不一致的现象。上述做法可以一定程度上避免JNI不一致的问题。但是,很多时候开发者并不会按照这个开发流程进行开发,甚至很多开发者完全手动开发Native。由于编码上的失误与测试上的不严密,导致这种不一致的JNI被部属,直到运行时发生不确定的行为。
技术实现思路
鉴于以上所述现有技术的缺点,本专利技术的目的在于提供一种Java本地接口一致性检查方法及系统、存储介质及终端,在Native库链接阶段由Java虚拟机(JavaVirtualMachine,JVM)检查Native库中的symbol的完整信息,以确保Java声明中的接口与Native中的实现完全一致,并在不一致的情况下,立即抛出异常,从而避免出现不可预知的行为。为实现上述目的及其他相关目的,本专利技术提供一种Java本地接口一致性检查方法,包括以下步骤:在编译阶段引入记录函数的JNI参数信息的插件;在Native库生成过程中,由所述插件对生成的Native库进行修改,以使所述Native库中增加所述JNI参数信息;JVM运行时,在JNI动态链接过程中,比较Native中的JNI参数信息和Java中的JNI参数信息是否一致,并在一致时通过所述JNI动态链接。于本专利技术一实施例中,当Native中的JNI参数信息和Java中的JNI参数信息不一致时,立即抛出异常。于本专利技术一实施例中,还包括建立基于函数名到JNI参数信息的索引,以在JNI动态链接过程中根据函数名获取对应的Native中的JNI参数信息。于本专利技术一实施例中,还包括在Native库中增加一个段,并将所述JNI参数信息记录到所述段中。对应地,本专利技术提供一种Java本地接口一致性检查系统,包括引入模块、修改模块和检查模块;所述引入模块用于在编译阶段引入记录函数的JNI参数信息的插件;所述修改模块用于在Native库生成过程中,由所述插件对生成的Native库进行修改,以使所述Native库中增加所述JNI参数信息;所述检查模块用于JVM运行时,在JNI动态链接过程中,比较Native中的JNI参数信息和Java中的JNI参数信息是否一致,并在一致时通过所述JNI动态链接。于本专利技术一实施例中,所述检测模块还用于当Native中的JNI参数信息和Java中的JNI参数信息不一致时,立即抛出异常。于本专利技术一实施例中,所述引入模块还用于建立基于函数名到JNI参数信息的索引,以在JNI动态链接过程中根据函数名获取对应的Native中的JNI参数信息。于本专利技术一实施例中,所述修改模块还用于在Native库中增加一个段,并将所述JNI参数信息记录到所述段中。本专利技术提供一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的Java本地接口一致性检查方法。最后,本专利技术提供一种终端,包括处理器及存储器;所述存储器用于存储计算机程序;所述处理器用于执行所述存储器存储的计算机程序,以使所述终端执行上述的Java本地接口一致性检查方法。如上所述,本专利技术的Java本地接口一致性检查方法及系统、存储介质及终端,具有以下有益效果:(1)在Native库链接阶段由JVM检查Native库中的symbol的完整信息,以确保Java声明中的接口与Native中的实现完全一致;(2)在运行时对JNI一致性进行准确的检查,并在Java声明中的接口与Native中的实现不一致的情况下,立即抛出异常,完全可以避免由于JNI不一致所引起的程序不确定性行为。附图说明图1显示为本专利技术的Java本地接口一致性检查方法于一实施例中的流程图;图2显示为本专利技术的Java本地接口一致性检查系统于一实施例中的结构示意图;图3显示为本专利技术的终端于一实施例中的结构示意图。组件标号说明21引入模块22修改模块23检查模块31处理器32存储器具体实施方式以下通过特定的具体实例说明本专利技术的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本专利技术的其他优点与功效。本专利技术还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本专利技术的精神下进行各种修饰或改变。本专利技术的Java本地接口一致性检查方法及系统、存储介质及终端在Java系统的Native库链接阶段由JVM检查Native库中的symbol的完整信息,以确保Java声明中的接口与Native中的实现完全一致,并在不一致的情况下,立即抛出异常,从而避免出现不可预知的行为,保证了系统运行的稳定性。如图1所示,于一实施例中,本专利技术的Java本地接口一致性检查方法包括以下步骤:步骤S1、在编译阶段引入记录函数的JNI参数信息的插件。具体地,JNI的链接过程中,JVM会先查找symbol对应的JNI实现。对于C++来说,其symbol是manglingname,其由编译器根据函数名和参数信息生成,这本身已经包含了参数信息,所以可以确保在symbol查找成功的情况下JNI的一致性。而对于C语言来说,其编译器并不会由参数信息产生mangli本文档来自技高网
...

【技术保护点】
1.一种Java本地接口一致性检查方法,其特征在于,包括以下步骤:在编译阶段引入记录函数的JNI参数信息的插件;在Native库生成过程中,由所述插件对生成的Native库进行修改,以使所述Native库中增加所述JNI参数信息;JVM运行时,在JNI动态链接过程中,比较Native中的JNI参数信息和Java中的JNI参数信息是否一致,并在一致时通过所述JNI动态链接。

【技术特征摘要】
1.一种Java本地接口一致性检查方法,其特征在于,包括以下步骤:在编译阶段引入记录函数的JNI参数信息的插件;在Native库生成过程中,由所述插件对生成的Native库进行修改,以使所述Native库中增加所述JNI参数信息;JVM运行时,在JNI动态链接过程中,比较Native中的JNI参数信息和Java中的JNI参数信息是否一致,并在一致时通过所述JNI动态链接。2.根据权利要求1所述的Java本地接口一致性检查方法,其特征在于:当Native中的JNI参数信息和Java中的JNI参数信息不一致时,立即抛出异常。3.根据权利要求1所述的Java本地接口一致性检查方法,其特征在于:还包括建立基于函数名到JNI参数信息的索引,以在JNI动态链接过程中根据函数名获取对应的Native中的JNI参数信息。4.根据权利要求1所述的Java本地接口一致性检查方法,其特征在于:还包括在Native库中增加一个段,并将所述JNI参数信息记录到所述段中。5.一种Java本地接口一致性检查系统,其特征在于,包括引入模块、修改模块和检查模块;所述引入模块用于在编译阶段引入记录函数的JNI参数信息的插件;所述修改模块用于在Native库生成过程中,由所述插件对生成的Native...

【专利技术属性】
技术研发人员:王全福张璐波谢巍盛马骏杰
申请(专利权)人:天翼电子商务有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1