在android studio上入手android NDK开发简单环境搭建
- 下载android NDK包
android-ndk-r14b-windows-x86_64.zip - 新建类,生成.h头文件
在java目录下新建一个类,声明一个本地方法
public class NdkJniUtils {
public native String getCLanguageString();
}
Rebuild 工程,在app\build\intermediates\classes\debug\com\ndk\demo目录下生成NdkJniUtils.class文件;打开项目工程文件,cd 到 app\build\intermediates\classes\debug 目录,在当前目录打开cmd,输入:javah -classpath com.ndk.demo.NdkJniUtils
在app\build\intermediates\classes\debug 目录生成com_ndk_demo_NdkJniUtils.h文件
com_ndk_demo_NdkJniUtils.h
#ifndef _Included_com_ndk_demo_NdkJniUtils
#define _Included_com_ndk_demo_NdkJniUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_ndk_demo_NdkJniUtils
* Method: getCLanguageString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_ndk_demo_NdkJniUtils_getCLanguageString
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
- 新建cpp文件
在java同级目录中新建一个jni文件夹,把com_ndk_demo_NdkJniUtils.h文件拷贝到该文件夹下,再新建一个.cpp文件
com_ndk_demo_NdkJniUtils.cpp
#include "com_ndk_demo_NdkJniUtils.h"
JNIEXPORT jstring JNICALL Java_com_ndk_demo_NdkJniUtils_getCLanguageString(JNIEnv *ent, jobject object){
return (*ent).NewStringUTF("This just a test for Android Studio NDK JNI developer!");//返回一个字符串
}
- 配置环境,运行项目
配置ndk,与配置SDK地址相同
在local.prperties中添加下面一行代码
ndk.dir=D\:\\android-ndk-r14b
在app下build.gradle文件中添加
defaultConfig {
ndk{
moduleName "libtestjni" //生成的so名字,自定义
abiFilters "armeabi", "armeabi-v7a", "x86","arm64-v8a","mips","mips64","x86_64"
}
}
在NdkJniUtils.java文件中导入本地库
static{
System.loadLibrary("libtestjni");//自己定义的so名字
}
运行项目
在app\build\intermediates\ndk\debug\lib目录下生成一系列so文件