今天在开发中依赖了一个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包,项目结构如下图:

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