串口协议:c转java文件


           
                           

                   
                   
                       
                   
                                           

运行平台:

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,如下:

这里写图片描述

有了这个文件后需要使用CMAKE去编译它,至于怎么安装和使用CMAKE我找到一篇文章:

https://blog.csdn.net/qq_25817651/article/details/53135685

基本上只要看下怎么安装CMAKE就好了,下面我会继续讲下怎么使用。CMAKE安装好后下面先建立一个JNI工程,这个工程只是为了去获取CMakeLists.txt这个编译文件,先创建好工程,如下:

这里写图片描述

这里写图片描述

这里写图片描述

这里直接Next就可以了,在工程下面可以看到有个CMakeLists.txt的文件,直接把这个CMakeLists.txt复制出来到工程目录下的app文件夹就可以关闭工程了,如果不添加这个文件,后面自己工程编译jni文件的时候会提示找打不到这个CMake文件

这里写图片描述

复制出来上面那个文件后,回到自己需要添加串口的工程,把这个文件复制到”项目名/app/”下,之后创建jni目录:

这里写图片描述

这里写图片描述

并复制  android-serialport-api-master\android-serialport-api\project\jni 下的“SerialPort.c”文件到自己创建的jni目录下,注意在android studio中显示的是“cpp”目录。

这里写图片描述

这里写图片描述

在build.gradle(Module:app)里面添加如下内容,SDK版本根据自己需要进行修改:

这里写图片描述

上面的步奏添加完后,进行同步后就会在工程页面出现我们前面添加的CMakeLists.txt,打开 CMakeLists.txt 做如下修改:

这里写图片描述

这里写图片描述

然后编译,在下面这个目录下会生成对应的串口so文件:

这里写图片描述

这个so文件就能够直接用起来了,把这个so文件放到libs文件下的“armeabi-v7a”里面,接下来写下如何使用这个so文件,google官方的例程里面有提供java的API文件:

这里写图片描述

这个文件夹的名字必须为“android_serialport_api”,把这个文件夹复制到自己的工程下面

这里写图片描述

加载库文件修改为新生成的so文件

这里写图片描述

接下来就可以直接在工程里面使用串口了,代码如下:

@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();
        }
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
                                   

               
                               

你可能感兴趣的:(Android)