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

文档序号:13072449阅读:729来源:国知局
一种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.loadlibrary(“*.so”);方法。编译java应用工程,java应用与二进制文件相互调用完成。

实施例2、

如实施例1所述的一种java应用与非jni规范二进制文件相互调用的方法,其区别在于,所述java应用与非jni规范二进制文件相互调用的方法中包括,判断非jni规范二进制文件是否是包含类成员函数的非jni规范二进制文件:如是包含类成员函数的非jni规范二进制文件,则对所述二进制文件jni规范化,并编写对含有类成员函数的非jni规范二进制文件进行相互调用的文件;如是不包含类成员函数的非jni规范二进制文件,则对所述二进制文件jni规范化,并编写对不含有类成员函数的非jni规范二进制文件进行相互调用的文件。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1