美文网首页
安卓开发中引用so库出现的问题

安卓开发中引用so库出现的问题

作者: 笑对浮华 | 来源:发表于2021-07-14 16:05 被阅读0次

今天在开发中依赖了一个so库,按照网上的方法将so库放到工程app->src->main->jniLibs(没有此目录需自建)目录下,接着在Application启动中调用System.loadLibrary("libname")加载so库,结果程序刚运行起来就崩溃,查看崩溃日志,提示如下:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.android060demo-1FzmZYZCDbaZmj1aszXteA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.android060demo-1FzmZYZCDbaZmj1aszXteA==/lib/arm, /data/app/com.example.android060demo-1FzmZYZCDbaZmj1aszXteA==/base.apk!/lib/armeabi-v7a, /system/lib]]] couldn't find "libFLAlgMatch.so"

根据崩溃信息来看是找不到这个so库,百思不得其解反复确认了名称和路径,没有问题。最后才找到原因,特此记录。
原来我放so库时只在jniLibs下创建了armeabi目录,只是这个目录下有对应的so库,恰好我调试的设备cpu架构是armeabi-v7a,所以运行加载so库的时候没有对应的so包就报错了,所以以后为了安全起见,适配不同的机型,在放so包的时候,将通用的几个常见的cpu架构全部都加上,一般来说常用的有"armeabi","x86","armeabi-v7a","arm64-v8a"这几种,即在jniLibs下创建这几个目录,里面放入相同名称的so包,项目结构如下图:

jniLibs
最后还需要在app->build.gradle下android{}中添加:
        ndk {
            //选择要添加的对应cpu类型的.so库。
            abiFilters  "armeabi","x86","armeabi-v7a","arm64-v8a"
        }

相关文章

网友评论

      本文标题:安卓开发中引用so库出现的问题

      本文链接:https://www.haomeiwen.com/subject/tipypltx.html