在AS中的libs文件夹下我们会看到有以下几个文件夹,分别是armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64,那么这几个文件夹是用来做什么的呢,下面请听我一一道来。
在AS中默认使用的是gradle编译方式,在libs文件夹下是我们需要引入.so文件。这些文件夹对应这我们android系统cpu的类型。
一、Android 设备的CPU类型(通常称为”ABIs”)
1. armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
2. arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
3. armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
4. x86: 平板、模拟器用得比较多。
5. x86_64: 64位的平板。
6. mips:mips在32位和64位嵌入式领域中历史悠久,获得了不少的成功。
所以在Libs文件下的对应上述的文件夹是对应了我们Android的cpu处理器,就好比我们在res目录下对应的hdpi、xhdp..不同分辨率的文件夹一样,只不过这里是Android的cpu处理器。在早期Android系统几乎只支持ARMv5的CPU架构,而现在Android系统支持的有7种。
二、AS中引入.so文件可能出现的问题
当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。在x86设备上,libs/x86目录中如果存在.so文件的话,会被安装,如果不存在,则会选择armeabi-v7a中的.so文件,如果也不存在,则选择armeabi目录中的.so文件(因为x86设备也支持armeabi-v7a和armeabi)。
所以我们应该尽可能的提供每个ABI优化过的.so文件要么全部支持,要么都不支持:不能混合着使用。应该为每个ABI目录提供对应的.so文件。