一种Java应用与非JNI规范二进制文件相互调用的方法技术

技术编号:16700491 阅读:32 留言:0更新日期:2017-12-02 12:46
一种Java应用与非JNI规范二进制文件相互调用的方法,包括:判断二进制文件是否是JNI规范二进制文件:如是JNI规范二进制文件,则编写JNI规范的函数调用文件;如是非JNI规范二进制文件,则对所述二进制文件进行JNI规范化,进一步编写对JNI规范化后的函数调用文件。本设计发明专利技术实现了Java应用对包含类成员函数的非JNI规范二进制文件调用,解决了不同平台下函数之间的相互调用问题,实现了函数直接调用的无缝衔接。本设计发明专利技术同样适用于Java层调用不包含类成员函数的非JNI规范二进制文件以及JNI规范的二进制文件。此外同样适用于Android Studio开发平台,为多种平台下的通用方案。

A method for Java applications to call each other with non JNI specification binary files

Including the method, a Java application and non JNI standard binary file call each other: judging whether the file is a binary JNI code binary file: JNI specification is a binary file, written file function calls the JNI specification; if non JNI standard binary files, then JNI of the binary file, further written the JNI standard function call file. This design realizes the application of Java to call non JNI standard binary files containing class member functions, solves the problem of calling each other between functions under different platforms, and realizes the seamless connection of function direct call. The design invention also applies to the Java layer called non - JNI standard binary files that do not contain class member functions and the binary files of the JNI specification. In addition, the same applies to the Android Studio development platform for the general scheme under a variety of platforms.

【技术实现步骤摘要】
一种Java应用与非JNI规范二进制文件相互调用的方法
本专利技术涉及一种Java应用与非JNI规范二进制文件相互调用的方法,属于计算机技术应用的

技术介绍
跨平台开发技术越来越多,如何实现不同平台下文件的相互调用亟待解决。Java应用开发是目前三大开发技术之一。二进制文件是跨平台开发常用的交接方式,但是二进制文件分为JNI规范二进制文件和非JNI规范二进制文件,其中,对于JNI规范二进制文件,Java层可以通过JNI层转换实现对该文件的调用,而对于非JNI规范二进制文件则无法调用。此外,所述二进制文件还可按照以下分类:即包含类成员函数和不包含类成员函数两种,对于包含类成员函数的二进制文件,目前采用dlopen()和dlsym()相结合的方式进行调用,但是该方法复杂且不易实现,因此,现有
需要寻找一种调用包含类成员函数的非JNI规范的二进制文件显得尤为重要。C++函数可以直接调用包含类成员函数的非JNI文件,即将C++函数与非JNI规范的二进制文件调用的CPP文件JNI规范化,但是在java环境下利用C++是不能调用非JNI规范的文件的。
技术实现思路
针对现有技术的不足,本专利技术提供一种Java应用与非JNI规范二进制文件相互调用的方法。本专利技术设计基于Eclipse开发平台,分析了二进制文件的类别,以及生成二进制文件的函数类型,针对包含类成员函数的非JNI规范的二进制文件,设计实现了JNI规范化以及Java层与规范化后相互调用方法,从而实现Java层调用非JNI规范的二进制文件。本专利技术的技术方案如下:一种Java应用与非JNI规范二进制文件相互调用的方法,包括:判断二进制文件是否是JNI规范二进制文件:如是JNI规范二进制文件,则编写JNI规范的函数调用文件;如是非JNI规范二进制文件,则对所述二进制文件进行JNI规范化,进一步编写对JNI规范化后的函数调用文件。根据本专利技术优选的,所述JNI规范化的步骤如下:(1)创建Java应用工程:声明对二进制文件的调用方法,并对所述Java应用工程添加本地方法的支持,工程生成jni包;(2)终端下编译出.h头文件,根据.h头文件编写JNI规范化的CPP文件,所述CPP文件中的函数命名符合JNI规范,实现对二进制文件的调用,以及与Java层的交互;(3)编写Android.mk文件:该文件是将CPP文件与二进制文件封装在一起的关键,封装生成的动态链接库供Java层调用,将非JNI规范的二进制文件规范化。根据本专利技术优选的,在步骤(2)中,所述二进制文件是通过回调的方式实现对CPP文件中函数调用的。根据本专利技术优选的,在步骤(3)中,所述Android.mk文件将上CPP文件、二进制文件的头文件及二进制文件编译在一起,生成JNI规范化的二进制文件。根据本专利技术优选的,在步骤(1)中,在Java应用工程中实现调用二进制文件的native方法。根据本专利技术优选的,在步骤(2)中,所述终端下编译出.h文件是指,在终端下,进入Android项目的bin目录下,找到classes文件夹,在该目录下,采用javah方法,生成所述.h头文件。根据本专利技术优选的,在步骤(2)中,将步骤(2)生成的.h头文件添加到所述jni包中,在所述jni包下创建调用非JNI规范的CPP文件中的CPP函数,所述CPP文件中实现对二进制文件中各成员函数的调用。根据本专利技术优选的,在步骤(3)中,在所述jni包中编写Android.mk文件,Android.mk文件将上CPP文件、二进制文件的h.头文件及二进制文件编译在一起,生成JNI规范化的二进制文件。根据本专利技术优选的,所述Java应用与非JNI规范二进制文件相互调用的方法中包括,判断非JNI规范二进制文件是否是包含类成员函数的非JNI规范二进制文件:如是包含类成员函数的非JNI规范二进制文件,则对所述二进制文件JNI规范化,并编写对含有类成员函数的非JNI规范二进制文件进行相互调用的文件;如是不包含类成员函数的非JNI规范二进制文件,则对所述二进制文件JNI规范化,并编写对不含有类成员函数的非JNI规范二进制文件进行相互调用的文件。本专利技术的技术优势在于:本专利技术主要针对Java应用无法直接调用非JNI规范的二进制文件的技术不足,通过JNI层(Java层调用native方法的一个接口)转换及JNI规范化,实现Java应用与非JNI规范的二进制文件的相互调用。本专利技术所述的方法能够应用在安卓系统和其它应用平台之间,实现相互合作的统一规范、数据共享、共同完成开发,使其它应用平台的数据也可以应用到安卓平台当中。本设计专利技术实现了Java应用对包含类成员函数的非JNI规范二进制文件调用,解决了不同平台下函数之间的相互调用问题,实现了函数直接调用的无缝衔接。本设计专利技术同样适用于Java层调用不包含类成员函数的非JNI规范二进制文件以及JNI规范的二进制文件。此外同样适用于AndroidStudio开发平台,为多种平台下的通用方案。附图说明图1是本专利技术中对所述二进制文件的判断处理流程示意图;图2是本专利技术Java应用与非JNI规范的二进制文件互调中所述JNI规范化流程示意图。具体实施方式下面结合实施例和说明书附图对本专利技术做详细的说明,但不限于此。如图1-2所示。实施例1、一种Java应用与非JNI规范二进制文件相互调用的方法,包括:判断二进制文件是否是JNI规范二进制文件:如是JNI规范二进制文件,则编写JNI规范的函数调用文件;如是非JNI规范二进制文件,则对所述二进制文件进行JNI规范化,进一步编写对JNI规范化后的函数调用文件。所述JNI规范化的步骤如下:(1)创建Java应用工程:声明对二进制文件的调用方法,并对所述Java应用工程添加本地方法的支持,工程生成jni包;(2)终端下编译出.h头文件,根据.h头文件编写JNI规范化的CPP文件,所述CPP文件中的函数命名符合JNI规范,实现对二进制文件的调用,以及与Java层的交互;(3)编写Android.mk文件:该文件是将CPP文件与二进制文件封装在一起的关键,封装生成的动态链接库供Java层调用,将非JNI规范的二进制文件规范化。在步骤(2)中,所述二进制文件是通过回调的方式实现对CPP文件中函数调用的。在步骤(3)中,所述Android.mk文件将上CPP文件、二进制文件的头文件及二进制文件编译在一起,生成JNI规范化的二进制文件。在步骤(1)中,在Java应用工程中实现调用二进制文件的native方法。在步骤(2)中,所述终端下编译出.h文件是指,在终端下,进入Android项目的bin目录下,找到classes文件夹,在该目录下,采用javah方法,生成所述.h头文件。在步骤(2)中,将步骤(2)生成的.h头文件添加到所述jni包中,在所述jni包下创建调用非JNI规范的CPP文件中的CPP函数,所述CPP文件中实现对二进制文件中各成员函数的调用。在步骤(3)中,在所述jni包中编写Android.mk文件,Android.mk文件将上CPP文件、二进制文件的h.头文件及二进制文件编译在一起,生成JNI规范化的二进制文件。在Java类添加调用规范化二进制文件链接方法,采用system.lo本文档来自技高网...
一种Java应用与非JNI规范二进制文件相互调用的方法

【技术保护点】
一种Java应用与非JNI规范二进制文件相互调用的方法,其特征在于,该方法包括:判断二进制文件是否是JNI规范二进制文件:如是JNI规范二进制文件,则编写JNI规范的函数调用文件;如是非JNI规范二进制文件,则对所述二进制文件进行JNI规范化,进一步编写对JNI规范化后的函数调用文件。

【技术特征摘要】
1.一种Java应用与非JNI规范二进制文件相互调用的方法,其特征在于,该方法包括:判断二进制文件是否是JNI规范二进制文件:如是JNI规范二进制文件,则编写JNI规范的函数调用文件;如是非JNI规范二进制文件,则对所述二进制文件进行JNI规范化,进一步编写对JNI规范化后的函数调用文件。2.根据权利要求1所述的一种Java应用与非JNI规范二进制文件相互调用的方法,其特征在于,所述JNI规范化的步骤如下:(1)创建Java应用工程:声明对二进制文件的调用方法,并对所述Java应用工程添加本地方法的支持,工程生成jni包;(2)终端下编译出.h头文件,根据.h头文件编写JNI规范化的CPP文件,所述CPP文件中的函数命名符合JNI规范,实现对二进制文件的调用,以及与Java层的交互;(3)编写Android.mk文件:封装生成的动态链接库供Java层调用,将非JNI规范的二进制文件规范化。3.根据权利要求2所述的一种Java应用与非JNI规范二进制文件相互调用的方法,其特征在于,在步骤(2)中,所述二进制文件是通过回调的方式实现对CPP文件中函数调用的。4.根据权利要求2所述的一种Java应用与非JNI规范二进制文件相互调用的方法,其特征在于,在步骤(3)中,所述Android.mk文件将上CPP文件、二进制文件的头文件及二进制文件编译在一起,生成JNI规范化的二进制文件。5.根据权利要求2所述的一种Java应用与非JNI规范二进制文件相互调用的方法,其特征在于,在步骤(1)中,在Java应用工程中实现调用二进制文件的...

【专利技术属性】
技术研发人员:张芳庆马双涛陈亮甫孙超王朝晖
申请(专利权)人:山东超越数控电子有限公司
类型:发明
国别省市:山东,37

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

1