参考android
https://www.jianshu.com/p/d2119b3880d8
https://developer.android.google.cn/ndk/guides/abis架构
ABI 是 Application binary interface,应用程序二进制接口的缩写.ide
不一样的 Android 手机使用不一样的 CPU,进而支持不一样的指令集。 CPU 与指令集的每种组合都有专属的应用二进制界面,即 ABI。 ABI 能够很是精确地定义应用的机器代码在运行时如何与系统交互。 您必须为应用要使用的每一个 CPU 架构指定 ABI。性能
ABI 的指定是在代码的编译阶段进行的,咱们使用的各类静态库、动态库,就是支持某个 ABI 的。因此咱们在集成不少第三方库的时候,教程会让咱们把 so 放到指定的文件夹中,文件夹命名其实就是 ABI 的名字。ui
好比高德地图:google
“使用自定义配置,将下载文件的 armeabi 文件夹复制到 libs 目录,若是有这个目录,请将下载的 so 库复制到这个目录”3d
Android 支持的 ABI 以下表:code
在 Android Studio 里能够经过下面的配置设置工程支持的 ABI:blog
ndk { // 设置支持的SO库架构 abiFilters 'armeabi-v7a','armeabi', 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a' }
正常来说,咱们应该为每种 ABI 提供对应的 so 文件,可是实际场景中每每没有这么作,缘由通常有如下几点:教程
若是咱们不可以为全部架构都提供全部对应的 so,兼容工做就十分重要了。在作 SDK 开发的时候,因为 SDK 支持的 ABI 和 宿主工程支持的 ABI 可能有多种组合,因此尤为要搞明白 ABI 是如何工做的
重要原则:
把一些 case 汇总到表格:
能够看到,若是 SDK 支持 armeabi、armeabi-v7a、arm64-v8a 的话,几乎能够覆盖所有场景,Android 手机助手也正是采用了表格中的第4行的情形,由于一些库没有 armeabi 架构的支持包,因此最终使用了这种方式。