错误信息

最近在把nunance提供语音识别服务集成到自己的应用中来时遇到了一些问题:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.holobor.voicedemo-2/base.apk"],nativeLibraryDirectories=[/data/app/com.holobor.voicedemo-2/lib/arm64, /data/app/com.holobor.voicedemo-2/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]] couldn't find "libandroid_platform.so" at ...


原因分析

在网上查找解决方案的时候也发现了很多人都遇到了这个问题,但是给出的解决方案基本上是以下2种:

    1. 保证每个库文件夹下面的so文件完全一致,要有都有,否则都没有;
    1. 只保留armeabi文件夹即可,其他的可以不要,因为即使是64位的处理器也可以运行32位的库,带来的后果是损失效率(总比程序崩溃要好);

以上2种方法对于我的工程还是不行,这个时候我就想到了或许应该看一下我生成的apk文件中的库文件夹是怎样的:

没错,比我工程中多了几个文件夹,我想这就是问题的所在,根据查找顺序,64位处理器会优先查找arm64-v8a,里面如果没有相应的so文件就会报错。
多出来的文件夹是由于我还用了另外一个语音识别引擎Nuance,这种不是通过直接将so库文件拷贝到工程中,而是配置gradle,自动远程下载下来生成的,因为在我的Librarybuild.gradle中有写过:
compile 'com.nuance:speechkit:[email protected]'

找到了原因顿时就看到了曙光 ==、

解决方案

毕竟Nuance自动生成的库文件夹中没有我们所需的so文件,所以按照上面的逻辑,就应该是阻止自动生成我们不需要的文件夹或者下载相关的so文件放到对应的文件夹下面。
鉴于实际情况,因此解决方案如下:
Module(注意不是Library)的build.gradle文件中添加如下内容:

defaultConfig {    ...    ndk {        abiFilters 'armeabi', 'x86'//, 'armeabi-v7a', 'x86_64', 'arm64-v8a', mips, mips64...加入需要生成的文件夹    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这样一来,生成的apk文件的libs文件夹中就只有我们需要的指定的文件夹了,当然也不会报找不到文件的错误了。

更多相关文章

  1. Android(安卓)ScrollView用法
  2. Android程序调试时生成main.out.xml文件,报错: Resource entry mai
  3. android 数据库升级(保留原先数据)
  4. Android通过相机拍照后无法获取URI问题解决
  5. 开启adb su权限
  6. js与android iOS 交互兼容
  7. HTTP Server 'Bad Gateway' ( Android(安卓)adt 或者 sdk 更想不
  8. Android(安卓)studio 中 Gradle手动下载安装集成。方案一,Use def
  9. Android(安卓)intent and activity 经典程序

随机推荐

  1. Android(安卓)- Custom Components
  2. Android(安卓)刮刮乐
  3. Android(安卓)-- Context(Application的应
  4. android 自定义TextView实现秒级数字时钟
  5. Android(安卓)Services with C# Seminar
  6. Free Android(安卓)UI library & compone
  7. android shape设置背景风格为圆角
  8. Android(安卓)studio 快捷键
  9. android中怎么在文字两边划线
  10. Android(安卓)第三方库混淆proguard-rule