Android 使用so库的遇到的坑(1)

一般来说Android默认是读取jniLibs下的文件的,但是这个文件在项目创建时是没有的,需要开发者手动创建。但是你同样可以省略这一步,就放在libs。这样做你就需要在app下的build.gradle中的android{}闭包下,添加这样一段代码:

//改变.so的路径到libs下

sourceSets {

main {

jniLibs.srcDirs = [‘libs’]

}

}

注释都给你写好了,既然你默认读取jniLibs文件,那么我就改了你的默认读取文件夹到libs下,那就可以了,改完之后记得右上角点一下Sync Now。意思是同步配置资源。

配置完这一步,运行项目,然后调用so库中的代码时。

在这里插入图片描述

看到这样的报错,就问你慌不慌?不慌的话你就看不到我这篇文章了,兄嘚!其实上面一堆报错了,最要的就只有一句话:

couldn’t find “libleveldb.so”


你先别管这个libleveldb是什么,你只要知道它现在是一个so库就可以了。刚才我们明明指向了libs文件夹,怎么会找不到这个so库呢?这不是扯呢吗?

其实也很好解决了,so库是属于ndk开发,不同的so库就有不同的配置,因此当你的常规配置解决不了问题的时候,就要尝试新的玩法。

在app模块下的build.gradle中的defaultConfig{}闭包中添加如下代码:

ndk {

abiFilters “armeabi-v7a”, “x86”

}

这就是一个ndk的过滤器,然后你再运行,如果还是说找不到,那就再改动一下。

ndk {

abiFilters “armeabi”,“x86”,“armeabi-v7a”,“arm64-v8a”

}

记得改动后要Sync 或者Sync Now 。否则你的改动无效。

以上操作基本上就可以解决我的第一个找不到so库的问题。

然后我就要调用里面的方法了,再运行一手。

在这里插入图片描述

重点同样也是一句话:

No implementation found for boolean com.abc.LevelDB.open(java.lang.String) (tried Java_com_abc_LevelDB_open and Java_com_abc_LevelDB_open__Ljava_lang_String_2

最后

我这里整理了一份完整的学习思维以及Android开发知识大全PDF。

当然实践出真知,即使有了学习线路也要注重实践,学习过的内容只有结合实操才算是真正的掌握。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

ics/618156601)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值