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++代码高的,在应用层 ...
随机推荐
- 无法使用备份文件 'D:\20160512.bak',因为原先格式化该文件时所用扇区大小为 512,而目前所在设备的扇区大小为 4096
删除原先备份的记录 这里再加一条,如果你备份的文件还原有兼容性的问题,那就用低版本的sql做备份,这样的话哪里都能用
- Hive记录-Hive on Spark环境部署
1.hive执行引擎 Hive默认使用MapReduce作为执行引擎,即Hive on mr.实际上,Hive还可以使用Tez和Spark作为其执行引擎,分别为Hive on Tez和Hive on ...
- 图解项目管理流程:禅道&JIRA中的操作
禅道作为优秀的国产开源项目管理软件,禅道集产品管理.项目管理.质量管理.文档管理.组织管理和事务管理于一体,完整覆盖了研发项目管理的核心流程.禅道的设计理念在于提供一体化的解决方案,流程图完整呈现了项 ...
- Code::Blocks代码自动提示设置及常用快捷键
Code::Blocks代码自动提示设置及常用快捷键(适用windows和linux) 1)以下需要设置的地方均在Settings->Editor...弹出的对话框中. 2)不少命令都可针对当前 ...
- mvn依赖冲突
https://www.cnblogs.com/twoheads/p/10082453.html
- 使用Spring时web.xml中的配置
使用Spring时web.xml中的配置: <?xml version="1.0" encoding="UTF-8"?> <web-app x ...
- ubuntu新建组合用户命令不管用
当我们新建了组和用户的时候发现一些命令不管用了,这是什么问题呢. 一.解决方案. 通过以下命令添加组和用户,切换到新用户,发现命令不管用,只有一个$符号. groupadd 新组名 ----添加组 u ...
- DTP协议攻击
DTP协议 动态中继协议DTP(Dynamic Trunking Protocol)是一种Cisco私有协议.DTP用于两台交换机的直连二层端口探测对端的配置,自动协商出二层端口的链路类型和以太网封装 ...
- 《深入理解java虚拟机》第三章 垃圾收集器与内存分配策略
第三章 垃圾收集器与内存分配策略 3.1 概述 哪些内存需要回收 何时回收 如何回收 程序计数器.虚拟机栈.本地方法栈3个区域随线程而生灭. java堆和方法区的内存需要回收. 3.2 对象已死吗 ...
- mongoDB - 日常操作一
mongodb 启动方式 # 不启动认证 ./mongod --bind_ip 172.16.2.17 --port --fork --logpath=/opt/mongodb/mongodb.log ...