2016-07-22 11:07 出处:清屏网 人气:683 评论(0)html
RT,在Andoridsutdio中调用.so库出现如现标题所示错误,该怎么解决。首先出现这个错误的缘由是由于你的cpu架构是64位的。而你的.so库在编译的时候没有支持64位cpu。 经@lolstudio 提醒, 若是这个.so的库是你本身弄的,那你从新生成下支持64位cpu的.so库出来就好了,剩下的文字就不用看了,本文适用于你无法对.so作操做的朋友。查看cpu架构,能够经过adb shell 命令。进入/system/目录下有一个build.prop文件,这个里面有一行 ro.product.cpu.abi=xx就是你所要的信息,具体命令以下:android
adb shell cd /system cat build.prop
apk包在安装的时候,系统会把包中与本身的abi对应的lib目录中的so库文件拷贝到system分区中,32位机器中只有一个目录/system/lib,64位机器中有两个目录/system/lib和/system/lib64,app启动进行连接时,64位机器中会先到/system/lib64目录中去找,这时候确定找不到。若是没有找到再到/system/lib目录中去找。若是你把32位的so库拷贝到了lib64目录中,会致使连接失败,一样,64位的so库被拷贝到lib目录中也会致使失败,因此so库要和目录一一对应。shell
首先个人目录结构是这样的:网络
个人.so并无放在新建的jniLibs目录中,这个关系应该不大,两种方式均可以。架构
个人cpu架构是 ro.product.cpu.abi=arm64-v8aapp
而个人只有一个CPU架构就是armebi-v7a,咱们要作的就是阻止生成arm64-v8a;gradle
正常状况打开apk的lib结构以下:ui
方案以下:spa
android.useDeprecatedNdk=true
ndk { abiFilters "armeabi", "armeabi-v7a", "x86", "mips" }
这时候你解压开生成的apk包,会发现目录lib结构以下:htm
OK,这样就解决了个人这个问题,网络上有一些别的阻止生成arm64-v8a,可是很差使。