JAVA的JNI实现基础
来源:互联网 发布:数据维度是什么意思 编辑:程序博客网 时间:2024/05/17 23:29
Jni学习总结
一,在java中的jni的编写方法
1.第一步,在JAVA中要做的工作
(1).创建一个JAVA的工程
(2).在工程里面创建一个Test的类
(3).在Test类里面加载动态库
(4).生成native方法
(5).创建主函数,调用jni实现的方法
代码如下:
package test;
publicclass Test {
/*用于加载动态库文件,动态链接库名字为libtest.so*/
static{
System.loadLibrary("test");
}
/*声明一个native的方法*/
publicnativevoid test();
publicstaticvoid main(String[] args){
/*调用Test类的test()方法*/
new Test().test();
System.out.println("Hello , it's my javav JNI .\n");
}
}
2.编译这个java文件,生成class文件
(1)进入到工程中的java文件的目录下
(2)编译java文件生成class文件
代码如下:
cd /root/Desktop/android_jni/java_jnitest/src/test
javac Test.java
3.使用javah这个工具生成test_Test.h的头文件
(1)进入到工程文件的源码目录
(2)执行javah工具生成.h文件
代码如下:
cd /root/ Desktop/android_jni/java_jnitest/src
javah -jni test.Test
test_Test.h文件的内容为如下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include<jni.h>
/* Header for class test_Test */
#ifndef _Included_test_Test
#define _Included_test_Test
#ifdef __cplusplus
extern"C" {
#endif
/*
* Class: test_Test
* Method: test
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_test_Test_test
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
当然这个.h文件我们也可以手写,但是必须的符合一些规则,首先解释一下这个.h文件吧,需要包含jni.h头文件,然后
#ifndef
#define
#endif
这个是防止重复的定义这段代码
还有个东东extern “C”{
}
由于在JAVA和C++中存在重载这个东西,但是C语言不包含重载这个概念,就产生了这个东东,它主要是在函数的命名上来区分。所以这里如果是C语言的化,我们会开启这个东东,来给我们的jni函数按这样的规则命名。如果是C++则不用它会自动的转换为这种规则命名。
4.编写我们的C代码
(1)包含需要的头文件
(2)实现.h中的函数
#include<stdio.h>
#include <jni.h>
#include"../test_Test.h"
JNIEXPORT
void JNICALL Java_test_Test_test(JNIEnv *env, jobject jb)
{
printf("This is my java JNI test .\n");
}
5.生成动态链接库
(1)进入包内
(2)使用gcc生成动态链接库
代码如下:
cd /root/Desktop/android_jni/java_jnitest/src/test
gcc -I /usr/lib/jvm/java-6-openjdk/include/ -fPIC -shared -o libtest.so test.c
6.设置环境变量并运行测试
(1)设置环境变量,在加载.so文件时会自动到该环境变量下查找(仅在当前shell有效)
(2)记得回到源码目录(src目录下)
(3)执行测试
代码如下:
export LD_LIBRARY_PATH=”/root/Desktop/android_jni/java_jnitest/src/test“
cd /root/Desktop/android_jni/java_jnitest/src
java test.Test
- JAVA的JNI实现基础
- Java基础之JNI的简单实现
- Java基础之JNI实现
- Android的JNI实现基础
- Android Studio实现JNI的开发(基础)
- 手把手教你 ----JNI的基础实现
- java基础---JNI原理
- jni java调用c++实现的dll
- Windows 下java JNI方法的实现
- java 本地方法的实现过程 JNI
- JNI的环境配置与基础代码实现(AS)
- Java JNI简单实现
- Java JNI简单实现
- JNI开发java与c的基础交互
- Java JNI Programming基础 1.
- JNI基础java、C++交互
- java-基础-JNI本地栈
- 【Java】Java调用C/C++程序的实现(jni)
- Java Process中waitFor()的问题
- 窗口框架
- IP多播技术
- Java哈希冲突拒绝服务漏洞
- Android常用函数库
- JAVA的JNI实现基础
- C#中的反射详解
- 导图 SQL Server 之T-SQL
- SSDT Shadow Hook
- 项目部署出错,可能原因分析
- python的解释器和字节码编译
- JAVA对DB2中BLOB对象的读写
- Android的JNI实现基础
- SAP 如何找到对应的请求