手摸手教你创建 Android NDK 工程

一、Android NDK?

Android NDK 是在 SDK 前面又加上了“原生”二字,即 Native Development Kit,因此又被 Google 称为 “NDK”。

众所周知,Android 程序运行在 Dalvik 虚拟机中,NDK 允许用户使用类似 C/C++ 之类的原生代码语言执行部分程序。

1. NDK 包括

从 C/C++ 生成原生代码库所需要的工具和 build files

将一致的原生库嵌入可以在 Android 设备上部署的应用程序包文件(application packages files ,即 .apk 文件)中

支持所有未来 Android 平台的一系列原生系统头文件和库

2. 为何要用到 NDK?

代码的保护,由于 apk 的 java 层代码很容易被反编译,而 C/C++ 库被反编译的难度较大

在 NDK 中调用第三方 C/C++ 库,因为大部分的开源库都是用 C/C++ 代码编写的

便于移植,用 C/C++ 写的库可以方便在其他的嵌入式平台上再次使用

二、JNI

JNI 是 Java Native Interface 的缩写,它提供了若干的 API 实现了 Java 和其他语言的通信(主要是 C&C++ )。从 Java1.1 开始,JNI 标准成为 java 平台的一部分,它允许 Java 代码和其他语言写的代码进行交互。JNI 一开始是为了本地已编译语言,尤其是 C 和 C++ 而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用 java 与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI 标准至少要保证本地代码能工作在任何 Java 虚拟机环境

三、创建 NDK 工程

1. 创建一个空的 Activity 工程

AndroidStudio 3.0 上创建 NDK 项目的时候,记得勾选 include c++ support,这样会很方便。接着一路 Next 最后点击 Finish

工程会自动创建 Ndk 环境配置

2. 创建生成 .so 库和对应 jar 包模块

3. 把第一步中的 NDK 代码移到新创建的模块中

这一步的目的主要是让 NDK 部分的代码独立一个模块,后面可以生成对应的 .so 文件和 jar 包提供给其他项目使用

4. 在其他工程中使用 NDK 的 so 文件和 jar 包

参考链接

* [Android studio3.0 JNI/NDK开发流程](https://www.jianshu.com/p/a37782b56770)

* [Android NDK开发:JNI 基础篇](https://www.jianshu.com/p/ac00d59993aa)

* [Android ABI issue analysis](https://www.jianshu.com/p/18a8a4e6af3f)

* [Android NDK 入门](https://www.imooc.com/learn/411)

* [Android NDK 进阶](https://www.imooc.com/learn/918)

* **推荐** [AndroidStudio 3.0 NDK 环境搭建](http://pvphero.github.io/2018/02/08/AS3NDKEnvironment/)

* [AndroidStudio项目之CmakeLists解析](https://blog.csdn.net/pvpheroszw/article/details/79296257)

* [AndroidStudio项目CMakeLists解析](https://www.cnblogs.com/chenxibobo/p/7678389.html)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180607G01CGI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

扫码关注腾讯云开发者

领取腾讯云代金券