Android SDK、NDK、JNI的简单介绍
来源:互联网 发布:网络给手机发短信 编辑:程序博客网 时间:2024/05/17 05:02
Android SDK:
SDK (software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此!Android SDk 指的既是Android专属的软件开发工具包
JNI:
Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作
当然一般需要进行如下操作流程:
1) 编写java程序:这里以HelloWorld为例。为了实现在 java代码中调用c函数printf。
代码1:
class HelloWorld {
public native void testHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().testHelloWorld();
}
}
声明native方法:如果你想将一个方法做为一个本地方法的话,那么你就必须声明改方法为native的,并且不能实现。
Load动态库:System.loadLibrary("hello");
这里一般是以static块进行加载的。同时需要注意的是System.loadLibrary()的参数“hello”是动态库的名字。
2) 编译
javac HelloWorld.java
3) 生成扩展名为h的头文件 javah ?
JNIEXPORT void JNICALL Java_HelloWorld_testHelloWorld (JNIEnv *, jobject);
这个h文件相当于我们在java里面的接口,这里声明了一个 Java_HelloWorld_testHelloWorld (JNIEnv *, jobject)方法,然后在我们 的本地方法里面实现这个方法,也就是说我们在编写C/C++程序的时候所使用的方法名必须和这里的一致)。
4) 编写本地方法实现和由javah命令生成的头文件里面声明的方法名相同的方法
代码2:
#include "jni.h"
#include "HelloWorld.h"
#include other headers
JNIEXPORT void JNICALL Java_HelloWorld_testHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!/n");
return;
}
注意代码2中的第1行,需要将jni.h(该文件可以在%JAVA_HOME%/include文件夹下面找到)文件引入,因为在程序中的JNIEnv、 jobject等类型都是在该头文件中定义的;另外在第2行需要将HelloWorld.h头文件引入。然后保存为 HelloWorldImpl.c就ok了。
5) 生成动态库
这里以在Windows中为例,需要生成dll文件。在保存HelloWorldImpl.c文件夹下面,使用VC的编译器cl成。 cl -I%java_home%/include -I%java_home%/include/win32 -LD HelloWorldImp.c -Fehello.dll 注意:生成的dll文件名在选项-Fe后面配置,这里是hello,因为在HelloWorld.java文件中我们loadLibary的时候使用的名字是hello。
另外需要将-I%java_home%/include -I%java_home%/include/win32参数加上,因为在第四步里面编写本地方法的时候引入了jni.h文件。
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就是简化了这个过程。
打个不恰当比方:JNI 需要自己买菜、洗菜、炒菜、煮饭,很麻烦;NDK就是宅急送,一个电话。
- Android SDK、NDK、JNI的简单介绍
- Android SDK、NDK、JNI的简单介绍
- Android的SDK,NDK以及JNI
- Android的SDK,NDK以及JNI
- Android SDK/JNI/NDK/ADT
- Android NDK JNI 的简单使用
- android studio JNI/NDK的简单使用
- android图文介绍NDK安装及简单jni demon的实现
- Android JNI/NDK 简单使用
- Android SDK与NDK介绍
- 使用Android NDK开发(一):Android NDK介绍(包括JNI的介绍)
- Android NDK探究奥秘二:Jni的基本介绍。
- Android NDK JNI 的环境搭建以及简单的代码
- Android NDK环境搭建及调用JNI的简单步骤
- Android Studio运行NDK程序,简单的JNI实例
- Android studio2.2 NDK,JNI的简单使用
- Android Studio运行NDK程序,简单的JNI实例
- Android Studio NDK环境配置与JNI简单的例子
- 关于转圈打印数字,输入指定行和列和起始值,自动完成打印
- Nginx源代码分析--基本数据结构--hash
- 癞蛤蟆肉挺香的
- poj 1269
- Java人员面评
- Android SDK、NDK、JNI的简单介绍
- HibernateIocLab--Bean后处理
- 使用 Windows CE .NET 测试工具包
- Weblogic.Tomcat.Apache.JBoss.IIS之间的区别
- 从键盘输入一个串,将其中的小写字母全部换成大写字母,然后输出到一个磁盘文件“TEST”中保存输入的字符串以“!”结束。
- 关于Node.js
- 静态代码检查工具PC-Lint
- Spring集成Hibernate
- 医院院长修电视-----鄙视医院乱收费情况