JNI和NDK
作者:十岁的小男孩
QQ:929994365
心之安处即是吾乡
前言
本文试图通过解答以下三个问题来达到学习JNI和NDK的目的。是什么?有什么用?怎么用?文章内容前三节来自下面第一个链接的博主共享,很详细的解答前两个问题,第二个链接是安卓官网的教程,回到了第三个问题即在实际工程中怎么用。第三个链接是极客学院的资料。本文记录本人阅读与开发过程,力求不失原意,但推荐阅读原文。下一篇博文将重点学习native声明的方法在底层c/c++中具体实现。
https://blog.csdn.net/carson_ho/article/details/73250163
https://developer.android.google.cn/studio/projects/add-native-code
http://wiki.jikexueyuan.com/project/jni-ndk-developer-guide/
目录
1. JNI介绍
1.1 简介
- 定义:
Java Native Interface
,即Java
本地接口 作用: 使得
Java
与 本地其他类型语言(如C、C++
)交互即在
Java
代码 里调用C、C++
等语言的代码 或C、C++
代码调用Java
代码特别注意:
JNI
是Java
调用Native
语言的一种特性JNI
是属于Java
的,与Android
无直接关系
1.2 为什么要有 JNI
- 背景:实际使用中,
Java
需要与 本地代码 进行交互 - 问题:因为
Java
具备跨平台的特点,所以Java
与 本地代码交互的能力非常弱 - 解决方案: 采用
JNI
特性 增强Java
与 本地代码交互的能力
1.3 实现步骤
- 在
Java
中声明Native
方法(即需要调用的本地方法) - 编译上述
Java
源文件javac(得到.class
文件) - 通过
javah
命令导出JNI
的头文件(.h
文件) - 使用
Java
需要交互的本地代码 实现在Java
中声明的Native
方法
如
Java
需要与C++
交互,那么就用C++
实现Java
的Native
方法 - 编译
.so
库文件 - 通过
Java
命令执行Java
程序,最终实现Java
调用本地代码
2. NDK介绍
2.1 简介
- 定义:
Native Development Kit
,是Android
的一个工具开发包NDK是属于
Android
的,与Java
并无直接关系 - 作用:快速开发
C
、C++
的动态库,并自动将so
和应用一起打包成APK
即可通过NDK
在Android
中 使用JNI
与本地代码(如C、C++)交互 应用场景:在Android的场景下 使用JNI
即
Android
开发的功能需要本地代码(C/C++)实现特点
- 额外注意
2.2 使用步骤
- 配置
Android NDK
环境 - 创建
Android
项目,并与NDK
进行关联 - 在
Android
项目中声明所需要调用的Native
方法 - 使用
Android
需要交互的本地代码 实现在Android
中声明的Native
方法
比如
Android
需要与C++
交互,那么就用C++
实现Java
的Native
方法 - 通过
ndk - bulid
命令编译产生.so
库文件 - 编译
Android Studio
工程,从而实现Android
调用本地代码
3. NDK与JNI关系
4. 怎么用?
本节内容的学习是通过阅读安卓官网的教程,本文暂且不赘述,读者自行到官网学习,以下链接:https://developer.android.google.cn/studio/projects/add-native-code
JNI和NDK的更多相关文章
- JNI和NDK编程
Java JNI的本意是Java Native Interface(Java本地接口),它是为了方便Java调用C.C++等本地代码所封装的一层接口.通过Java JNI,用户可以调用C.C++所编写 ...
- JNI与NDK简介
最近稍微了解一下JNI和NDK. 网上各种教程给人一种二者不分的感觉, 经过自己运行代码, 将两者的关系理了一下. 就目前了解,JNI应该是java自带的一种调用c和c++等语言(native cod ...
- JNI和NDK的区别
http://blog.csdn.net/ithomer/article/details/6828830 NDK(Native Development Kit)“原生”也就是二进制 android常用 ...
- 【转】 Android 开发 之 JNI入门 - NDK从入门到精通
原文网址:http://blog.csdn.net/shulianghan/article/details/18964835 NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub ...
- 【转】JNI和NDK的区别
原文网址:http://blog.csdn.net/ithomer/article/details/6828830 NDK(Native Development Kit)“原生”也就是二进制 andr ...
- 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化
第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...
- 【Android 应用开发】Android 开发 之 JNI入门 - NDK从入门到精通
NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub - https://github.com/han1202012/NDKHelloworld.git -- Java传递参数给C ...
- 《android开发艺术探索》读书笔记(十四)--JNI和NDK编程
接上篇<android开发艺术探索>读书笔记(十三)--综合技术 No1: Java JNI--Java Native Interface(java本地接口),它是为了方便java调用C. ...
- 【OpenCV for Android】Android Studio JNI和NDK配置及采坑记录
在配置好Android studio的OpenCV环境后,我们就可以通过Java代码调用OpenCV的API了,但是在通常情况下,用Java代码编写图像处理算法的运行效率是没有C++代码高的,在应用层 ...
随机推荐
- C# 多窗体之间方法调用
看似一个简单的功能需求,其实很多初学者处理不好的,很多朋友会这么写: //父窗体是是frmParent,子窗体是frmChildA //在父窗体中打开子窗体 frmChildA child = new ...
- CENTOS 升级Nodejs 到最新版本
1.去官网下载和自己系统匹配的文件: 英文网址:https://nodejs.org/en/download/ 中文网址:http://nodejs.cn/download/ 通过 uname -a ...
- CM记录-Hadoop运维管理
1.自动化运维--cloudera manager 2.手动运维 a.启动./start.all.sh,停止./stop-all.sh b.hdfs启动/停止:./start-dfs.sh ./s ...
- Study 7 —— while循环中止语句
循环的终止语句break #用于完全结束一个循环,跳出循环体执行循环后面的语句continue #只终止本次循环,接着执行后面的循环 1. 打印0-100,截止到第6次 count = 0 while ...
- 字典(Dictionary)
字典(Dictionary) 字典是一种可变的容器模型,由键值对组成,键和值用冒号分隔,用花括号括起来: d = {key1 : value1, key2 : value} 字典的值可以是任何类型的数 ...
- 旅行商问题(TSP)、最长路径问题与哈密尔顿回路之间的联系(归约)
一,旅行商问题与H回路的联系(H回路 定义为 哈密尔顿回路) 旅行商问题是希望售货员恰好访问每个城市一次,最终回到起始城市所用的费用最低,也即判断图中是否存在一个费用至多为K的回路.(K相当于图中顶点 ...
- ettercap中间人攻击--参数介绍
攻击和嗅探 -M, --mitm ARP欺骗,参数 -M arp remote # 双向模式,同时欺骗通信双方,-M arp:remote. oneway #单向模式,只arp欺骗第一个 ...
- 向GitHub上上传代码(转)
使用git将项目上传到github(最简单方法) 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下 ...
- C++中的memset、zeroMemory和={0}操作( 转)
使用C/C++编程时,常使用ZeroMemory.memset或 “={0}”来对结构体对象进行初始化或清零.然而这三种方式都有各自的特点,使用时需谨慎,否则容易出现严重错误,本人今日解决一个导致宕机 ...
- js 碰撞 + 重力 运动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...