你必须知道的ABI和CPU关系

内容出自:http://blog.csdn.net/xx326664162/article/details/51167849
ABI和CPU的重要知识

1、 大部分cpu都支持多于一种的ABI。
2、 当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。

3、

你必须知道的ABI和CPU关系_第1张图片
注意:上表格中的空白部分,是我不知道它是否支持,极有可能是不支持

解析: x86设备上,选择ABI的优先级

libs/x86目录中如果存在.so文件的话,会被安装
如果不存在,则会选择armeabi-v7a中的.so文件
如果也不存在,则选择armeabi目录中的.so文件
x86设备能够很好的运行ARM类型函数库,但并不保证100%不发生crash,特别是对旧设备,因为是运行在x86设备上模拟arm的虚拟层上。

4、 64位设备(arm64-v8a, x86_64, mips64)能够运行32位的函数库,但是以32位模式运行,在64位平台上运行32位版本的ART和Android组件,将丢失专为64位优化过的性能(ART,webview,media等等)。

5、 最好是针对特定平台提供相应平台的二进制包,这种情况下运行时就少了一个模拟层(例如x86设备上模拟arm的虚拟层),从而得到更好的性能(归功于最近的架构更新,例如硬件fpu,更多的寄存器,更好的向量化等)。

6、 会安装优先级较高的ABI目录,则其它优先级较低的ABI目录(包括其它module中的ABI目录),都无法安装。例如:在cpu是ARMv7架构的手机上,如果检测到armeabi-v7a,就会选择安装armeabi-v7a,则armeabi下的文件,都无法安装了。

7、 相应的ABI二进制文件,要放进相应的ABI目录中

8、一般情况下不要简单得修改架构目录名

我们可以通过Build.SUPPORTED_ABIS得到根据偏好排序的设备支持的ABI列表。但你不应该从你的应用程序中读取它,因为Android包管理器安装APK时,会自动选择APK包中为对应系统ABI预编译好的.so文件,如果在对应的lib/ABI目录中存在.so文件的话。

你可能感兴趣的:(Android,NDK,arm,ABI)