前一段时间在做jni,整理了一份文档,文档已经过一位毫无开发经验的同志的测试,他自己按照我的文档实现了jni的调用,作为jni的入门,希望对你们有帮助。
准备工作:下载NDK,配置环境变量,即将NDK的路径添加到PATH中,同时添加到eclipse的windows->preferences->Android->NDK的NDK Location中。
我先叙述一下总的流程,再分开叙述各步骤的实现。
流程:
第一步:在MainActivity中声明native方法;
第二步:在项目中创建名叫jni的目录,接下来在其中生成.h文件;
第三步:在jni目录中创建.c文件,实现本地方法;
第四步:编译.c文件,生成.so文件;
第五步:在Activity中加载.so文件;
最后,在Activity的oncreate方法中中调用本地方法,运行项目。
实现:
一.在MainActivity中声明native方法:
public native String stringFromJNI();
具体请参考下面的代码:
二.生成.h头文件
1.先在项目中创建一个名叫jni的文件夹。
2.在eclipse中,点击Run->External tools->External tools Configer..,弹出如下的对话框。右键Program,点击new,然后填写以下内容,具体如图所示。
name:原则上可以随便写,我写的是:generate_c_header_file.
Location:单击Variables,选system_path,之后在其后面加 :javah;
这部分内容具体参考下图,路径为android.jar的路径,结合你自己的具体情况填写。
配置完成后,生成头文件:
1)、选中声明本地方法的Activity。2)、单击generate_c_header_file。如下图所示。
刷新项目,头文件就生成了!
头文件中的主要内容如下图所示:
第三步:实现本地方法。
1、右键项目->Android Tools->Add Native Support..,系统会自动给我们在jni目录中生成android.mk文件和.cpp文件。这时头文件也许会提示错误,不用管它,进行第2步。
2、右键项目->properties->c/c++ general->Path and Symbols->add->File System…,找到NDK的目录中的platforms中的相应平台(我的是arm平台)中的include文件夹,选中,点击确定。如下图。
打开.cpp文件,实现本地方法。若有修改android.mk文件的必要再修改android.mk文件。如下图。
第四步:编译.c文件,生成.so文件。
打开cmd,进入项目所在路径,输入命令ndk-build进行编译。然后刷新项目,就会发现多了一个obj文件夹,我们的.so文件就在这里边。
第五步:在Activity中加载.so文件,如下图所示:
最后,在Activity的oncreate方法中中调用本地方法,运行项目。
至此,大功告成。