一、创建java文件
首先创建需要调用jni的java文件。如:
二、编辑生成class
进入src/ 目录,然后运行
javac com/cqb/hellojnitest/HelloJniTest.Java
可以看到在相应的目录下生成了 HelloJniTest.class
或直接在.java文件所在的目录底下 javac
cmd -> javac(编译StudentToJNI.Java文件) 生成字节码文件
实验没成功,可以直接借助IDE直接生成,eclipse在bin目录下,androidstudio在build/intermediates/classes/debug/下
三、使用javah生成头文件
cd至项目classess目录下 执行
javah -classpath bin/classes com.rg.serialPort.SerialPort
javah -classpath build/intermediates/classes/debug/com/rg/serialPort/ com.rg.serialPort.SerialPort
通过输入javah 可以看到以下结果:
这表明:-classpath是用来装入类的路径的,而前面我们已经进入了项的根路径目录,所以-classpath只要装载SerialPort.class类文件的bin\classes目录,-d用来指定输出路径,一般在项目根路径下面新建一个jni文件夹用来存储c文件,所以,-d后面输入jni,最后是报名+类名
四、JNI
- 项目根目录下新建jni文件夹,复制 .h文件至jni文件夹下,然后找到ndk的安装目录找到android.mk,Application.mk文件夹一同放在jni目录下,注意如果使用c++里的库需要在Application.mk文件中加入(APP_STL:= stlport_shared)
至于两个文件内容其它的用法,这里就不在描述(goolgle) - jni文件夹下新建.cpp文件,最好名称与头文件一致,然后拷贝头文件里的所有函数至cpp文件夹内,并且导入头文件(#include<name.h>),当然也要导入jni.h头文件,其实我们主要做的是就是通过jni把java传进来的类型,转换成c++需要的类型,然后把c++返回的值通过jni转换成java所需要的类型。jni.h头文件里提供了很多转换的方法以及取值的方法,具体大家可以打开ndk安装目录(platforms\android-9\arch-arm\usr\include)目录下查看jni.h头文件