Android NDK入坑之旅(二):关于NDK

1.NDK简介

Android NDK 是一套允许您使用原生代码语言(例如 C 和 C++)实现部分应用的工具集;

在开发某些类型应用时,这有助于您重复使用以这些语言编写的代码库;

可用以从你自己的源代码构建,或者利用现有的预构建库。

2.NDK的应用

Google官方不推荐初学者使用NDK进行开发,NDK增加了开发过程的复杂性,对于大多数的Android应用开发来说并没有什么卵用;

从设备获取卓越性能以用于计算密集型应用,例如游戏或物理模拟;

重复使用您自己或其他开发者的 C 或 C++ 库。

上面这两种情况下,NDK那就是一件神器了,至少目前来说是这样的;

NDK多用于:

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

3.NDK的工作方式

1).主要组件

  • ndk-build:ndk-build脚本用于在 NDK 中心启动构建脚本,这些由NDK启动的脚本其功能包括:

 

  • 自动探测您的开发系统和应用项目文件以确定要构建的内容;
  • 生成二进制文件;
  • 将二进制文件复制到应用的项目路径。

对于ndk-build有兴趣,请参考ndk-build

  • Java:这个不用多说,生成.dex文件在DVM中运行的文件;
  • 原生共享库:NDK 从原生源代码构建这些库或 .so 文件;

注:

        如果两个库使用相同的签名实现各自的方法,就会发生关联错误。

        在 C 语言中,“签名”只表示方法名称。在 C++ 中,“签名”不仅表示方法名称,还表示其参数名称和类型

  • 原生静态库:NDK 也可构建静态库或 .a 文件,您可以关联到其他库;
  • Java 原生接口 (JNI):JNI 是 Java 和 C++ 组件用以互相沟通的接口,详细信息请移步至Java 原生接口规范
  • 应用二进制界面 (ABI):

ABI 可以非常精确地定义应用的机器代码在运行时如何与系统交互;

NDK 根据这些定义构建 .so 文件;

不同的 ABI 对应不同的架构:NDK 包含对 ARMEABI(默认)、MIPS 和 x86 的 ABI 支持;

如需了解详细信息,请参阅ABI 管理

  • 清单:如果您要编写没有 Java 组件的应用,必须在清单中声明 NativeActivity 类。原生 Activity 和应用在“使用 native_activity.h 接口”下提供了如何执行此操作的详细信息;

注意:以下两个组件只在使用 ndk-build 脚本构建时以及使用 ndk-gdb 脚本调试时才需要

  • Android.mk:必须在 jni 文件夹内创建 Android.mk 配置文件。 ndk-build 脚本将查看此文件,其中定义了模块及其名称、要编译的源文件、版本标志以及要链接的库。
  • Application.mk:此文件枚举并描述您的应用需要的模块。这些信息包括:
  • 用于针对特定平台进行编译的 ABI;
  • 工具链;
  • 要包含的标准库(静态和动态 STLport 或默认系统)。

posted on 2017-08-23 09:44  冷锋SJ记忆  阅读(295)  评论(0编辑  收藏  举报

导航