胖蔡说技术
随便扯扯

Android “巨子” NDK 的前世今生

本文来自NDK官方文档整理而来.

NDK是一组使您能将C或C++嵌入到Android应用中的工具,能够在Android应用中使用原生代码实现逻辑操作的一整套工具,它的使用有如下显著特性:

  • 在平台之间移植其应用
  • 重复使用现有库,或者提供其自己的库重复使用
  • 在某些情况下提高性能,特别是像游戏这种计算密集型应用

工作原理

这里主要介绍和了解一些Android NDK需要了解的组件和Android NDK的工作流程.

主要组件

在使用Android NDK开发工具包之前,你可能需要了解下有关NDK中的相关组件概念。

  • 原生共享库(即共享库):NDK从C/C++源代码编译这些库或.so文件(其变现形式为.so文件)
  • 原生静态库(即静态库):NDK也可编译静态库或.a文件,而我们也可将静态库关联到其他库
  • Java原生接口(JNI):JNI是Java与C/C++进行交互通信的一套标准通信接口
  • 应用二级制接口(ABI):ABI 可以非常精确地定义应用的机器代码在运行时应该如何与系统交互。NDK 根据这些定义编译 .so 文件。不同的 ABI 对应不同的架构:NDK 为 32 位 ARM、AArch64、x86 及 x86-64 提供 ABI 支持.
  • 清单:如果您编写的应用不包含 Java 组件,则必须在清单中声明 NativeActivity 类.

工作流程

开发Android原生应用的一般流程如下:

  1. 设计应用,确定要以 Java 实现的部分,以及要以原生代码形式实现的部分(虽然可以完全避免 Java,但您可能发现,Android Java 框架对于控制显示和界面等任务很有用)
  2. 创建Android应用
  3. 如果要编写纯原生应用,请在 AndroidManifest.xml 中声明 NativeActivity 类。
  4. 在“JNI”目录中创建一个描述原生库的 Android.mk 文件,包括名称、标记、关联库和要编译的源文件。
  5. 或者,也可以创建一个配置目标 ABI、工具链、发布/调试模式和 STL 的 Application.mk 文件。对于其中任何您未指明的项,将分别使用以下默认值:
* ABI:所有非弃用的 ABI
 * 工具链:Clang
 * 模式:发布
 * STL:系统
 
  1. 原生源代码放在项目的 jni 目录下。
  2. 使用 ndk-build 编译原生(.so、.a)库
  3. 编译 Java 组件,生成可执行 .dex 文件
  4. 将所有内容封装到一个 APK 文件中,包括 .so、.dex 以及应用运行所需的其他文件
赞(0) 打赏
转载请附上原文出处链接:胖蔡说技术 » Android “巨子” NDK 的前世今生
分享到: 更多 (0)

请小编喝杯咖啡~

支付宝扫一扫打赏

微信扫一扫打赏