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:\Users\Administrator>cd d:
D:\jni\Pag
C:\Users\Administrator>d:
D:\jni\Pag>javac JNI.java

这样将在当前目录中生成class文件。或者在eclipse直接bin目录中就会有生成好的.class文件

第二种是直接在dos命令cmd中javac d:\jni\Pag\JNI.java

如:C:\Users\Administrator>javac d:\jni\Pag\JNI.java

下面是生成头文件的两种方法:

第一种方法是进入相应生成的生成.class包目录(注意是包含.class的包目录,并不是.class目录)。

例如:

C:\Users\Administrator>d:

D:\>cd workspace\JNIText\bin\Pag
D:\workspace\JNIText\bin\Pag>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:\workspace\JNIText\bin),通过javah Pag.JNI编译.h头文件,将会在bin中生成

D:\workspace\JNIText\bin\Pag>
D:\workspace\JNIText\bin\Pag>cd ..

D:\workspace\JNIText\bin>javah Pag.JNI

bin中有类包Pag,也就是说包路径。通过javah命令实现

第二种方法的命令是C:\Users\Administrator>javah -classpath D:\workspace\JNIText\bin -jni Pag.JNI (直接进入cmd)中javah -classpath <包路径> -jni <包含.class的包路径>。

经过实验测试C:\Users\Administrator>javah -classpath D:\workspace\JNIText\bin -jni Pag.JNI中,-jni可以省略不写,但是-classpath 不能省略,否则报

javadoc: 错误 - 非法的软件包名称:"D:\workspace\JNIText\bin"的错误。

生成的文件如下:

/* 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


随后通过C\C++编程工具实现其头文件的方法,生成dll。

转载注明出处http://write.blog.csdn.net/postedit

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值