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++代码高的,在应用层 ...
随机推荐
- (Java)入门训练 斐波那契数列
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...
- javascript Date定义和体验
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JS基础:翻转数组
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(arr); //操作原数组,让原数组第一位和最后一个位调换位置,以此类推. for (va ...
- ps知识集锦
1.工具箱 移动工具 [V]矩形.椭圆选框工具 [M]套索.多边形套索.磁性套索 [L]快速选择工具.魔棒工具 [W] 裁剪.透视裁剪.切片.切片选择工具 [C]吸管.颜色取样器.标尺.注释.12 ...
- ICS Hack Tools
参考链接:http://icstraining.org/en/security-tools/configurations ICS-Security-Tool: https://github.com/I ...
- 20155332 2016-2017-2 《Java程序设计》第9周学习总结
20155332 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型和自定义 ...
- json 不能 dumps datetime 解决办法
backend.myviews.json_time.py from datetime import date import json from datetime import datetime cla ...
- node.js 找不到 xxx 模块解决办法
node.js找不到xxx 这个模块的解决方法. 按顺序来. 1.检查一下是否拼写错误. 2.这个模块是自己写的,是的话.检查一下路径是否正确. 3.如果是导入的模块.用 npm list这个命令输出 ...
- [C++]Linux之间隔时间内循环执行指定程序
#include<time.h> #include<unistd.h>//usleep(num) #include<stdio.h> #include<std ...
- 转载-YARN的内存和CPU配置
Hadoop YARN同时支持内存和CPU两种资源的调度,本文介绍如何配置YARN对内存和CPU的使用. YARN作为一个资源调度器,应该考虑到集群里面每一台机子的计算资源,然后根据applicati ...