jni 开发错误之 java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol tcgetattr referenced by libserial_port.so...

博客: 安卓之家
微博: 追风917
CSDN: 蒋朋的家
简书: 追风917

每日一景

昨天把串口的驱动代码重新编译下,出现了问题:

1
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol tcgetattr referenced by libserial_port.so...

一般 jni 开发的话,C 代码命名常出错,检查了下,是 OK 的,然后 google了下,发现基本就下面两个:

[Android 调试] android串口通信问题,基于android studio
NDK UnsatisfiedLinkError when lowering project api level 21 to 19

而 stackoverflow 的哥们 rebuild 就好了,我各种折腾也不见好呐,于是看到上一篇 eoe 的,给了我思路:

我们看下包含该函数 **tcgetattr** 的文件, 比较下 NDK api 19 和 23 的 termios.h 文件:

23 的该文件目录:D:\Android\Sdk\ndk-bundle\platforms\android-23\arch-arm\usr\include

api 23 下 termios.h 文件:

23

api 19 下 termios.h 文件:

19

这两个文件确实不一样,于是把19下的该文件复制到 jni 目录,

jni

重新编译后,运行,OK,当然设置 compileSdkVersion 19 也是可以的

看了下,该文件从 api 21 就变化了,那么升级 SDK 后,不能高版本编译 so 了吗?

还搜到了 gradle 实验插件:

Experimental Plugin User Guide

玩了下,由于采用的插件较多,各种问题,没成功,有玩过的朋友欢迎指点啊,谢谢!

最后,非常感谢您的阅读,有任何疑问,可以后面评论,谢谢!

神奇的安卓开发网站:http://androidcat.com/

安卓开源库收集整理:https://github.com/XXApple/AndroidLibs

分享是一种美德,更是一种生活方式!!

也许你会说我是一个梦想者,但我不是唯一的一个。

悦分享,越快乐^_^

欢迎交流,转载请注明出处,谢谢!!

文章目錄
,
Fork me on GitHub