Android 集成AndFix报java.lang.UnsatisfiedLinkError

来源:互联网 发布:wordpress cms模板 编辑:程序博客网 时间:2024/05/14 03:30

在集成AndFix时,报java.lang.UnsatisfiedLinkError错误,经研究发现,AndFix gradle依赖里面只包含armeabi与x86架构so文件,如果我们的项目里包含除了这个两个架构以外的架构,会导致AndFix抛异常。

出错原因:安卓手机默认查找到该cpu下合适的库时,不会继续查找对应的兼容库。

比如:项目里包含arm64-v8a,64位机器默认去查找arm64-v8a目录下是否有合适的64位库,而不会去查找其他目录下的库

解决方式:

第一种,项目里只包含armeabi与x86架构

第二种,在其他架构文件里面加入对应的AndFix so文件,可以前往github下载


在第一个项目按照上面的方法解决了,在集成另一个项目时按照上面的方法集成,发现还是一直抛java.lang.UnsatisfiedLinkError异常,无法读取so库。经过一段时间研究发现,该项目集成了Facebook的fresco图片库,该库里面配置了abi:

splits {
    abi {
        enable true

        reset()

        include 'x86'‘x86_64’,’arm64-v8a', 'armeabi-v7a''armeabi'

        universalApk false
    }

  }

fresco的draw-pipeline考虑了多种cpu架构的机器,配置了如上架构,所以arm64-v8a的手机就读取arm64-v8a目录下的so库,而不回去读取其他库,导致读取不到其他目录下的so库。

解决方案:

第一种:注释掉draw-pipeline的的abi配置

第二种:配置idk abiFilters(推荐,可以处理其他库导致该问题)

android {

 defaultConfig {

ndk {

     // 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置           abiFilters 'armeabi'// 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64' 

      }

   }

} 

如果在添加 “abiFilter” 之后 Android Studio 出现以下提示:

NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin

在项目根目录的 gradle.properties 文件中添加:

android.useDeprecatedNdk=true

0 0
原创粉丝点击