环境配置主要是为了生成相应的 so库,并且加载它
一. ndk环境配置
1. 生成相应.h, .c , .cpp,及jni文件夹
(1) MainActivity 中加入静态方法,如
public static native String helloJni();
public static native int addCalc(int a, int b);
(2)在Terminal中打开JAVA文件所在目录
输入 javah -jni com.work.ndkdemo.MainActivity 得到com_work_ndkdemo_MainActivity.h
(3) 新建jniFolder
将.h文件移入
新建com_work_ndkdemo_MainActivity.c 实现之前定义的方法
#include<com_work_jnidemo_MainActivity.h>
JNIEXPORT jstring JNICALL Java_com_work_jnidemo_MainActivity_helloJni
(JNIEnv *env, jclass jobj) {
return (*env)->NewStringUTF(env,"Hello JNI!");
}
JNIEXPORT jint JNICALL Java_com_work_jnidemo_MainActivity_addCalc
(JNIEnv *env, jclass jobj, jint ja, jint jb) {
return ja + jb;
}
2. 生成 .so 文件
(1)在jni文件夹中新建 Application.mk
APP_ABI := armeabi-v7a x86
#最常用的APP_ABI字段:指定需要基于哪些CPU平台的.so文件
(2)在jni文件夹中新建Android.mk
LOCAL_PATH := $(call my-dir)
#设置工作目录,而my-dir则会返回Android.mk文件所在的目录
include $(CLEAR_VARS)
#清除几乎所有以LOCAL——PATH开头的变量(不包括LOCAL_PATH)
LOCAL_MODULE := hello_jni
#设置模块的名称,即编译出来.so文件名
#注,要和上述步骤中build.gradle中NDK节点设置的名字相同
LOCAL_SRC_FILES := com_work_jnidemo_MainActivity.c
#指定参与模块编译的C/C++源文件名
include $(BUILD_SHARED_LIBRARY)
#指定生成的静态库或者共享库在运行时依赖的共享库模块列表。
(3) 配置 Setting->External Tools ndk-bundle
(4)使用ndk-bundle编译jni文件夹 得到obj文件夹
将obj/local文件夹中的文件夹复制到libs, 只保留.so文件
3. 配置及使用.so文件
(1)检查local.properties
(2) 修改 app: build.gradle
defaultConfig中加入
ndk {
moduleName "hello_jni"
stl "stlport_static"
ldLibs "log"
abiFilters "armeabi-v7a", "x86"
}
Android 中加入
sourceSets{
main{
jniLibs.srcDirs = ['libs']
}
}
(3)
Java文件中加入
static {
System.loadLibrary("hello_jni");
}