这两天在看了一下NDK相关知识 工作需要提供访问底层韦根的接口 看了很多博客 都写的表里不一 要么就太过简便 这是非常痛苦的 趁有时间 就记录下 我所做的实例
1
首先配置NDK 创建一个android 项目 打开AS 如果没有下载NDK 则点击下载
文章图片
文章图片
2 在电脑系统环境Path 添加NDK的目录 然后打开命令窗口 输入ndk-build 如下表示配置成功
文章图片
文章图片
3 新建一个本地方法接口类MyJni.java 里面包含了所要调用接口的函数声明
文章图片
至此先编译一下工程 Make Project 此时会生成MyJni.class类 查看路劲我的在 (这个路劲很重要 )
文章图片
然后我们要根据这个类 生成相应的头文件 在AS终端输入
javah -d jni -classpath C:/Users/Administrator/Desktop/wg_test/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes com.example.administrator.wg_test.MyJni
命令解析
-classpath <路径> 用于装入类的路径。注意是包名文件夹的路径,不是class的路径,如果没有包名的话就是class的路径。(-classpath C:/Users/Administrator/Desktop/wg_test/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes )
-d <目录> 输出目录(-d jni)
-jni 生成 JNI样式的头文件(默认)(com.example.administrator.wg_test.MyJni)
【Android NDK如何访问底层接口】!!!注意终端运行的目录是app/src/目录下
文章图片
这样在src目录下就生成一个JNI目录 以及头文件 如下图
文章图片
4 接下来我们编写我们调用底层接口的C语言 在JNI目录下创建MyJni.c文件 编写我们队底层节点的使用 我这边的就是打开 关闭 读写这些 有些要注意的地方 1 要包括刚才生成的头文件 2 函数的名字声明 和刚才生成的头文件的一样 否则调用不了
我这个文件实现了几个功能 Java_com_example_administrator_wg_1test_MyJni_wgOpen 这个函数是打开设备节点
Java_com_example_administrator_wg_1test_MyJni_wgRecv是读写设备节点 具体写法后续送上
j
文章图片
然后创建Android.mk 以及Application.mk 稍微注意一下生成库的名字
文章图片
文章图片
到这一步我们可以打包生成SO库文件了 打开命令运行行 到项目的JNI目录下 执行命令 如下图
文章图片
文章图片
5 至此接下来就是使用库的问题了 首先我们要加载这个库在app的 build.gradle 添加库的路径 如下
文章图片
然后在MainActivity下调用即可
文章图片
!!!注意 当打开设备节点会出现打开失败的问题 我直接把SElinux关闭 以及 在更改设备节点的权限
强制性关闭Selinux
https://blog.csdn.net/u010164190/article/details/78659476
然后在 添加设备节点权限
https://blog.csdn.net/whshiyun/article/details/82051864