Android程序调用串口开发硬件
Android的串口程序
Adnroid开发串口程序与linux一致,本质也是对文件进行读写操作,不过为了能用java操作,需要导出为JNI格式的接口而已。幸运的是,该串口读写程序已经被开发好了,我们直接使用就可以了。
github路径:android-serialport-api
当然,你也可以从gitee上搜索该项目,大同小异,我们只要取启动的SerialPort.c文件即可。
工程编辑
由于Android调用so库是通过jni方式实现的,所以so库导出的接口和你的程序包名严重相关。比如你自己的Android程序放在包com.demo.sdk中,你调用的so库的函数名类似Java_com_demo_sdk_SerialPort_xxx…(Java+包名+类名+方法名)。当然这个名字不用你自己记,javah会帮你生成。下面我们梳理下怎么生成自己的SerialPort串口库。
- 从github上下载android-serialport-api后,获取jni文件夹。复制该目录到你自己的工程目录中,删除其中的sh文件和h文件 。
- 编写自己的SerialPort.java文件。当然,你可以参考上述项目中的SerialPort.java文件,只需要将启动的包名改成你自己的包名即可。
- 按照包名生成路径,例如:
在路径jni文件夹中执行如下命令,生成自己的SerialPort.h头文件,将头文件中的导出函数替换到SerialPort.c中。
javah -o SerialPort.h -jni -classpath ../ com.demo.sdk.SerialPort
- 修改Android.mk,删除其中的TARGET_PLATFORM,修改Application.mk,删除生成目标的armeabi格式(ARM v5)。增加APP_PLATFORM := android-26,指定生成的版本。
- 回到上层目录中执行ndk-build.cmd,生成自己独有的SerialPort开发库。
PS D:\Android\work\test> cd jni
PS D:\Android\work\test\jni> javah -o SerialPort.h -jni -classpath ../ com.demo.sdk.SerialPort
PS D:\Android\work\test\jni> cd..
PS D:\Android\work\test> ndk-build.cmd
[armeabi-v7a] Compile thumb : serial_port <= SerialPort.c
[armeabi-v7a] SharedLibrary : libserial_port.so
[armeabi-v7a] Install : libserial_port.so => libs/armeabi-v7a/libserial_port.so
[x86] Compile : serial_port <= SerialPort.c
[x86] SharedLibrary : libserial_port.so
[x86] Install : libserial_port.so => libs/x86/libserial_port.so
PS D:\Android\work\test>
libs文件夹中即是生成的so库。