- 下载Android SDK、NDK,配置环境变量
- 新建一个android项目,在项目根目录下创建一个文件夹jni,创建Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-jni
LOCAL_SRC_FILES := native.c
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
- 创建Java代码:
package com.example.simplendkdemo.util;
public class Util {
public native String stringFromJNI();
public native int stringToJNI(String val);
static {
System.loadLibrary("native-jni");
}
}
- 生成头文件:
从shell模式下,切换到项目根目录,执行命令:
javah -classpath ./bin/classes -d jni/ com.example.simplendkdemo.util.Util
- 创建native.c文件,根据头文件编辑代码:
#include <string.h>
#include <jni.h>
#include <android/log.h>
#define DEBUG_TAG "NDK_SimpleNDKDemo_Util"
jstring Java_com_example_simplendkdemo_util_Util_stringFromJNI(JNIEnv* env, jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
jint Java_com_example_simplendkdemo_util_Util_stringToJNI(JNIEnv* env, jobject thiz, jstring str_val)
{
jint return_i = 0;
const char *str = (*env)->GetStringUTFChars(env, str_val, 0);
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Print java String: %s", str);
(*env)->ReleaseStringUTFChars(env, str_val, str);
return return_i;
}
- 编译c代码,生成库文件:
从shell模式下,切换到项目/jni目录,执行命令:
ndk-build
- 编写java代码调用本地方法