Android NDK开发日志(一)

来源:互联网 发布:unix网络编程卷2 编辑:程序博客网 时间:2024/06/05 23:08

Android NDK开发日志(一)

NDK简介

NDK (Native Development Kit)是什么?

NDK是一系列工具的集合,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

Android NDK的作用?

我们知道在Android上层APP应用都是通过java写出来的.但是当我们设计游戏或视频,音频程序时,肯定需要完成一些复杂的数学运算,这些复杂的操作基本都是放在底层的库中运行的,而且不是通过java语言写出来的,因为java是基于虚拟机的,比C直接面向CPU的执行效率要低很多。所以在Android架构中,底层代码是以C语言,库的形式来完成,例如下图中第3层的各种库。
图片
还有跨平台程序的移植,也是需要用到NDK的技术。如果一款游戏曾经在PC上运行成功,现在要移植到Android等操作系统上,如果用Java代码全部重写一遍,代价是相当大的,并且后期维护的工作量也非常大,有多少平台就要维护多少个版本,可想而知这是效率非常低的。如果我们把该游戏核心的部分,如游戏引擎,视频,音频,图像处理等统一用C语言来编码完成,然后只用Java语言来写一个上层的调用界面,那么工作量和后期可维护性要简单很多。
当然如果编写一个比较简单的应用,只通过Applications,Application Framework 2层就可以完成的程序,那么并不需要使用NDK

Android NDK优缺点有哪些?

优点:

1.运行效率高

2.利于充分发挥软硬件优势

3.利于代码复用

4.降低版本控制成本

5.降低开发成本

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

7.可以方便地使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。

8.提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。

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

缺点:

1.开发难度较高

2.调试难度较高(以库的形式存在)

3.增加开发团队规模

NDK安装及环境配置

第一步:在谷歌官网下载Android NDK包

第二步:配置环境变量(PATH),如下图所示则配置OK
图片

环境变量的作用:当我们输入一个命令时,如果此命令在缺省目录找不到,那么就会打开PATH环境变量,根据分号分开的目录逐个去找我们输入的命令有没有对应的执行程序,如果找到就执行,如果找不到就报错。

下面我们进入控制台看看是否NDK安装成功

输入ndk-build回车,看到如下图一些提示信息

图片

这样就表示NDK的配置已经完成了,很简单吧。

NDK目录结构简介

图片

我们在控制台中输入的ndk-build就是来自于目录中的ndk-build.cmd脚本文件 ,这也是以后做NDK开发要频繁使用的。

  • samples目录:都是NDK为我们提供的一些例子代码,如果这些例子代码都能看懂的话,就已经可以写出很优秀的NDK程序了。
  • toolchains目录:是交叉编译工具,我们可以在PC上编译出手机上运行的程序,所用的编译器就是来自于toolchains目录中的某种编译器。随意点开一个编译器的目录,可以看到里面很多执行程序,其中包含了编译器,调试器,链接器等等工具。当我们写好一个C/C++程序后,就是由这个目录中的程序进行处理的,当然现在新版本的NDK已经不需要手动去调用这些程序了。

NDK开发

开发环境

请大家务必升级到AS 2.2以上版本, 因为这个版本升级了很多内容, 详情请见 Android Studio 2.2 正式稳定版发布。

  • Android Studio 2.2.2及以上版本
  • JDK1.7
  • API 24
  • Gradle 2.2.2

开始开发

1.新建工程, 选中Include C++ Support

图片

2.一路Next之后, 在最后Finish页面尽量选中图示两项, 这样会给我们包裹一些特定的示例代码, 帮助我们理解和使用

图片

3.运行项目,可以看到示例代码调用native-lib库,在TextView上显示”Hello from C++”,这样第一个Hello Word即可完成了。

原创粉丝点击