【android jni调用注意事项】

由于工作需要,最近又要用到NDK开发,java层通过jni层去调用c层代码。再次总结一下几点注意事项。希望自己以后不要重蹈覆辙。也希望对大家有所帮助,哈哈!话不多说,切入正题。

注意事项:

1:看图:

【android jni调用注意事项】_第1张图片

默认情况下,程序会去加载 jniLibs 文件夹下的so库。而你如果这样的话:
【android jni调用注意事项】_第2张图片
很有可能会报错,提示你无法加载你的so库。说明:程序,找不到 libs 文件夹下的so库。
此时你可以这样:

【android jni调用注意事项】_第3张图片

  sourceSets {
        main {
            jniLibs.srcDirs = ['libs']     //设置目标的so存放路径
        }
    }

设置目标的so存放路径后,就能加载到 libs 文件夹下的so库啦。

2:看图:

【android jni调用注意事项】_第4张图片

红框中,如果在编译时,报里面的方法有错误时,而你又确信代码没问题的话。把 .cpp 换成 .c 格式的试试,或者反过来试试。我在编译串口文件时,明明代码没问题,但怎么编译都出错,于是把 .cpp 换成 .c 格式的,结果就好了!

3:如果你报类似于如下的错误:

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

你可以尝试把 ndk-bundle\platforms\android-19\arch-arm\usr\include 下的 termios.h 文件,拷贝一份放到你的jni文件下,再次编译一下试试。
如图所示:
【android jni调用注意事项】_第5张图片

具体为什么这样做:
参考博客: http://www.th7.cn/Program/java/201607/890892.shtml

你可能感兴趣的:(【android,硬件开发】)