Android studio加载语音识别libpocketsphinx_jni.so库文件

**

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

**

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

  1. .so库文件推荐存放在main/jniLibs下,即可使用存放在libs文件夹下需要在build.gradle配置;
    存放在libs文件夹下需要在build.gradle配置
    Android studio加载语音识别libpocketsphinx_jni.so库文件_第1张图片
  2. 不同CPU架构下so文件兼容问题
  1. 模拟器常用的x86支持armeabi,armeabi-v7a
    jniLibs目录下
    i. 如果存在/x86/.so文件,优先加载此文件
    ii. 如果不存在x86文件,会选择armeabi-v7a下的.so文件
    iii. 如果也不存在armeabi-v7a文件,会选择armeabi下的.so文件
  2. 现在大部分安卓手机常用的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文件)
    Android studio加载语音识别libpocketsphinx_jni.so库文件_第2张图片

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

原因:安卓6以上targetSdk>=23, 系统将会拒绝加载包含text relocations的共享库,同时输出错误Log
解决:版本改为22 (网上说真正的解决方案就是解决so动态链接库中的text relocations (TEXTRELs)问题)
Android studio加载语音识别libpocketsphinx_jni.so库文件_第3张图片

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

Android studio加载语音识别libpocketsphinx_jni.so库文件_第4张图片
原因:so库里的接口都是带包名的,如果从别的项目拷贝过来,包名变了而.so库里的接口包名没变,就会造成找不到jni方法的异常。
解决:保持so库的包结构不变
Android studio加载语音识别libpocketsphinx_jni.so库文件_第5张图片

你可能感兴趣的:(android,studio,语音识别,android)