jni 入门实例
来源:互联网 发布:布吕歇尔 知乎 编辑:程序博客网 时间:2024/06/06 04:28
----------------------------------------
author: hjjdebug
date: 2016年 09月 11日 星期日 21:53:22 CST
----------------------------------------
JNI: java native interface.
从java层调用c/c++的代码。
要用最简单语言,描述出事物的本质。
实现分为7步: 简化为3步
1. 写Java 代码 ; 重点关注对象1
2. 编译生成class ;见Makefile
3. 使用javah 命令,生成C头文件 ;见Makefile
4. 编写头文件对应的c或cpp代码 ; 重点关注对象2
5. 编译生成动态链接库(.so)文件 ;见Makefile
6. 将so 文件拷入对应的目录中 ;见Makefile
7. 运行java类 ;见Makefile
下面举例详述一下过程:
1. java 代码
3. Makefile
4. 运行结果:
author: hjjdebug
date: 2016年 09月 11日 星期日 21:53:22 CST
----------------------------------------
JNI: java native interface.
从java层调用c/c++的代码。
要用最简单语言,描述出事物的本质。
实现分为7步: 简化为3步
1. 写Java 代码 ; 重点关注对象1
2. 编译生成class ;见Makefile
3. 使用javah 命令,生成C头文件 ;见Makefile
4. 编写头文件对应的c或cpp代码 ; 重点关注对象2
5. 编译生成动态链接库(.so)文件 ;见Makefile
6. 将so 文件拷入对应的目录中 ;见Makefile
7. 运行java类 ;见Makefile
下面举例详述一下过程:
1. java 代码
cat JniTest.javapublic class JniTest {static{System.loadLibrary("JniTest");}private native int add(int x, int y);private native String setString(String str);public static void main(String args[]){JniTest test=new JniTest();int res=test.add(100,200);System.out.println("<from java>Result is:"+res);String str="ha,ha,ha";String str2=test.setString(str);System.out.println("<from java>Result str is:"+str2);//System.out.println(System.getProperty("java.library.path"));}}
2. c 代码
cat JniTest.c#include <stdio.h>#include "JniTest.h"JNIEXPORT jint JNICALL Java_JniTest_add (JNIEnv *env, jobject obj, jint a, jint b){int c = a + b;printf("<from so>res is:%d\n",c);return c;}JNIEXPORT jstring JNICALL Java_JniTest_setString (JNIEnv * env, jobject obj, jstring str){const char *s = (*env)->GetStringUTFChars(env, str, 0);printf("<from so>I get:%s\n", s);(*env)->ReleaseStringUTFChars(env, str, s);jstring js=(*env)->NewStringUTF(env,"<from so>hello,java,I done it!");return js;}
3. Makefile
cat Makefile #路径修改为你自己的路径INCPATH1=/usr/lib/jvm/java-7-oracle/includeINCPATH2=/usr/lib/jvm/java-7-oracle/include/linuxall:libJniTest.solibJniTest.so:JniTest.cgcc -I $(INCPATH1) -I $(INCPATH2) -shared -fPIC -o $@ $<#辅助目标class:javac JniTest.javaheader:javah JniTestcopy:sudo cp libJniTest.so /usr/librun:java JniTestclean:rm *.h *.class *.so
4. 运行结果:
~/myjava$ ls
JniTest.c JniTest.java Makefile
~/myjava$ make class
javac JniTest.java
~/myjava$ make header
javah JniTest
~/myjava$ make
gcc -I /usr/lib/jvm/java-7-oracle/include -I /usr/lib/jvm/java-7-oracle/include/linux -shared -fPIC -o libJniTest.so JniTest.c
~/myjava$ make copy
sudo cp libJniTest.so /usr/lib
[sudo] password for hjj:
~/myjava$ make run
java JniTest
<from so>res is:300
<from java>Result is:300
<from so>I get:ha,ha,ha
<from java>Result str is:<from so>hello,java,I done it!
0 0
- JNI简单入门实例
- Android JNI入门实例
- Android JNI入门实例
- Android--jni入门实例
- jni 入门实例
- JNI 入门实例代码 , Linux, C++
- linux上简单的JNI入门实例
- 【JNI】 Android JNI入门实例(Windows+Cygwin+Eclipse)
- jni实例
- jni实例
- Android JNI入门实例(Windows+Cygwin+Eclipse)
- Android JNI学习之第一个入门实例
- Android JNI入门实例(Windows+Cygwin+Eclipse)
- Android JNI入门实例(Windows+Cygwin+Eclipse)
- 【Android學習專題】Android JNI入门实例(Windows+Cygwin+Eclipse)
- Android JNI学习之第一个入门实例
- java jni 入门4 - 访问实例域,静态域
- JNI for Android, Android Studio NDK 入门 实例 demo
- 通话记录
- android——第一个项目HelloWord
- 【linux】VMware安装CentOS 6.4
- 动态规划解决迷宫问题
- php 使用cURL 模拟注册
- jni 入门实例
- 多线程基础
- Java基础复习
- 拨号键盘
- TOJ 2801.Binary Trees(二叉树后序转中序)
- 《产品前线:48位一线互联网产品经理的智慧与实战》读书笔记4
- Gallery与ImageSwitcher总结
- Android中一键退出程序方法
- 【codeforces711B】Bus to Udayland