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目录下:

技术分享

这样就可以正确使用了。运行结果:

技术分享

 

以上。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。