随着移动互联网从火热到现在的回归平静,已经很难像当初一样随便撸个app就能高薪了。但是Android开发并没有没落,很大一部分原因是因为现在很多设备都是用安卓系统实现人机交互,比如刷脸支付设备,自动贩卖机,ktv点歌系统之类的。这时候Android开发就不仅仅是简单的软件开发了,需要和硬件层面打交道,这时候就需要和串口通讯。
业界目前基本都是根据谷歌当初开源的那套串口通讯代码:android-serialport-api
但是这个代码太早以前编译的了,so库在targetSdkVersion>=23版本会报 text relocations 错误。这个问题在6.0之前只会产生一个警告,系统还是可以正常加载包含text relocations的共享库的,但从6.0起,即SDK Version>=23时,系统将会拒绝加载包含text relocations的共享库,同时输出错误Log。
所以我们需要用ndk编译一下,同时在在Andorid.mk中加入LOCAL_LDFLAGS += -fPIC
比如:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
TARGET_PLATFORM := android-3
LOCAL_MODULE := serial_port
LOCAL_SRC_FILES := SerialPort.c
LOCAL_LDLIBS := -llog
LOCAL_LDFLAGS += -fPIC
include $(BUILD_SHARED_LIBRARY)同时在Appliacatian.mk中新增一个arm64-v8a,以兼容64位处理器:
APP_PLATFORM := android-14
APP_ABI := armeabi armeabi-v7a arm64-v8a x86然后就非常简单了,下载ndk环境,配置好后,cd到jni目录,ndk-build 一下就可以在lib目录下找到编译后的so库。复制到程序中就可以跑了。