什么是NDK:
Native Develop Kit ,Android NDK 是一套允许您使用 C 和 C++ 等语言,以原生代码实现部分应用的工具集。在开发某些类型的应用时,这有助于您重复使用以这些语言编写的代码库。
NDK还提供交叉编辑器,只需要修改mk文件就可以生成特性的CPU平台的动态库。
- NDK可能不适用于大多数只需要使用Java代码和框架API来开发其应用程序的Android新手。
什么时候使用NDK:
- 进一步提升设备性能,以降低延迟,或运行计算密集型应用,如游戏或物理模拟。
- 重复使用您自己或其他开发者的 C 或 C++ 库。
- 在平台之间移植其应用。
- 提高代码的安全性。由于SO库的反编译难度较大。
什么是JNI:
Java 原生接口( Java Native Interface ),是Java调用C++的规范。Java的优点是跨平台,其跨平台性导致其本地交互能力不够强大,一些和操作系统相关的操作无法完成,于是Java提供了JNI专门用于和本地代码交互(JNI并不是Android独有的东西),通过JNI,Java可以调用C/C++所编写的本地代码。
- 通过NDK可以在Android中更加方便地通过JNI来访问本地代码。
armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64是什么东西:
Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI( armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64 )。
- ARM :是嵌入式中的一种架构,全称为Advanced RISC Machine,可以理解为ARM处理器。
- ABI(Application Binary Interface):应用程序二进制接口 描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口。
ABI和CPU(ARM)关系:
大部分cpu都支持多于一种的ABI。
当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。
ABI和CPU的关系图
理论上说armeabi支持在 armeabi,armeabi-v7a,arm64-v8a下运行,也支持部分x86。而市面上基本没有mips架构的手机,所以理论上一个armeabi 就支持所有的手机了。armeabi运行在v7 v8 下只是效率会有偏差。But---看看这个
网友评论