**

Android studio加载libpocketsphinx_jni.so库文件常见报错

**

报错一:couldn’t find “libpocketsphinx_jni.so”

.so库文件推荐存放在main/jniLibs下,即可使用存放在libs文件夹下需要在build.gradle配置; 存放在libs文件夹下需要在build.gradle配置 不同CPU架构下so文件兼容问题

模拟器常用的x86支持armeabi,armeabi-v7a jniLibs目录下 i. 如果存在/x86/.so文件,优先加载此文件 ii. 如果不存在x86文件,会选择armeabi-v7a下的.so文件 iii. 如果也不存在armeabi-v7a文件,会选择armeabi下的.so文件现在大部分安卓手机常用的armeabi-v7a支持armeabi,armeabi-v7a jniLibs目录下 i. 如果存在/armeabi-v7a/.so文件,优先加载此文件 ii. 如果不存在armeabi-v7a文件,会选择armeabi下的.so文件 所以build.gradle下ndk只添加armeabi,armeabi-v7a两项就可以 (ndk 开发C/C++动态库,自动将abiFilers配置架构下的.so文件和java应用程序打包到APK中,APK中lib文件夹下会有相应的.so文件)

报错二:lib/arm/libpocketsphinx_jni.so" has text relocations

原因:安卓6以上targetSdk>=23, 系统将会拒绝加载包含text relocations的共享库,同时输出错误Log 解决:版本改为22 (网上说真正的解决方案就是解决so动态链接库中的text relocations (TEXTRELs)问题)

报错三:找不到.so库方法

原因:so库里的接口都是带包名的,如果从别的项目拷贝过来,包名变了而.so库里的接口包名没变,就会造成找不到jni方法的异常。 解决:保持so库的包结构不变

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。