Android JNI和NDK关系
1、什么JNI
Java Native Interface(JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机(VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。
上面过程分为2个部分:
第一、用C语言生成一个库文件。
第二、在java中调用这个库文件的函数。
2、NDK
NDK全称:Native Development Kit。
NDK是一系列工具的集合。
* NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。
* NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
* NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
个人理解,NDK就是能够方便快捷开发.so文件的工具。
JNI的过程比较复杂,生成.so需要大量操作,而NDK就是简化了这个过程。
3、java中调用.so文件代码
其中,在java中加载库文件的代码如下:
System.loadLibrary(*.so的档案名);
例如,Android框架里所提供的MediaPlayer.java类,含指令:
public class MediaPlayer{
static {
System.loadLibrary("media_jni");
}
}
Android JNI和NDK关系的更多相关文章
- [ 转载 ] Android JNI(一)——NDK与JNI基础
Android JNI(一)——NDK与JNI基础 隔壁老李头 关注 4.4 2018.05.09 17:15* 字数 5481 阅读 11468评论 8喜欢 140 本系列文章如下: Androi ...
- Android JNI(一)——NDK与JNI基础
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- Android JNI和NDK学习(04)--NDK调试方法(转)
本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3092812.html 本文主要介绍在ndk中添加log的方法.然后,我们就可 ...
- Android JNI和NDK学习(03)--动态方式实现JNI(转)
本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3092491.html 前面总结了静态实现JNI的方法,本文介绍如何动态实现J ...
- Android JNI 和 NDK
1.Android NDK 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第 ...
- Android JNI和NDK的关系
转自:http://blog.csdn.net/elfylin/article/details/6121466 1.什么JNI Java Native Interface(JNI)标准是java平台的 ...
- android JNI 调用NDK方法
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- Android JNI和NDK学习(02)--静态方式实现JNI(转)
本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3095013.html JNI包括两种实现方法:静态和动态.两种方法的区别如下 ...
- Android JNI和NDK学习(01)--搭建NDK开发环境(转)
本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3095013.html 本文主要介绍“JNI”.“Android NDK”以及 ...
随机推荐
- TCP HTTP 详细内存分析 & time_wait setsockopt
http://www.kegel.com/c10k.html#nb.edge http://www.chinasb.org/archives/2012/11/4954.shtml UDP协议:发送进程 ...
- C++经典KMP算法的实现
#include <iostream> #include <algorithm> #include <vector> #include <string> ...
- 数据库的发展现状与前景——NewSQL界的佼佼者,如Couchbase、Aerospike、Marklogic和 SequoiaDB,NewSQL的许多厂商,如:MemSQL、VoltDB、ScaleDB和CitusDB
转自:http://news.sequoiadb.com/cn/Detail-id-42 2015-03-20 Strata+Hadoop World(SHW)大会是全世界最大的大数据大会之一. ...
- DataGridView 选中行 分类: DataGridView 2015-01-22 09:07 51人阅读 评论(0) 收藏
说明: (1)命名 DataGridView 名称:dgvStockFirst 行索引:recordIndex (2)设置DataGridView属性: SelectionMode=FullRowSe ...
- Centos6.x 安装vnc
一.安装gnome桌面环境 如果系统已经安装了gnome桌面环境,此步省略. # 安装fontforge,避免字体出现方框乱码 yum install fontforge -y # 安装gnome桌面 ...
- DllImport中的EntryPoint
工作中常常会使用到C#的应用来调用C++中的底层函数,此时就须要使用到DllImport,而DllImport中有一个EntryPoint(入口点),非常多文章都没有说明这个值怎样进行获取的,详细获取 ...
- android ScrollView 充满屏幕
android:fillViewport=true ScrollView下面的组件如果有android:layout_height="fill_parent"或android:la ...
- Java和C++在细节上的差异(转)
Java的基本程序结构.关键字.操作符都和C/C++非常相似,以下为主要的几点区别: 一.基本程序设计结构: Java的基本程序结构.关键字.操作符都和C/C++非常相似,以下为主要的几点区别: 1. ...
- Css实现透明效果,兼容IE8
Css实现透明效果,兼容IE8 >>>>>>>>>>>>>>>>>>>>> ...
- EntityFrameowk6.1 使用enum和低版本的不同
原有项目中使用EF5.0 实体类 public partial class Log : BaseEntity { public Nullable<int> LogLevelId { get ...