jni学习简单例子
来源:互联网 发布:ceic数据库与wind 编辑:程序博客网 时间:2024/05/16 14:35
最近看了些jni的东西,简单学着写了点,工程目录结构如图
首先主要java 类,代码如下:
package jni;public class MyJni { static {System.loadLibrary("MyJNI"); } public native String getStr(String str); public MyJni() {// TODO 自动生成的构造函数存根System.out.println(getStr("g++")); } public static void main(String[] args) {new MyJni(); }}
jni方法用native修饰
然后使用javah命令生成头文件,命令为
javah -classpath 工程目录\bin\ -d 工程目录\jni -jni jin.MyJni
-classpath 指定class文件的目录,-d 输出的目录, jin.MyJni 是要生成头文件的java类
使用eclipse的话可以添加外部工具,可以很方便生成头文件,具体方法以后再写
下面是生成的头文件
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class jni_MyJni */#ifndef _Included_jni_MyJni#define _Included_jni_MyJni#ifdef __cplusplusextern "C" {#endif/* * Class: jni_MyJni * Method: getStr * Signature: (Ljava/lang/String;)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_jni_MyJni_getStr (JNIEnv *, jobject, jstring);#ifdef __cplusplus}#endif#endif
然后是对应的c++的源码
<pre name="code" class="cpp">#include <jni.h>#include "jni_MyJni.h"#include <iostream>using std::cout;using std::endl;JNIEXPORT jstring JNICALL Java_jni_MyJni_getStr (JNIEnv * env, jobject, jstring pram){jstring str=env->NewStringUTF("fdsf");const char *dname=NULL;dname = env->GetStringUTFChars(pram, 0);printf("%s",dname);return str;}
jni.h文件是java的jdk里的,编译环境需要添加jdk目录,否则找不到
jni_MyJni.h就是刚才用javah命令生成的头文件
c++代码就是返回一个jstring字符串,并输出一段字符
c++需要编译成dll文件才能调用,我使用minGW进行编译。
可以新建一个c++项目,进行编译,不过还有方便的方法,eclipse的外部工具可以帮助编译,具体方法也是以后再写。
编译完成后生成我们需要的MyJNI.dll
此时java还找不到此文件了,我们需要配置工程的构建路径,项目上右键-》构建路径-》配置构建路径-》添加库-》插件依赖项-》完成
点开那个折叠箭头
如图
本机库位置编辑,工作空间,选择你MyJNI.dll文件位置。然后编译运行java方法,就可以正常运行了。结果如下图:
java和c++中都输出的文本。
2 0
- jni学习简单例子
- JNI 简单例子
- JNI简单的例子
- 实现JNI最简单例子
- Android中关于JNI 的学习(零)简单的例子,简单地入门
- Android中关于JNI 的学习(零)简单的例子,简单地入门
- NDK学习---hello JNI例子
- NDK学习---hello JNI例子
- Android中关于JNI 的学习(四)简单的例子,温故而知新
- JNI使用流程及简单例子
- Android NDK JNI 简单例子2
- cxf 简单例子学习
- jni例子
- JNI例子
- 利用VC++6.0实现JNI的最简单的例子.
- 利用VC++6.0实现JNI的最简单的例子
- JNI 简单例子小结 (调用外部DLL)
- 利用VC++6.0实现JNI的最简单的例子.
- hive纪要
- 蓝桥杯历届-立方尾不变
- 设计模式(11)--Mediator中介者模式&Observer观察者模式
- Android掉系统通讯录并返回姓名电话
- 卡片游戏
- jni学习简单例子
- Android中的进程和线程
- js鼠标右键的方法
- 如何在present出来的viewController里使用push方法
- 使用Android Studio阅读整个Android源码
- 计算机网络——1.计算机网络基础
- 【BZOJ1001】【Beijing2006】狼抓兔子(平面图转对偶图:最小割+最短路)
- WebMagic无法输出抓取到的数据和文件
- JNI 1