NDK plugin来构建JNI项目(相对于手动构建)

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.编译

原文地址:https://www.cnblogs.com/xunbu7/p/6868439.html