JNI-HelloWorld

原创 2012年04月06日 12:03:54
1) 编写java程序:
  
  这里以HelloWorld为例。
  
  代码1:
  
  class HelloWorld {
  public native void displayHelloWorld();
  
  static {
  System.loadLibrary("hello");
  }
  
  public static void main(String[] args) {
  new HelloWorld().displayHelloWorld();
  }
  }
  
  声明native方法:如果你想将一个方法做为一个本地方法的话,那么你就必须声明改方法为native的,并且不能实现。其中方法的参数和返回值在后面讲述。
  
   Load动态库:System.loadLibrary("hello");加载动态库(我们可以这样理解:我们的方法displayHelloWorld()没有实现,但是我们在下面就直接使用了,所以必须在使用之前对它进行初始化)这里一般是以static块进行加载的。同时需要注意的是System.loadLibrary();的参数“hello”是动态库的名字。
  
  main()方法
  
  2) 编译没有什么好说的了
  
  javac HelloWorld.java
  
  3) 生成扩展名为h的头文件
  
  javah HelloWorld 如果使用的Eclipse则,可以在对应的bin目录下,javah完全限定名比如:com.zm.HelloWorld
  
  头文件的内容:
  
  #include <jni.h>
  
  
  #ifndef _Included_HelloWorld
  #define _Included_HelloWorld
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
  (JNIEnv *, jobject);
  
  #ifdef __cplusplus
  }
  #endif
  #endif
  
   (这里我们可以这样理解:这个h文件相当于我们在java里面的接口,这里声明了一个Java_HelloWorld_displayHelloWorld (JNIEnv *,jobject);方法,然后在我们的本地方法里面实现这个方法,也就是说我们在编写C/C++程序的时候所使用的方法名必须和这里的一致)。
  
  4) 编写本地方法
  
  实现和由javah命令生成的头文件里面声明的方法名相同的方法。
  
  代码2:
  
  1 #include <jni.h>
  2 #include "HelloWorld.h"
  3 #include <stdio.h>
  4 JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv*env, jobject obj)
  {
  printf("Hello world!\n");
  return;
  }
  
  注意代码2中的第1行,需要将jni.h(该文件可以在%JAVA_HOME%/include文件夹下面找到)文件引入,因为在程序中的JNIEnv、jobject等类型都是在该头文件中定义的;另外在第2行需要将HelloWorld.h头文件引入(我是这么理解的:相当于我们在编写java程序的时候,实现一个接口的话需要声明才可以,这里就是将HelloWorld.h头文件里面声明的方法加以实现。当然不一定是这样)。然后保存为HelloWorldImpl.c就ok了。如果抛出error C3872: “0x3000”:此字符不允许在标识符中使用,表示此行有中文的空格符,也就是全角空格,你最好把这个语句的后面空白部分,都删除掉,免得有不可见的全角空格。  
  5) 生成动态库
  
  这里以在Windows中为例,需要生成dll文件。在保存HelloWorldImpl.c文件夹下面,使用VC的编译器cl成。
  
  cl -I%java_home%\include -I%java_home%\include\win32 -LDHelloWorldImp.c -Fehello.dll
  
  注意:生成的dll文件名在选项-Fe后面配置,这里是hello,因为在HelloWorld.java文件中我们loadLibary的时候使用的名字是hello。当然这里修改之后那里也需要修改。另外需要将-I%java_home%\include-I%java_home%\include\win32参数加上,因为在第四步里面编写本地方法的时候引入了jni.h文件。关于cl编译器的搭建可以参考这篇http://diansummer.iteye.com/blog/691622
  
  6) 运行程序
  
  java HelloWorld就ok。^_^

JNI Helloworld

  • 2010年03月18日 22:49
  • 1KB
  • 下载

编译好的Android JNI HelloWorld

  • 2014年02月26日 21:36
  • 263KB
  • 下载

第九期 基于模拟器的Helloworld JNI方法 《手机就是开发板》

这一期我们来写一个JNI方法,JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++),JNI是Java调用Native机制,是...

Anroid-JNI-HelloWorld

  • 2015年01月16日 18:04
  • 1.69MB
  • 下载

android jni helloworld

  • 2016年03月04日 15:22
  • 2.42MB
  • 下载

Android JNI helloworld程序编写与编译-图文解说

这是一个经典的helloworld程序,此程序本身并没有什么功能,但是其意义在于抛砖引玉。了解了JNI的机理,对于那些习惯于C程序的人很重要,在处理底层的读写等操作就可以在UI层用java轻而易举地实...

jni-helloWorld

  • 2013年10月06日 16:06
  • 28KB
  • 下载

JNI入门之HelloWorld(一)

  • 2011年12月15日 13:16
  • 140KB
  • 下载

android JNI开发之HelloWorld(eclipse+ndk_r9d)

android JNI开发之HelloWorld(eclipse+ndk_r9d)1.工具:(1)eclipse +adt+sdk。 (2)ndk_r9d。 (3)java(jdk 1.8....

Stuido中使用JNI例子HelloWorld

  • 2017年03月02日 16:38
  • 45.66MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JNI-HelloWorld
举报原因:
原因补充:

(最多只允许输入30个字)