Android使用串口(基于android-serialport-api)

运行平台:
CPU:全志V40
Android版本:6.0.1


关于安卓设备上使用串口,谷歌官方在github上有提供代码实例,里面有JNI的代码和串口API的java文件,工程的地址如下:
https://github.com/cepr/android-serialport-api

官方给出的代码是eclipse工程,SDK的版本也比较旧。我使用的Android Studio,如果直接使用google提供的so库文件是访问不了串口的,我平台需要使用的SDK版本是26,而github上这个开源的代码比较旧了,跟我SDK版本也不匹配,好在google有提供相应的JNI文件,从github上下载这个工程下来后,在android-serialport-api文件夹里面可以找到jni文件夹,里面包含有SerialPort.c,如下:
Android使用串口(基于android-serialport-api)_第1张图片

有了这个文件后需要使用CMAKE去编译它,至于怎么安装和使用CMAKE我找到一篇文章:
https://blog.csdn.net/qq_25817651/article/details/53135685
基本上只要看下怎么安装CMAKE就好了,下面我会继续讲下怎么使用。CMAKE安装好后下面先建立一个JNI工程,这个工程只是为了去获取CMakeLists.txt这个编译文件,先创建好工程,如下:
Android使用串口(基于android-serialport-api)_第2张图片
Android使用串口(基于android-serialport-api)_第3张图片
Android使用串口(基于android-serialport-api)_第4张图片
这里直接Next就可以了,在工程下面可以看到有个CMakeLists.txt的文件,直接把这个CMakeLists.txt复制出来到工程目录下的app文件夹就可以关闭工程了,如果不添加这个文件,后面自己工程编译jni文件的时候会提示找打不到这个CMake文件
这里写图片描述
复制出来上面那个文件后,回到自己需要添加串口的工程,把这个文件复制到”项目名/app/”下,之后创建jni目录:
Android使用串口(基于android-serialport-api)_第5张图片
Android使用串口(基于android-serialport-api)_第6张图片
并复制 android-serialport-api-master\android-serialport-api\project\jni 下的“SerialPort.c”文件到自己创建的jni目录下,注意在android studio中显示的是“cpp”目录。
Android使用串口(基于android-serialport-api)_第7张图片
这里写图片描述

在build.gradle(Module:app)里面添加如下内容,SDK版本根据自己需要进行修改:
Android使用串口(基于android-serialport-api)_第8张图片

上面的步奏添加完后,进行同步后就会在工程页面出现我们前面添加的CMakeLists.txt,打开 CMakeLists.txt 做如下修改:
这里写图片描述
Android使用串口(基于android-serialport-api)_第9张图片

然后编译,在下面这个目录下会生成对应的串口so文件:
Android使用串口(基于android-serialport-api)_第10张图片
这个so文件就能够直接用起来了,把这个so文件放到libs文件下的“armeabi-v7a”里面,接下来写下如何使用这个so文件,google官方的例程里面有提供java的API文件:
Android使用串口(基于android-serialport-api)_第11张图片
这个文件夹的名字必须为“android_serialport_api”,把这个文件夹复制到自己的工程下面
Android使用串口(基于android-serialport-api)_第12张图片
加载库文件修改为新生成的so文件
Android使用串口(基于android-serialport-api)_第13张图片
接下来就可以直接在工程里面使用串口了,代码如下:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //series
        try {
            /* 打开串口 */
            mSerialPort = new SerialPort(new File("/dev/" + "ttyS2"), 115200, 0);
            //  mOutputStream = (FileOutputStream) mSerialPort.getOutputStream();
            mInputStream = (FileInputStream) mSerialPort.getInputStream();

            /* Create a receiving thread */
            mWriteThread = new WriteThread();/* 创建串口处理线程 */
            mWriteThread.start();

        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

你可能感兴趣的:(Android)