手把手教你JNI接口编写流程
2016-07-28 18:51
477 查看
编译的目标平台为X86架构,本地终端可以直接调用执行。整个构建的流程是从上到下(Java->C)构建。
第一步,编写自己的MyJni.java类,如下:
第二步,需要生成响应的JNI头文件,执行: javah MyJni,会在当前目录下生成MyJni.h,
内容如下:
第三步,实现上一步中自动生成的头文件中的函数实体文件。kongbo_jni.c
第四步,代码工作基本完成,需要出.class文件以及相应的so库了。
对于.class文件,终端执行:javac MyJni 即可在当前目录生成。
对于so库,敝人写了一个高端的Makefile,内容如下:
然后执行make,即可生成.so文件喽。。。
第五步,运行结果:
终端执行 java MyJni
目标达成!!!
欢迎回帖交流~~~~~~
第一步,编写自己的MyJni.java类,如下:
public class MyJni { public native void display(); public native double sum(double x, double y); public static void main(String[] args) { MyJni myjni = new MyJni(); System.out.print(myjni.sum(1,1)); System.out.print("\n"); myjni.display(); } static { System.load("/home/kongbo/test/java/libkb_jni.so"); } }
第二步,需要生成响应的JNI头文件,执行: javah MyJni,会在当前目录下生成MyJni.h,
内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class MyJni */ #ifndef _Included_MyJni #define _Included_MyJni #ifdef __cplusplus extern "C" { #endif /* * Class: MyJni * Method: display * Signature: ()V */ JNIEXPORT void JNICALL Java_MyJni_display (JNIEnv *, jobject); /* * Class: MyJni * Method: sum * Signature: (DD)D */ JNIEXPORT jdouble JNICALL Java_MyJni_sum (JNIEnv *, jobject, jdouble, jdouble); #ifdef __cplusplus } #endif #endif
第三步,实现上一步中自动生成的头文件中的函数实体文件。kongbo_jni.c
#include <jni.h> #include <stdio.h> #include "MyJni.h" JNIEXPORT void JNICALL Java_MyJni_display (JNIEnv *env, jobject obj) { printf("Here comes kongbo's JNI interface\n"); } /* * Class: MyJni * Method: sum * Signature: (DD)D */ JNIEXPORT jdouble JNICALL Java_MyJni_sum (JNIEnv *env, jobject obj, jdouble a, jdouble b) { return a + b; }
第四步,代码工作基本完成,需要出.class文件以及相应的so库了。
对于.class文件,终端执行:javac MyJni 即可在当前目录生成。
对于so库,敝人写了一个高端的Makefile,内容如下:
JNI_PATH:=/opt/java/jdk1.6.0_45/include JNI_LINUX:=/opt/java/jdk1.6.0_45/include/linux CFLAG:= -fPIC -D_REENTRANT -I $(JNI_PATH) -I $(JNI_LINUX) libkb_jni.so: kongbo_jni.o cc -shared kongbo_jni.o -o libkb_jni.so kongbo_jni.o: kongbo_jni.c MyJni.h cc $(CFLAG) -c kongbo_jni.c .PHONY: clean clean: rm libkb_jni.so kongbo_jni.o
然后执行make,即可生成.so文件喽。。。
第五步,运行结果:
终端执行 java MyJni
2.0 Here comes kongbo's JNI interface
目标达成!!!
欢迎回帖交流~~~~~~
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译