android NDK开发之NDK与JNI

本文详细介绍了JNI(Java Native Interface)和NDK(Native Development Kit)的概念及其在Android开发中的应用。JNI作为Java与C/C++之间的桥梁,允许Java应用程序调用本地方法;而NDK则是由Google提供的开发包,帮助开发者使用C/C++编写Android应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在android开发中你的应用可能会想调用C/C++代码,那么就会出现这两个东西JNI和NDK,那么你可能会问它们是什么呢?它们有什么用呢?它们有有什么联系?接下来将对它们进行一个详细介绍。

JNI(Java native intereface)
Java Native Interface (JNI)标准是java平台的一部分。为Java应用程序提供调用本地方法的接口,也就是作为java与C/C++的桥梁,实现java调用C/C++或者C/C++调用java。JNI的首要目标在以库文件的形式调用本地方法,在WIndows下为DLL,在UNIX下为SO,也就是动态链接库。

NDK(Native Development Kit)
NDK是Google公司推出的帮助Android开发者通过c/c++本地语言编写应用的开发包(一套用于快速创建native工程的一个工具),包含了C/C++的头文件、库文件、说明文档和示例代码,我们可以理解为Windows Platform SDK一样,是纯C/C++编写的,但是Android并不支持纯C/C++编写的应用,同时NDK提供的库和函数功能很有限,仅仅处理些算法效率敏感的问题,所以推荐初学者学好Java后再学习JNI。 NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。 NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

总结:
JNI是Java调用Native机制,是Java语言自己的特性。全称为Java Native Interface,类似的还有微软.Net Framework上的p/invoke,可以让C#或Visual Basic.Net可以调用C/C++的API,所以说JNI和Android没有关系,在PC上开发Java的应用,如果运行在Windows平台使用JNI是是经常的,比如说读写Windows的注册表。而NDK是Google公司推出的帮助Android开发者通过C/C++本地语言编写应用的开发包,包含了C/C++的头文件、库文件、说明文档和示例代码,我们可以理解为Windows Platform SDK一样,是纯C/C++编写的,但是Android并不支持纯C/C++编写的应用,同时NDK提供的库和函数功能很有限,仅仅处理些算法效率敏感的问题,所以推荐初学者学好Java后再学习JNI。

JNI的过程比较复杂,生成.so需要大量操作,而NDK就是简化了这个过程。NDK中需要用到JNI。

JNI实现java与C/C++沟通的步骤:
- 1、编写包含native本地方法的java类
- 2、通过javah工具生成C/C++语言的头文件
- 3、使用C/C++语言实现头文件
- 4、使用交叉编译工具对C/C++本地代码进行编译,最后通过链接生成*.so可执行的C/C++库
- 5、实际执行Java代码去和本地的C/C++代码互相沟通

下一篇文章将介绍我们的第一个利用NDK的app。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值