背景:
我在做一个android手机软件的项目,想要从java代码中调用Native代码,即使用so文件中的函数。
已经安装好了NDK。
android sdk 包目录:D:\Program Files\android-sdk-windows\sdk\platforms\android-18\android.jar
当前工程class文件目录:E:\jlh\wordsapce-android\SQLite_test\bin|classes
按照如下操作步骤记录了生成头文件遇到的问题和解决方法。
第一步:
在MainActivity类中加入如下代码片段
public static native String strFromJNI();
static{
System.loadLibrary("MyFirstJNI");
}
来调用MyFirstJNI.so文件
第二步:
保存之前的java文件,打开cmd,进入E:\jlh\wordsapce-android\SQLite_test\bin|classes目录,
第三步:
遇到上图问题,遂查看javah的用法,如下图
如上图所示,现在我只指定了-jni生成默认样式头标头文件,和给出了<包名.类名>的全限定名称。
“无法访问android.app.Activity”是指找不到android.jar包所在目录。
所以需要添加-classpath指定加载类的路径。
注意:
这里已经进入了E:\jlh\workspace-android\SQLite_test\bin\classes文件路径,
不必进入E:\jlh\workspace-android\SQLite_test\bin\classes\com\example\sqlite_test文件路径。
所以“.”表示当前classes文件路径。
android.jar包路径在:D:\Program Files\android-sdk-windows\sdk\platforms\android-18\android.jar
调用-classpath设置这两个路径,由于带空格的路径需要用双引号引起来,两个路径用分号隔开。
如下图所示
这样就在bin\classes\目录下生成了对应的头文件。
其他异常错误可以参考这片博文:
http://blog.csdn.net/hejinjing_tom_com/article/details/8125648