Android NDK开发入门

 更新时间:2016年12月20日 15:38:04   作者:小破孩123  
本文主要对NDK产生的背景、使用NDK原因、NDK简介、NDK开发环境的搭建、如何运行NDK提供的事例demo等进行了详细的介绍。具有很好的参考价值,需要的朋友一起来看下吧

神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理,通过在线视频教育网站,我初步了解了NDK的神秘面纱,好东西自然要分享,接下来我们就一起来认识一下Android NDK开发。 

一、NDK产生的背景

Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”。在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的。

不过,Google也表示,使用原生SDK编程相比Dalvik虚拟机也有一些劣势,Android SDK文档里,找不到任何JNI方面的帮助。即使第三方应用开发者使用JNI完成了自己的C动态链接库(so)开发,但是so如何和应用程序一起打包成apk并发布?这里面也存在技术障碍。比如程序更加复杂,兼容性难以保障,无法访问Framework API,Debug难度更大等。开发者需要自行斟酌使用。

于是NDK就应运而生了。NDK全称是Native Development Kit。

NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。NDK将是Android平台支持C开发的开端。

二、为什么使用NDK

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

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

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

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

三、NDK简介

  1.NDK是一系列工具的集合

  NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。

NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。

NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

  2.NDK提供了一份稳定、功能有限的API头文件声明

Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。

四、NDK开发环境的搭建 

 1.下载安装Android NDK

 地址:http://developer.android.com/sdk/ndk/index.html

 2、安装DNK

    网上流传很多关于Linux环境搭建DNK开发的方法,不过今天要为大家说明一点,Google经过这些年的努力,现在NDK的安装已经非常简单,而且支持众多平台,今天我们就以win平台来为大家介绍如何配置开发环境与设计开发DNK程序。首先是安装,上面提供的下载地址是官网地址,大家可以根据自己的需求选择下载,不过由于在国内限制访问国外网站,所以下载的话必须FQ,FQ对于一些程序员来说又是一件难事,这里我为大家提供一个下载地址:android-ndk-r9

   下载好之后,安装DNK非常简单,我们将下载的.zip文件解压,然后将文件拷贝到我们的任意一个磁盘中即可。

 3.配置 NDK 环境变量

    学过JAVA的小童鞋,对于配置环境变量一定不陌生,这里我就简单介绍一下如何配置DNK的开发环境,右键单击我的电脑-->属性-->高级系统设置-->高级-->环境变量

    在打开的环境变量,系统变量中找到Path,双击,在最后将我们DNK安装目录添加上去。

    到这里我们的win环境配置Android NDK开发环境已经完成,最后我们通过命令行验证一下我们的配置:点击开始-->输入cmd回车-->输入ndk-build回车,如果打印出信息表示我们的配置完成。

五、运行NDK提供的事例demo

    运行事例demo之前我们需要保证我们的Android开发环境已经配置好,对于Android开发环境的配置,我就不再赘述,大家如果有疑问可以单独留言讨论。下面我们开始导入事例demo,打开eclipse Android开发环境,然后右键单击空白区域,选择Import-->Android导入:

 

   导入工程后,我们先来看一下目录结构:

    jni目录下的文件就是我们的.c文件,obj目录下的.so文件就是我们的ndk编译后的文件,也就是我们库文件。当然刚导入时工程中是没有.so文件的,需要我们编译生成,生成的方法:开始-->输入cmd回车-->cd 我们的工程目录回车,详见下图操作分解:

    到这里我们事例demo就算完成了,下面我们就可以允许测试了。

 第一个NDK程序:HelloWord!

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • Android ProgressBar进度条使用详解

    Android ProgressBar进度条使用详解

    ProgressBar进度条,分为旋转进度条和水平进度条,进度条的样式根据需要自定义,这篇文章主要介绍了Android ProgressBar进度条使用方法,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • 全面解析Android的开源图片框架Universal-Image-Loader

    全面解析Android的开源图片框架Universal-Image-Loader

    这篇文章主要介绍了Android的开源图片框架Universal-Image-Loader,Universal-Image-Loader在GitHub上开源,其提供的图片加载功能令人印象相当深刻,需要的朋友可以参考下
    2016-04-04
  • 非常详细的android so库逆向调试教程

    非常详细的android so库逆向调试教程

    这篇文章主要给大家介绍了关于android so库逆向调试的相关资料,文中通过示例代码以及图文介绍的非常详细,对各位Android开发者具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08
  • ListView点击Item展开菜单实现代码详解

    ListView点击Item展开菜单实现代码详解

    这篇文章主要介绍了ListView点击Item展开菜单实现代码详解的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Android开发实现根据包名判断App运行状态的方法

    Android开发实现根据包名判断App运行状态的方法

    这篇文章主要介绍了Android开发实现根据包名判断App运行状态的方法,结合实例形式分析了Android结合包名判断app运行状态的方法,需要的朋友可以参考下
    2017-11-11
  • Android shape标签使用方法介绍

    Android shape标签使用方法介绍

    shape算是我们常用的一个标签,他可以生成线条,矩形, 圆形, 圆环,像我们圆角的按钮就可以通过shape来实现,最终Android会把这个带有shape标签的图片解析成一个Drawable对象,这个Drawable对象本质是GradientDrawable
    2022-09-09
  • android语音即时通讯之录音、播放功能实现代码

    android语音即时通讯之录音、播放功能实现代码

    这篇文章主要为大家详细介绍了android语音即时通讯之录音、播放功能的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • android判断相机图片朝向的简单方法

    android判断相机图片朝向的简单方法

    下面小编就为大家带来一篇android判断相机图片朝向的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 在ubuntu下编译ijkplayer-android的方法

    在ubuntu下编译ijkplayer-android的方法

    下面小编就为大家分享一篇在ubuntu下编译ijkplayer-android的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Android 自定义View实现抽屉效果

    Android 自定义View实现抽屉效果

    这篇文章主要介绍了Android 自定义View实现抽屉效果的相关资料,需要的朋友可以参考下
    2017-05-05

最新评论