Android Studio NDK环境配置及JNI使用方法(下)

之前也对JNI和NDK做了详解,接下来,对它的使用做一个详细的介绍

1.NDK的安装及配置
这里写图片描述

这里写图片描述

这里写图片描述

配置环境变量

安装好的NDk一般位于你的sdk文件夹下的ndk-bundle。可以看到里面有ndk-build文件,下文进行编译的时候我们会用到。

然后将该路径配置到你系统变量的path里面去,如下:

1.在系统环境变量里面创建NDK_ROOT

这里写图片描述

2.将NDK_ROOT追加到Path环境变量下–>;%NDK_ROOT%

添加完毕后打开cmd,输入ndk-build,出现如下内容则表示成功(如下图所示)。
这里写图片描述

3.JNI的使用方法

新建“本地”方法

在MainActivity中建立:
这里写图片描述

编译该类得到对应的.h文件

切换到Terminal(如下图所示)。

方式一:输入javah -jni -encoding utf-8包名.类名
这里写图片描述

自己之前用这种方法,.h文件无法生成,老是报找不到文件;如果你这种方法无法使用,可以换另一种(如下)。

方式二:在cmd中找到你的项目地址,并输入javah -jni -encoding utf-8包名.类名

这里写图片描述

编译成功后,,,,就可以看到.h文件(如下图)

这里写图片描述

.h文件中:
其实重要的部分就是这一句代码:

JNIEXPORT jstring JNICALL Java_cn_handsomedragon_testndk_MainActivity_getStrFromJNI(JNIEnv *, jobject);

仔细观察可以看到他是遵循“Java_包名类名本地方法名”来组织的(了解到这些后我们以后就可以不生成.h文件然后直接去写.c文件了)。

编写.c文件

在app目录下新建jni文件夹,并在里面建立一个demo.c的c文件

这里写图片描述

在文件中编写代码:

#include <jni.h>

jstring JNICALL Java_cn_handsomedragon_testndk_MainActivity_getFromJNI(JNIEnv *env,jobject thiz) {

    return (*env)->NewStringUTF(env, "I`m Str from jni libs!");

}

这是就可以看出我们用的是.h中的那行代码,稍微修改为如上格式就是我们所需要的.c文件了

编写Android.mk文件

在jni目录下新建Android.mk(必须是这个名称Android.mk)文件

如:上图中jni文件夹下面的Android.mk文件

文件中的代码编写:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := demo//要生成的so库的名称,但实际为libdemo.so

LOCAL_SRC_FILES := demo.c//要使用的文件,刚才编写的demo.c文件

include $(BUILD_SHARED_LIBRARY)

*注:编译时,记得把.mk中的注释去掉(不能写注释)

编译.so文件

切换到Terminal(如下图所示)。
这里写图片描述

编译完成后,刷新项目工程:可以看到在app目录下生成的libs和obj文件夹,其中libs是有用的,obj文件夹无用可以删除。libs中的可以看到生成的libdemo.so文件。

这里写图片描述

最后两个最重要的配置

1.在local.properties中设置NDK路径

这里写图片描述

2.在app的build.gradle的android节点下设置

这里写图片描述

运行项目,看控制台,如果打印如下,说明成功了。。。。

这里写图片描述

猜你喜欢

转载自blog.csdn.net/chen_md/article/details/81130098