http://blog.csdn.net/codezjx/article/details/8879670
1.添加ndk环境支持
Android Tools -> Add Native Support...
2.需要手动添加include头目录,否则jni.h不被识别
项目Properties -> C/C++ General -> Path and Symbols
include标签c,cpp,点Add添加头文件路径,FileSystem浏览自己NDK的头文件路径,比如我的:
E:/Documents/Android/sdk/ndk-bundle/platforms/android-19/arch-arm/usr/include
3.需要手动生成.h文件:
cmd(powershell报错)下
E:DocumentsworkspaceTestNDKPlugin>javah -classpath E:DocumentsAndroidsdkplatformsandroid-25android.jar;./bin/classes com.my.testndkplugin.MainActivity (要包含android环境类,否则类找不到)
powershell下:
E:DocumentsworkspaceTestNDKPlugin> javah -classpath bin/classes -bootclasspath E:DocumentsAndroidsdkplatformsandroid-25android.jar com.my.testndkplugin.MainActivity
并且这种方式生成的头文件有很多其他undef信息,如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_my_testndkplugin_MainActivity */ #ifndef _Included_com_my_testndkplugin_MainActivity #define _Included_com_my_testndkplugin_MainActivity #ifdef __cplusplus extern "C" { #endif #undef com_my_testndkplugin_MainActivity_BIND_ABOVE_CLIENT #define com_my_testndkplugin_MainActivity_BIND_ABOVE_CLIENT 8L #undef com_my_testndkplugin_MainActivity_BIND_ADJUST_WITH_ACTIVITY #define com_my_testndkplugin_MainActivity_BIND_ADJUST_WITH_ACTIVITY 128L #undef com_my_testndkplugin_MainActivity_BIND_ALLOW_OOM_MANAGEMENT #define com_my_testndkplugin_MainActivity_BIND_ALLOW_OOM_MANAGEMENT 16L #undef com_my_testndkplugin_MainActivity_BIND_AUTO_CREATE #define com_my_testndkplugin_MainActivity_BIND_AUTO_CREATE 1L #undef com_my_testndkplugin_MainActivity_BIND_DEBUG_UNBIND #define com_my_testndkplugin_MainActivity_BIND_DEBUG_UNBIND 2L #undef com_my_testndkplugin_MainActivity_BIND_EXTERNAL_SERVICE #define com_my_testndkplugin_MainActivity_BIND_EXTERNAL_SERVICE -2147483648L #undef com_my_testndkplugin_MainActivity_BIND_IMPORTANT #define com_my_testndkplugin_MainActivity_BIND_IMPORTANT 64L #undef com_my_testndkplugin_MainActivity_BIND_NOT_FOREGROUND #define com_my_testndkplugin_MainActivity_BIND_NOT_FOREGROUND 4L #undef com_my_testndkplugin_MainActivity_BIND_WAIVE_PRIORITY #define com_my_testndkplugin_MainActivity_BIND_WAIVE_PRIORITY 32L #undef com_my_testndkplugin_MainActivity_CONTEXT_IGNORE_SECURITY #define com_my_testndkplugin_MainActivity_CONTEXT_IGNORE_SECURITY 2L #undef com_my_testndkplugin_MainActivity_CONTEXT_INCLUDE_CODE #define com_my_testndkplugin_MainActivity_CONTEXT_INCLUDE_CODE 1L #undef com_my_testndkplugin_MainActivity_CONTEXT_RESTRICTED #define com_my_testndkplugin_MainActivity_CONTEXT_RESTRICTED 4L #undef com_my_testndkplugin_MainActivity_MODE_APPEND #define com_my_testndkplugin_MainActivity_MODE_APPEND 32768L #undef com_my_testndkplugin_MainActivity_MODE_ENABLE_WRITE_AHEAD_LOGGING #define com_my_testndkplugin_MainActivity_MODE_ENABLE_WRITE_AHEAD_LOGGING 8L #undef com_my_testndkplugin_MainActivity_MODE_MULTI_PROCESS #define com_my_testndkplugin_MainActivity_MODE_MULTI_PROCESS 4L #undef com_my_testndkplugin_MainActivity_MODE_NO_LOCALIZED_COLLATORS #define com_my_testndkplugin_MainActivity_MODE_NO_LOCALIZED_COLLATORS 16L #undef com_my_testndkplugin_MainActivity_MODE_PRIVATE #define com_my_testndkplugin_MainActivity_MODE_PRIVATE 0L #undef com_my_testndkplugin_MainActivity_MODE_WORLD_READABLE #define com_my_testndkplugin_MainActivity_MODE_WORLD_READABLE 1L #undef com_my_testndkplugin_MainActivity_MODE_WORLD_WRITEABLE #define com_my_testndkplugin_MainActivity_MODE_WORLD_WRITEABLE 2L #undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_DIALER #define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_DIALER 1L #undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_DISABLE #define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_DISABLE 0L #undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SEARCH_GLOBAL #define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SEARCH_GLOBAL 4L #undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SEARCH_LOCAL #define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SEARCH_LOCAL 3L #undef com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SHORTCUT #define com_my_testndkplugin_MainActivity_DEFAULT_KEYS_SHORTCUT 2L #undef com_my_testndkplugin_MainActivity_RESULT_CANCELED #define com_my_testndkplugin_MainActivity_RESULT_CANCELED 0L #undef com_my_testndkplugin_MainActivity_RESULT_FIRST_USER #define com_my_testndkplugin_MainActivity_RESULT_FIRST_USER 1L #undef com_my_testndkplugin_MainActivity_RESULT_OK #define com_my_testndkplugin_MainActivity_RESULT_OK -1L /* * Class: com_my_testndkplugin_MainActivity * Method: StringFromJni * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_my_testndkplugin_MainActivity_StringFromJni (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
4.编辑C文件,编译ok
此时的编译命令为:
若要ndk编译生成gdb.setup和gdbserver
编译的时候,在$ndk-build指令后面加多一行 NDK_DEBUG=1,即$ndk-build NDK_DEBUG=1,则最后在libs目录下可以看到gdb.setup和gdbserver。
结果如下图:
=======================手动构建ndk工程======================
1.手动生成.h文件
2.手动创建jni目录,Android.mk、Application.mk、c文件
3.手动配置ndkBuilder
4.编译