Android(安卓)- JNI 串口通信
16lz
2021-01-26
Android - JNI 串口通信 |
项目名:行车数据 开发工具:Android Studio 2.1.2 / 2.2.3 JDK版本:1.8.0 Grade版本:2.10 ('classpath:com.android.tools.build:gradle-experimental:0.7.0-alpha3')
需求:其他公司的OBD通过汽车通用接口读取汽车数据,将数据传给Android智能后视镜的串口,由APP读取串口数据,并对串口数据进行处理之后上传至服务器(数据处理包括:按原OBD协议对数据进行解码,再按照本公司的OBD协议进行转码后通过NIO Socket发送至服务器),服务器将收到的数据保存下来,最后发送到手机APP端进行数据展示。 使用ADT Bundle进行JNI开发比较简单,使用Eclipse和Cygwin很容易就能进入开发了,但是在Android Studio下可就稍微费劲一点,这里指的是在build.gradle中所有配置信息最外层加上一个model{}的方式进行JNI开发,使用这种方式进行NDK开发有很多坑人地方,折腾了一整天程序终于跑起来了,使用半个月后也并没出现什么大问题,不过会引发其他小问题,例如在build.gradle中添加model{}之后会导致无法在android{}中配置signingConfigs信息,每次签名都得用build->Generate Signed APK,很麻烦!所以,我使用了另外一种更为简洁的方法:(这两种方法都不用自己创建Android.mk) 1. 下载NDK
配置ndk环境路径:
2. 配置新建工程,在其中一个类中添加本地方法声明,并执行Build->Cliear Project和Rebuild Project生成class文件
public class NewNdk { // JNI static { System.loadLibrary("NdkDevice"); // 调用jni生成的库 } public native static String display();} |
3. 根据class文件生成头文件,再把生成的头文件移动到src/main/jni目录下
WDD:debug luohan$ cd app/build/intermediates/classes/debug WDD:debug luohan$ javah -v -jni com.luohan.android_jni.NewNdk [Creating file RegularFileObject[com_luohan_android_jni_NewNdk.h]] WDD:debug luohan$ mv com_luohan_android_jni_NewNdk.h ../../../../src/main/jni/ |
新建一个.c文件,将头文件中所有内容拷贝到该文件中,将所有方法声明改成具体函数实现。如果#include
4.其他配置项: (1)app/gradle.properties文件末尾加入:android.useDeprecatedNdk=true (2)app/build.gradle的defaultConfig下加入ndk{}
ndk { moduleName "NdkJniDemo" //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库,目前可有可无。} sourceSets.main{ jniLibs.srcDirs = [‘jniLibs’] //so指定存放目录,生成so文件后需要手动将其拷贝到该目录} |
至此,java文件中声明本地方法的报错方法就不再报错了,点击sync projec顺利通过。生成是so文件放在app/build/intermediates/ndk/debug/lib/下,这是编译期间生成的,将其拷贝到app/libs中,然后即使删掉jni文件夹,也能通过so库调用display()方法了。
5.运行
可能出现的报错:
Error:Execution failed for task ':app:compileDebugNdk'. > Error: Your project contains C++ files but it is not using a supported native build system. Consider using CMake or ndk-build integration with the stable Android Gradle plugin: https://developer.android.com/studio/projects/add-na tive-code.html or use the experimental plugin: http://tools.android.com/tech-docs/new-build-system/gradle-experimental. Information:BUILD FAILED Information:Total time: 1.303 secs Information:1 error Information:0 warnings Information:See complete output in console |
更多相关文章
- Linux平台下搭建OgreKit on Android开发环境
- 教你如何开发一款实用的完整Android(安卓)App
- Android开发环境搭建和HelloWorld
- AndroidStudio 项目打包成jar和aar
- FlatBuffers在android的使用简介
- 使用Android(安卓)studio 开发xposed插件
- android命令行编译生成apk(翻译官方文档)
- [Android]使用全局变量传递数据
- unity3D,PC、Android、IOS将内容复制到剪切板