您的位置:首页 > 运维架构 > 网站架构

android cpu架构兼容 so文件找不到

2016-12-15 17:01 375 查看
目前安卓cpu架构一共有七种类型: 
armeabi,armeabi-v7a,x86,mips,x86_64,mips64,arm64_v8a
在使用第三方接口时,例如高德导航,百度定位,往往他们并没有提供64位的so文件,这时你新建上述那些文件夹,把so文件都拷贝一份是没有用的。
即使单纯把文件夹删了也是不管用的。
第一个原因:高德提供的so文件是32位的,所以只有这
armeabi,armeabi-v7a,x86,mips4个cpu架构是兼容的,并不会报错,拷贝文件无效。
第二个原因:即使没有创建这
x86_64,mips64,arm64_v8a三个文件夹,但是遇到这三种架构的手机依然报错,因为在你打包时,系统会自动添加这些文件夹,所以当手机去文件夹下找时,会报错,找不到。
java.lang.UnsatisfiedLinkError: dlopen failed: is 32-bit instead of 64-bit(Unknown Source)
所以解决方案就是:
一:只保留32位的文件夹
二:配置gradle,只生成32位的文件夹
android {
compileSdkVersion 19
buildToolsVersion '24.0.0'

def
c52e
aultConfig {
multiDexEnabled true
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
这样64位架构的手机会自动到32位的文件夹下进行匹配so文件
附上一段查询CPU架构信息:
 public  List getMeminfo() {List memInfoList = new ArrayList();try {BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("/proc/meminfo")), 1000);String load = null;while ((load = reader.readLine()) != null) {long size = 0l;String[] toks = load.split(":");String sizeBuf = toks[1].trim();String[] sizeBufToks = sizeBuf.split(" ");size = Long.parseLong(sizeBufToks[0]); // kbmemInfoList.add(size);}reader.close();return memInfoList;} catch (IOException ex) {ex.printStackTrace();return null;}}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: