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文件
第一种方法是进入相应生成的生成.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"的错误。
随后通过C\C++编程工具实现其头文件的方法,生成dll。
转载注明出处http://write.blog.csdn.net/postedit