1:下载ndk,本人下载的是64位android-ndk-r10,设置ndk的环境变量NDK_HOME=E:\Software\Android\android-ndk32-r10-windows-x86_64\android-ndk-r10,另外再添加PATH环境变量同NDK_HOME一样的,cmd查看ndk-build的版本信息 ndk-build -version。
2:在adt的eclipse中设置NDK路径,菜单window-preferences-android-ndk-ndk location就是上面提到的NDK_HOME目录。
3:添加工程的本地支持,右键-android tools-add native support,命名例如TestNative,会自动生成一个jni文件夹,里面有两个文件,Android.mk,TestNative.cpp。
4:C++编译设置项目右键-properties-c/c++ build,设置build command =${NDK_HOME}/ndk-build.cmd,就是NDK_HOMD下的命令文件ndk-build.cmd,当然use default build command不要选。
5:新建类,例如TestNative,代码如下
public class TestNative {
static
{
System.loadLibrary("TestNative");
}
public native int add(int i, int j);
}
6:用javah,利用cmd cd进入到项目com目录的上一层src,输入命令javah -classpath . -jni com.example.***.TestNative2,回车,就会看见src目录下多一个头文件com_example_hheas_TestNative2,将该文件拷贝到jni目录下。
该方法每次都要重新设置,不方便,可以用工具
External Tools Configurations,左边Program右键new,例如命名javahForAndroidProject,
Location设置为:${system_path:javah}
Working Directory设置为:${project_loc}
Arguments设置为:-v -classpath "${project_loc}/bin/classes" -d "${project_loc}/jni" ${java_type_name}
应用之后,Organize Favorites,Add,选择刚才新建的工具javahForAndroidProject,OK。
以后文件重新编辑之后,只要点击那个工具javahForAndroidProject,选中jni重新刷新F5就可以了。
7:在TestNative.cpp中实现,
#include <jni.h>
#include "com_example_hheas_TestNative.h"
#include "com_example_hheas_TestNative2.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_hheas_TestNative
* Method: add
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_example_hheas_TestNative_add
(JNIEnv *, jobject, jint i, jint j) {
return i + j;
}
JNIEXPORT jint JNICALL Java_com_example_hheas_TestNative2_multiply
(JNIEnv *, jobject, jint i, jint j) {
return i * j;
}
#ifdef __cplusplus
}
#endif
如果头文件是C规则的话,源文件要加extern "C"一定要注意!
8:项目libs目录下会找到刚才生成的库文件libTestNative.so
9:注意C和C++还是有区别的,例如
12:还有一步,本人在重新按照此步骤时,出现jint无法识别的问题,需要设置C/C++头文件路径的,项目右键Properties-c/c++ General-Path and Symbols右边Include Add 添加路径E:\Software\Android\android-ndk32-r10-windows-x86_64\android-ndk-r10\platforms\android-14\arch-arm\usr\include,上面是本人的路径,依实际情况而变。