android so文件的引用以及遇到的坑

来源:互联网 发布:vmware文件共享 ubuntu 编辑:程序博客网 时间:2024/06/05 22:58

android 关于so文件的引用,网上已经很多了,但是千奇百怪,一种说法是将so文件放在libs目录下,另一种说法是在main目录下创建jniLibs文件,然后引用so文件。jniLibs文件列表
然后在app的build.gradle中加入代码

sourceSets {        main {            jniLibs.srcDirs = ['libs']        }    }

两种方法都要加这段代码。
我在其他项目中都是第二种做法,之前做激光推送时也是创建jniLibs文件。最近发现直播比较受欢迎,于是就在腾讯云直播申请了一下。按照之前接入的经验,将so文件放到jniLibs下,竟然报错了。

   java.lang.UnsatisfiedLinkError: Native method not found: com.tencent.rtmp.TXRtmpApi.setTempPathLjava/lang/String;)V

一阵头大啊,怎么会报这个错误呢?明明so文件的导入是没有问题的。
因为我这是直接饮用的第三方的so我呢件,所以不存在方法命名不规范问题。(这里插一句:NDK编译的so有时候会在armeabi和armeabi-v7a中分别放置一份,所以不要为了省事只复制armeabi。Android项目和所有library中的armeabi和armeabi-v7a保持同步,要有都有,要没有都没有,否则很容易报错。)
后来我想既然网上那么多人都能使用第一种方式的so文件导入,是不是腾讯云比较特殊,第二种的so文件导入不能识别。于是在libs文件夹下也存放了一份。这里写图片描述
运行后竟然成功了,这就很尴尬了。问题解决了,不知道什么原因,有知道的大神请留言告知
最后附上两篇文章自己觉得有用的文章。
使用第三方库出现找不到so库UnsatisfiedLinkError错误的原因以及解决方案

so文件的生成,Android使用C/C++来保存密钥

原创粉丝点击