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

目前安卓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'

    defaultConfig {
        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]); // kb
                memInfoList.add(size);
            }
            reader.close();
            return memInfoList;
        } catch (IOException ex) {
            ex.printStackTrace();
            return null;
        }
    }


 
 

你可能感兴趣的:(Android基础)