学了JAVA一段时间后,如果你意识到JAVA的瓶颈所在,那就是到了需要了解JNI的时候了。JNI能做什么,它就是帮JAVA做它不能做的事情。下面是一个ubuntu下实现JNI的简单例子:
1、编写调用了外部库的JAVA程序
public class HelloWorld{
public native void sayHello();
static{
System.loadLibrary("HelloWorld");
}
public static void main(String args[]){
new HelloWorld().sayHello();
}
}
保存为HelloWorld.java
2、编译JAVA程序,生成.class文件
javac HelloWorld.java
生成HelloWorld.class文件
3、使用javah生成头文件,这是连接java程序和外部库之间的桥梁
javah -jni HelloWorld
生成HelloWorld.h
4、编写C程序
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_sayHello
(JNIEnv *env, jobject obj)
{
printf("HelloWorld JNI!\n");
return;
}
保存为HelloWorld.c
5、编译C程序,在linux下:
gcc -fPIC -I /usr/lib/jvm/java-6-openjdk/include -I /usr/lib/jvm/java-6-openjdk/include/linux -I /usr/include -shared -o libHelloWorld.so HelloWorld.c
生成libHelloWorld.so文件
6、执行java可执行.class文件(linux下的JAVA调用外部库的时候没有在当前目录下找,所以执行java命令时要加上-Djava.library.path=<库所在路径>)
java -Djava.library.path=. HelloWorld
控制台输出:
HelloWorld JNI!
总结:这是一个很简单的例子,真正做项目的时候,要碰到的问题还是很多的,多练习才是王道。
分享到:
相关推荐
这篇博客文章“Java中JNI的使用(一)——native”很可能是对Java程序员如何首次接触和使用JNI的一个入门教程。 首先,我们来理解“native”关键字。在Java中,`native`是用来标记一个方法的,表示这个方法的实现是在...
Android以Java为编程语言,使接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个 Activity 类(class)负责创建视窗(window),一个活动中的Activity就是在 foreground(前景)模式,背景运行...
Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...
本"Android入门之C++视频培训教程"旨在为初学者提供一个高效的学习路径,通过一系列视频课程,帮助你快速掌握Android开发所需的C++基础知识。 首先,C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅...
这里定义了一个名为mynative的模块,源文件为hello-jni.c,链接库为-log。 三、调用原生代码 1. 在Java代码中使用NDK:在Android应用的Java代码中,你可以通过Java Native Interface (JNI)调用C/C++函数。例如,在...
- **目标读者与先决条件**:本书面向已具备一定Android基础知识(如Activity、View、Layout等)的开发者,特别是那些熟悉Java和C语言,并对Linux及Shell脚本有一定了解的专业游戏开发者。 - **主要内容**:涵盖从...
【标题】"8222.zip" 是一个与Android开发相关的压缩文件,其中涉及到的核心技术领域是C/C++编程。这个文件可能包含了深入的笔记或教程资料,旨在帮助开发者理解和掌握在Android平台上使用C/C++进行原生代码开发的...
这可能是一个全面的Android开发教程,深入探讨了更多高级主题,如: 1. **多线程与异步处理**:讲解了AsyncTask、Handler、Looper、Thread和Runnable等多线程技术。 2. **Fragment**:在大屏幕设备上构建可重用的...
**OpenCV**(Open Source Computer Vision Library)是一个开源计算机视觉库,广泛应用于图像处理、视频分析和模式识别等领域。OpenCV 2.4.3 版本在原有基础上进行了更新和优化。 ##### 1.1 Linux环境下的安装 - **...