当前位置: 代码迷 >> Android >> APP_ABI := armeabi armeabi-v7a mips x86与= armeabi armeabi-v7a区别是?解决思路
  详细解决方案

APP_ABI := armeabi armeabi-v7a mips x86与= armeabi armeabi-v7a区别是?解决思路

热度:243   发布时间:2016-04-28 03:40:24.0
APP_ABI := armeabi armeabi-v7a mips x86与= armeabi armeabi-v7a区别是?
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
------解决思路----------------------
首先要明白ABI的概念:
ABI(Application Binary Interface)实际就是指应用程序基于哪种指令集来进行编译,我们能用到的ABI 也就四种  armeabi armeabi-v7a x86 和mips ,前两者是最常见的。

其次这4个编译选项的含义:
1.‘armeabi’ – 默认选项,将创建以基于 ARM* v5TE 的设备为目标的库。 具有这种目标的浮点运算使用软件浮点运算。 使用此 ABI 创建的二进制代码将可以在所有 ARM* 设备上运行。
2.‘armeabi-v7a’ – 创建支持基于 ARM* v7 的设备的库,并将使用硬件 FPU 指令。
3.‘x86’ – 生成的二进制代码可支持包含基于硬件的浮点运算的 IA-32 指令集.
4.mips — 支持应用二进制接口

总结:
APP_ABI 赋值,就是为了交叉编译生成相应芯片可执行的指令集。直观的看就是如果你将 APP_ABI := armeabi armeabi-v7a mips x86  那么在你的android工程下边的 libs 里边会出现 armeabi armeabi-v7a mips x86 这四个目录下会分别生成 4个.so文件。程序在Android手机运行时,根据手机自身CPU芯片不同,去选择调用相应的.so文件。

我也是研究这个时间不长,希望有问题大家可以探讨。


------解决思路----------------------
引用:
首先要明白ABI的概念:
ABI(Application Binary Interface)实际就是指应用程序基于哪种指令集来进行编译,我们能用到的ABI 也就四种  armeabi armeabi-v7a x86 和mips ,前两者是最常见的。

其次这4个编译选项的含义:
1.‘armeabi’ – 默认选项,将创建以基于 ARM* v5TE 的设备为目标的库。 具有这种目标的浮点运算使用软件浮点运算。 使用此 ABI 创建的二进制代码将可以在所有 ARM* 设备上运行。
2.‘armeabi-v7a’ – 创建支持基于 ARM* v7 的设备的库,并将使用硬件 FPU 指令。
3.‘x86’ – 生成的二进制代码可支持包含基于硬件的浮点运算的 IA-32 指令集.
4.mips — 支持应用二进制接口

总结:
APP_ABI 赋值,就是为了交叉编译生成相应芯片可执行的指令集。直观的看就是如果你将 APP_ABI := armeabi armeabi-v7a mips x86  那么在你的android工程下边的 libs 里边会出现 armeabi armeabi-v7a mips x86 这四个目录下会分别生成 4个.so文件。程序在Android手机运行时,根据手机自身CPU芯片不同,去选择调用相应的.so文件。

我也是研究这个时间不长,希望有问题大家可以探讨。


需要注意的是选择的平台越多,so库也越多,打包的apk体积也越大。
主要3个平台,x86,arm,mips,arm又分为是否支持硬件浮点运算。