android NDK、JNI技术详解及NDK在Android系统架构中的位置关系

本文详细介绍了Android NDK的作用、在Android系统架构中的位置,以及JNI技术的使用。Android NDK是一组开发工具,允许使用C/C++编写本地代码,以提高性能和灵活性。JNI作为Java与本地代码的桥梁,是Android应用程序调用本地代码的关键。文章还讨论了何时使用NDK,以及NDK与SDK的关系,强调了NDK作为SDK的有效补充。最后,解释了JNI的基本概念、引用类型和功能,包括局部引用、全局引用、原始类型以及函数接口。
摘要由CSDN通过智能技术生成

在上一篇文章中,我们介绍了NDK的下载地址。

本篇文章,我们主要阐明两个问题

1、什么是Android NDK,及其在Android系统架构中的位置?

2、什么事Android JNI技术以及使用方法?


一、什么是Android NDK?

Android NDK(Android Native Development Kit)是一系列的开发工具,允许程序开发人员在Android应用程序中嵌入C/C++语言编写的非托管代码。

Android NDK的最新版本是11b,集成了交叉编译器,支持ARMv5TE处理器指令集、JNI接口和一些稳定的库文件。

Android NDK提供一系列的说明文档、示例代码和开发工具,指导程序开发人员使用C/C++语言进行库文件开发,并提供便捷工具将库文件打包到apk文件中。

Android虚拟机允许应用程序源代码通过JNI技术调用在本地实现的源代码。

而且,Android NDK还提供了

● 一组交叉编译链(编译器、链接器等)来生成可以在Linux,OS X和Windows(用Cygwin)运行的二进制文件;

● 一组与由Android平台提供的稳定的本地API列表的头文件,它们在docs/STABLE-APIS.html中有说明;

● 一个编译系统(build system)可以允许开发者写一个非常短的编译文件(build files)去描述哪个源代码需要编译,并且怎样编译。编译系统可以解决所有的toolchain/platform/CPU/ABI细节的问题。并且,较晚的NDK版本中还添加了更多的可以不用改变开发者的编译文件的情况下的toolchains、platforms、系统接口。

通过以上的叙述,我们知道Android NDK解决了核心模块使用托管语言开发执行效率低下的问题;允许程序开发人员直接使用C/C++源代码,极大的提高了Android应用程序开发的灵活性。

但同时Android NDK也存在着一些不足。

NDK并不是一个可以编写通用的源代码并且可以在Android设备上运行的方法,你的应用程序还是需要使用JAVA程序,适当的处理系统事件来避免“应用程序没有反应”的对话框或者处理Android应用程序的生命周期。注意:可以适当的在源代码中写一个复杂的应用程序,用于启动/停止一个小型的“应用程序包”。

NDK在Android平台仅仅提供了有限的本地API和库文件的支持的系统头文件,然而一个标准的Android系统镜像包括许多本地共享库,这些都应该被考虑在更新和发行版本的可以彻底改变的实现细节。如果Android系统库没有明确的被NDK明确的支持,然后应用程序不应该依赖于它提供的,或者打破了将来在各种设备上的无线系统更新,选定的系统库将逐渐被添加到稳定的NDK API中。



二、什么时候用到NDK?

必须提高性能(例如,对大量数据进行排序);

跨平台应用移植、使用第三方库。举例说明:许多第三方库由C/C++语言编写,而Android应用程序需要使用现有的第三方库,如Ffmpeg、OpenCV、MP4V2这样的库;

底层程序设计(例如,应用程序不依赖Dalvik Java虚拟机);

驱动程序设计、调用系统的底层驱动、调用硬件;

对运行效率敏感的算法实现。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值