Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Android中JNI的调用生成头文件步骤

Android 中通过JNI调用本地方法步骤介绍:首先是在eclipse中生成类文件package Pag;public class JNI { static{
  System.loadLibrary("hello");
 }
 public native void  printHello();
 public static void main(String[] args) {
  new JNI().printHello();
 }}上面的例子是java简单的调用native方法。可以通过javac生成.class文件
 
比如上面的在D:jni文件夹中,第一中方式是在dos命令cmd中cd d:
 
cd jni
 
cd Pag
 
javac JNI.java
 
如:C:UsersAdministrator>cd d:
 D:jniPag
 C:UsersAdministrator>d:
 D:jniPag>javac JNI.java
 
这样将在当前目录中生成class文件。或者在eclipse直接bin目录中就会有生成好的.class文件
 
第二种是直接在dos命令cmd中javac d:jniPagJNI.java
 
如:C:UsersAdministrator>javac d:jniPagJNI.java
 下面是生成头文件的两种方法:
 
第一种方法是进入相应生成的生成.class包目录(注意是包含.class的包目录,并不是.class目录)。
 
例如:
 
C:UsersAdministrator>d:
 
D:>cd workspaceJNITextinPag
 D:workspaceJNITextinPag>javah JNI
 错误:无法访问 JNI
 错误的类文件: .JNI.class
 类文件包含错误的类: Pag.JNI
 请删除该文件或确保该文件位于正确的类路径子目录中。
 com.sun.tools.javac.util.Abort
       at com.sun.tools.javac.comp.Check.completionError(Check.java:164)
       at com.sun.tools.javadoc.DocEnv.loadClass(DocEnv.java:149)
       at com.sun.tools.javadoc.RootDocImpl.<init>(RootDocImpl.java:77)
       at com.sun.tools.javadoc.JavadocTool.getRootDocImpl(JavadocTool.java:159
 )
       at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:330)
       at com.sun.tools.javadoc.Start.begin(Start.java:128)
       at com.sun.tools.javadoc.Main.execute(Main.java:66)
       at com.sun.tools.javah.Main.main(Main.java:147)
 javadoc: 错误 - 致命错误
 2 错误上边的提示是进入了.class 目录中,并不是包目录。接下来返回到上一个目录中,也就是说的包目录(D:workspaceJNITextin),通过javah Pag.JNI编译.h头文件,将会在bin中生成
 
D:workspaceJNITextinPag>
 D:workspaceJNITextinPag>cd ..
 
D:workspaceJNITextin>javah Pag.JNIbin中有类包Pag,也就是说包路径。通过javah命令实现
 
第二种方法的命令是C:UsersAdministrator>javah -classpath D:workspaceJNITextin -jni Pag.JNI (直接进入cmd)中javah -classpath <包路径> -jni <包含.class的包路径>。
 
经过实验测试C:UsersAdministrator>javah -classpath D:workspaceJNITextin -jni Pag.JNI中,-jni可以省略不写,但是-classpath 不能省略,否则报
 
javadoc: 错误 - 非法的软件包名称:"D:workspaceJNITextin"的错误。生成的文件如下:/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Pag_JNI */#ifndef _Included_Pag_JNI
#define _Included_Pag_JNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:   Pag_JNI
 * Method:    printHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Pag_JNI_printHello
  (JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif随后通过CC++编程工具实现其头文件的方法,生成dll。更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11