Android studio 中NDK的配置和JNI实现的完整过程SerialPort android串口

之前用eclispse的时候写过一篇关于ndk配置和Jni实现的博客,由于现在大部分都使用android studio了,刚好接到android 串口的一个需求。就整体实现了一遍,希望整个过程写出来可以给大家一点帮助。
1.首先创建一个android工程,这个就不详细解释了。
2.在android中配置NDK
(1)首先下载NDK,我没有用sdk直接下载,而是另外下载的android-ndk-r9d
这里写图片描述
(2)在androidstudio中设置,file–>product structor
Android studio 中NDK的配置和JNI实现的完整过程SerialPort android串口_第1张图片
3.在src–>java包中导入serialPort的java文件,在同级目录下建立jni目录,导入serialPort.c文件,如图
Android studio 中NDK的配置和JNI实现的完整过程SerialPort android串口_第2张图片
4.配置各种ndk的路径,如下:
打开Project的local.properties文件添加NDK路径,系统一般在第二步的时候自动生成。
在gradle.properties添加android.useDeprecatedNdk=true
在app路径的build.gradle 的defaultconfig中添加
Android studio 中NDK的配置和JNI实现的完整过程SerialPort android串口_第3张图片
5.生成类文件,点击bulid–>make project即可生成。在如图的路径下
Android studio 中NDK的配置和JNI实现的完整过程SerialPort android串口_第4张图片

6.然后生成.h文件,打开android studio下的终端terminal命令行:
输入命令为:javah -d jni -classpath C:\Users\huchang\AppData\Local\Android\sdk\platforms\android-19\android.jar;
E:\androidDevelop\MConcentrator\app\build\intermediates\classes\debug com.system.mconcentrator.mconcentrator.serialport.SerialPort
一个是我android jar包的路径,一个是我的串口类的路径。串口类为SerialPort.class
如图:
这里写图片描述
6.生成.so动态库
(1).在jni目录下,新建Android.mk文件,编写代码如下:
Android studio 中NDK的配置和JNI实现的完整过程SerialPort android串口_第5张图片
(2)在工程根目录下新建application.make文件,写入以下内容:
APP_PROJECT_PATH := $(call my-dir)
APP_MODULES := nativeTest

3,在命令行下,cd到jni目录(就是之前javah -d jni生成的那个文件夹)下,输入指令: ndk-build,等一会即可生成.so文件。位于lib目录下,将其放到app/src/main/jniLibs目录下就能用了。
备注:其实第三步也可以不用,只要前面的配置好,直接rebuild工程,系统会自动生成如下文件,将其放到app/src/main/jniLibs目录下就能用了。
Android studio 中NDK的配置和JNI实现的完整过程SerialPort android串口_第6张图片

另外备注下h文件的生成
4、使用javah 命令生成JNI的 .h头文件
(1)使用windows自带的命令行或则使用Android Studio打开 Terminal(View -> Tool Windows -> Terminal),进入JNI工程的根目录下,
使用执行javah -classpath . -jni SerialPort
这个步骤很容易出现找不到类文件的情况,如:微笑
a、

b、

出现第一种,就是没有找到jni的根目录,第二种就是没有指定路径
记住通用格式——
javah -classpath . -jni 类路径.JNI类
这个步骤需要注意的地方是什么才算工程的根目录,请看下面图的解释:

看文字可能有点难理解,举个例子,那我当前的工程目录来说:
E:\androidcode\SerialPortNDK\app\src\main\java\com\serialport
则根目录就是E:\androidcode\SerialPortNDK\app\src\main\java —》 java就是根目录
其实,还有个窍门大笑,直接看.java类文件的包名也可以知道,如:查看SerialPort.java 文件
上图中包名为 com.serialport 则包名的上一层目录就是根目录。

因此,执行在java目录,执行javah -classpath . -jni com.serialport.SerialPort 如图:

你可能感兴趣的:(android,android,android,studio,串口)