起因
从事android
开发的小伙伴都知道,在我们进行so库适配的时候,只需要保留armabi
这个库,就可以匹配市面上几乎所有的机型
但同时我们也知道,不同架构cpu
只能执行与其对应架构编译出来的程序,也就是说x86设备只能执行x86程序,而不能执行ARM程序
那为什么x86的安卓设备却可以执行armabi
的so库呢?
解答
我们知道从最一开始基于ARM的程序占据了几乎所有的Android生态环境。Inter为了顺利打入移动市场,一个至关重要的问题就是需要兼容ARM应用程序。
但是不同架构cpu对应的指令集不一致,为了解决这个问题,就需要一个中间翻译器,于是Inter开发了软件Houdini。Houdini可以把ARM指令集转化为X86指令集从而在Android X86设备上运行
同时由于市面上mips
架构的安卓设备非常少,这也就是为什么只需一个armabi
就可以通吃几乎所有设备,不过x86设备运行ARM程序虽然没什么问题,但是执行效率的损伤是必然的
附加
在adb shell
模式下, 可以通过一下命令查看当前安卓设备支持的指令架构:
getprop
如果是x86
的cpu
,既可以运行x86
的可执行文件,也可执行ARM
架构的程序,具体的参考prop
中对应的abi