NDK开发环境配置-AndroidStudio
参考文章http://ph0b.com/android-studio-gradle-and-ndk-integration/
看了上面的文章之后对于AndroidStudio集成NDK生成的so动态库有了很简单的解决方案,其他的东西暂时没有很难的东西。
因此我们首先就需要生成so文件,按照hello-jni示例项目中的Android.mk和Application.mk Makefile配置文件来构建即可,使用根据javah自动生成的.h文件创建.c文件,所有文件都在jni目录下:
各个文件的内容如下:Android.mk(简单的只生成共享库)
1 LOCAL_PATH := $(call my-dir) 2 3 include $(CLEAR_VARS) 4 5 LOCAL_MODULE := com_examples_usejni_MainActivity 6 LOCAL_SRC_FILES := com_examples_usejni_MainActivity.c 7 8 include $(BUILD_SHARED_LIBRARY)
Application.mk(暂时不是太了解ABI如何使用,因此只能按照所有平台都生成so库)
1 APP_ABI := all
com_examples_usejni_MainActivity.h
1 /* DO NOT EDIT THIS FILE - it is machine generated */ 2 #include <jni.h> 3 /* Header for class com_examples_usejni_MainActivity */ 4 5 #ifndef _Included_com_examples_usejni_MainActivity 6 #define _Included_com_examples_usejni_MainActivity 7 #ifdef __cplusplus 8 extern "C" { 9 #endif 10 #undef com_examples_usejni_MainActivity_MODE_PRIVATE 11 #define com_examples_usejni_MainActivity_MODE_PRIVATE 0L 12 #undef com_examples_usejni_MainActivity_MODE_WORLD_READABLE 13 #define com_examples_usejni_MainActivity_MODE_WORLD_READABLE 1L 14 #undef com_examples_usejni_MainActivity_MODE_WORLD_WRITEABLE 15 #define com_examples_usejni_MainActivity_MODE_WORLD_WRITEABLE 2L 16 #undef com_examples_usejni_MainActivity_MODE_APPEND 17 #define com_examples_usejni_MainActivity_MODE_APPEND 32768L 18 #undef com_examples_usejni_MainActivity_MODE_MULTI_PROCESS 19 #define com_examples_usejni_MainActivity_MODE_MULTI_PROCESS 4L 20 #undef com_examples_usejni_MainActivity_BIND_AUTO_CREATE 21 #define com_examples_usejni_MainActivity_BIND_AUTO_CREATE 1L 22 #undef com_examples_usejni_MainActivity_BIND_DEBUG_UNBIND 23 #define com_examples_usejni_MainActivity_BIND_DEBUG_UNBIND 2L 24 #undef com_examples_usejni_MainActivity_BIND_NOT_FOREGROUND 25 #define com_examples_usejni_MainActivity_BIND_NOT_FOREGROUND 4L 26 #undef com_examples_usejni_MainActivity_BIND_ABOVE_CLIENT 27 #define com_examples_usejni_MainActivity_BIND_ABOVE_CLIENT 8L 28 #undef com_examples_usejni_MainActivity_BIND_ALLOW_OOM_MANAGEMENT 29 #define com_examples_usejni_MainActivity_BIND_ALLOW_OOM_MANAGEMENT 16L 30 #undef com_examples_usejni_MainActivity_BIND_WAIVE_PRIORITY 31 #define com_examples_usejni_MainActivity_BIND_WAIVE_PRIORITY 32L 32 #undef com_examples_usejni_MainActivity_BIND_IMPORTANT 33 #define com_examples_usejni_MainActivity_BIND_IMPORTANT 64L 34 #undef com_examples_usejni_MainActivity_BIND_ADJUST_WITH_ACTIVITY 35 #define com_examples_usejni_MainActivity_BIND_ADJUST_WITH_ACTIVITY 128L 36 #undef com_examples_usejni_MainActivity_CONTEXT_INCLUDE_CODE 37 #define com_examples_usejni_MainActivity_CONTEXT_INCLUDE_CODE 1L 38 #undef com_examples_usejni_MainActivity_CONTEXT_IGNORE_SECURITY 39 #define com_examples_usejni_MainActivity_CONTEXT_IGNORE_SECURITY 2L 40 #undef com_examples_usejni_MainActivity_CONTEXT_RESTRICTED 41 #define com_examples_usejni_MainActivity_CONTEXT_RESTRICTED 4L 42 #undef com_examples_usejni_MainActivity_RESULT_CANCELED 43 #define com_examples_usejni_MainActivity_RESULT_CANCELED 0L 44 #undef com_examples_usejni_MainActivity_RESULT_OK 45 #define com_examples_usejni_MainActivity_RESULT_OK -1L 46 #undef com_examples_usejni_MainActivity_RESULT_FIRST_USER 47 #define com_examples_usejni_MainActivity_RESULT_FIRST_USER 1L 48 #undef com_examples_usejni_MainActivity_DEFAULT_KEYS_DISABLE 49 #define com_examples_usejni_MainActivity_DEFAULT_KEYS_DISABLE 0L 50 #undef com_examples_usejni_MainActivity_DEFAULT_KEYS_DIALER 51 #define com_examples_usejni_MainActivity_DEFAULT_KEYS_DIALER 1L 52 #undef com_examples_usejni_MainActivity_DEFAULT_KEYS_SHORTCUT 53 #define com_examples_usejni_MainActivity_DEFAULT_KEYS_SHORTCUT 2L 54 #undef com_examples_usejni_MainActivity_DEFAULT_KEYS_SEARCH_LOCAL 55 #define com_examples_usejni_MainActivity_DEFAULT_KEYS_SEARCH_LOCAL 3L 56 #undef com_examples_usejni_MainActivity_DEFAULT_KEYS_SEARCH_GLOBAL 57 #define com_examples_usejni_MainActivity_DEFAULT_KEYS_SEARCH_GLOBAL 4L 58 #undef com_examples_usejni_MainActivity_HONEYCOMB 59 #define com_examples_usejni_MainActivity_HONEYCOMB 11L 60 #undef com_examples_usejni_MainActivity_MSG_REALLY_STOPPED 61 #define com_examples_usejni_MainActivity_MSG_REALLY_STOPPED 1L 62 #undef com_examples_usejni_MainActivity_MSG_RESUME_PENDING 63 #define com_examples_usejni_MainActivity_MSG_RESUME_PENDING 2L 64 /* 65 * Class: com_examples_usejni_MainActivity 66 * Method: getStringFromNative 67 * Signature: ()Ljava/lang/String; 68 */ 69 JNIEXPORT jstring JNICALL Java_com_examples_usejni_MainActivity_getStringFromNative 70 (JNIEnv *, jobject); 71 72 #ifdef __cplusplus 73 } 74 #endif 75 #endif
com_examples_usejni_MainActivity.c
1 #include "com_examples_usejni_MainActivity.h" 2 JNIEXPORT jstring JNICALL Java_com_examples_usejni_MainActivity_getStringFromNative 3 (JNIEnv *env, jobject thiz){ 4 return (*env)->NewStringUTF(env,"Hello JNIEnv"); 5 }
这些文件都用写好了之后,只需要按照正常方法调用ndk-build命令就可以生成所有的so文件,
这样,将libs中的所有文件夹都转移到jniLibs目录下:
这样就可以正确使用了。运行结果:
以上。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。