CPU架构

iPhone CPU架构

架构对应的设备:

 armv6 设备: iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch
 armv7 设备: iPhone3GS, iPhone4, iPhone4S;iPad, iPad2, iPad3(The New iPad), iPad mini;iPod Touch 3G, iPod Touch4
 armv7s设备: iPhone5, iPhone5C, iPad4(iPad with Retina Display)
 arm64 设备: iPhone5S, iPad Air, iPad mini2(iPad mini with Retina Display)

Android CPU架构

ABI:ApplicationBinary Interface 应用程序二进制接口,定义了二进制文件(尤其是.so文件),如何运行在相应的系统平台上,从使用的指令集、内存对齐到可用的系统函数库。
EABI:Embedded application binary interface 嵌入式应用二进制接口。

armeabi: 第5代、第6代的ARM处理器,是针对所有的arm cpu,只要支持arm的指令集就可以,早期的手机用的比较多。v7a,v8a是针对arm后来出的指令集版本制定的cpu如符合arm7指令集的cpu。
armeabi-v7a: 第7代及以上的 32位ARM 处理器,是针对有浮点运算或高级扩展功能的arm v7 cpu,2011年15月以后的生产的大部分Android设备都使用它.
arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
x86: 平板、模拟器用得比较多。
x86_64: 64位的平板。

项目包含总结

如果项目只包含了 armeabi,那么在所有Android设备都可以运行;
如果项目只包含了 armeabi-v7a,除armeabi架构的设备外都可以运行;
如果项目只包含了 x86,那么armeabi架构和armeabi-v7a的Android设备是无法运行的; 
如果同时包含了 armeabi, armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,同时也会导致包变大。

例如,如果只想支持armeabi-v7a,需要在gradle中配置

    defaultConfig {
        ndk {
            abiFilters "armeabi-v7a"
        }
    }

默认情况下,打包后会自动生成armeabi 到 x86的所有文件夹。这就有可能导致一些x86的设备因为在x86文件夹下找不到so文件,而使应用崩溃。

发表评论