NDK的使用场景
1、进一步提升设备性能:以降低延迟或运行游戏或物理模拟等计算密集型应用(java等语言有垃圾回收机制,可能导致频繁gc,并且运行效率较低,不适合处理密集计算行的逻辑处理)。
2、为了使用自己或其他开发者的 C 或 C++ 库。
NDK的使用流程
使用 NDK 将 C 和 C++ 代码编译到原生库中,一般是.so文件,Java 代码随后可以通过 Java 原生接口 (JNI) 框架调用原生库中的函数,完成调用
编译和调试原生代码的工具
Android 原生开发套件 (NDK): 这套工具使您能在 Android 应用中使用 C 和 C++ 代码。
CMake: 一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。
LLDB: Android Studio 用于调试原生代码的调试程序。
几个重要的概念
原生共享库: NDK 从 C/C++ 源代码构建这些库或 .so 文件。
原生静态库: NDK 也可构建静态库或 .a 文件,而您可将静态库关联到其他库。
Java 原生接口 (JNI): JNI 是 Java 和 C++ 组件用于相互通信的接口。
应用二进制接口 (ABI): ABI 可以非常精确地定义应用的机器代码在运行时应该如何与系统交互。NDK 根据这些定义构建 .so 文件。不同的 ABI 对应不同的架构:NDK 为 32 位 ARM、AArch64、x86 及 x86-64 提供 ABI 支持。
原则上,c,c++层应当保证ios与Android的都能用,因此尽量少用平台限制性的方法api,例如文件保存,硬件调用等Android能用,ios就不能用了。方法应该尽量处理流的计算过程并返回相应流的结果。ios与Android都支持并实现了lib c++标准库,应该以这个库的api为准。
网友评论