NDK开发学习笔记(1):JNI开发步骤及遇到的问题详解
来源:互联网 发布:linux下移动文件夹命令 编辑:程序博客网 时间:2024/05/18 03:05
JNI 开发
步骤:
1.在Java文件类中编写native 方法
2.通过javah 命令,生成.h 头文件文件 (生成的头文件名称规则:Java_类的全名_方法名) 或者自己手写头文件
3.复制上一步生成的 .h 头文件到c 工程(提示缺少jni.h文件和jni_md.h文件),不要直接在工程中粘贴,而是要复制到工程的目录中,然后在右键点击头文件,选择添加现有项,把刚才复制的.h文件添加到工程。
4.复制jni.h 和jni_md.h到c工程。
jni.h文件路径:jdk安装路径\jdk1.8.0_65\include,
jni_md.h文件路径:jdk安装路径\include/win32文件夹下。
5.新建c文件,实现.h 头文件中的声明函数(注:通过javah生成的头文件方法参数是没有名称的,即只有参数类型,没有参数名称,如:JNIEXPORT jstring JNICALL Java_com_test_JniMain_getStringFromC
(JNIEnv *, jclass);,在实现方法的时候,需要自己给参数命名)
6.生成一个dll 动态库。vc里有工具可以自动生成,步骤如图:
- (1)选择生成解决方案的平台。
- (2)配置生成的动态库的类型,这里生成.dll的库。
- (3)生成动态库,即生成一个解决方案。
如果在生成动态库的过程中报错“无法打开预编译头文件”,如:
则配置预编译头为“不使用预编译头”。如图: - (4)重复第三步“生成动态库”,即可成功,如图:
7.在java中加载动态库
把在第六步中生成的.dll动态库,复制到java或者android工程中,并引用。如:放在src或者包名目录下
或者放在工程目录下(推荐):
每次把生成的动态库复制到java工程中比较麻烦,我们还可以配置一下系统环境变量:把生成的动态库所在的路径添加到系统环境变量path中,如图:
这样我们就不用把动态库复制到java工程中,也可以直接调用了,比较省事。
8.触发native函数。
在java中调用,如:
注意:
问题1:在第二步通过javah命令生成头文件的时候,遇到一个错误,即找不到指定的类文件。
解决方法:
(1)把目录切换到src目录下。
(2)javah 包名.类名,如:javah com.example.JniTest。
只需上面两步,就可以生成.h头文件了。ps:直接把目录切换到类所在的目录下,在javah 类名,这样是不行的,还是会找不到类文件,必须是在src目录下执行:javah 包名.类名命令才可以。
问题2:在第四步的时候,如果直接把jni.h文件和jni_md.h文件复制到c工程还是报错的话,可以把这两个文件复制到vc的include目录下,(如果是把文件复制到了vc的include目录下了,则可以不用再添加到c工程中),重启工程就好了。
vc的路径:vc的安装路径\VC\include
- NDK开发学习笔记(1):JNI开发步骤及遇到的问题详解
- 初步入NDK(Jni)开发遇到的问题错误
- 安卓JNI/NDK开发2(jni/ndk配置及 开发步骤)
- NDK开发笔记(二)---JNI的学习
- NDK开发笔记(三)---JNI的学习
- NDK开发笔记(二)---JNI的学习
- SSH开发步骤及遇到的问题
- JNI NDK开发笔记
- NDK开发学习笔记—JNI入门
- jni开发中遇到的问题1--eclipse 选择ndk位置提示“Not a valid NDK directory” 时
- JNI开发----一点一点搞清楚NDK开发的步骤
- NDK开发(三):JNI数据类型的详解
- Jni开发与Android NDK开发学习笔记(一)
- Android下jni开发之ndk的使用(下载、配置、编译遇到的问题)
- JNI/NDK开发(学习网址收藏)
- Android NDK(学习笔记四)—— 在NDK开发中JNI打印Log信息
- NDK开发中遇到的一些问题。
- Android NDK 开发自己遇到的问题
- spring-data-mongodb之查询
- linux内核开发示例
- 2017杭电多校第六场03Inversion
- 关于Unity Dropdown控件的使用心得
- SpringMVC+Mybatis+Redis+MySql+Maven
- NDK开发学习笔记(1):JNI开发步骤及遇到的问题详解
- NYoj 44 子串和
- [HDU- 2546] 饭卡(动态规划&&背包)
- HDOJ5311 深搜简单题,几个小的剪枝
- JZOJ 8.10 B组总结
- 基于视觉的视频分类传统方法
- 矩形交换行
- EventDelegate---如何绑定事件
- Untracked files不想add